class ActiveModel::Name
Attributes
Public Class Methods
Source
# File lib/active_model/naming.rb, line 165 def initialize(klass, namespace = nil, name = nil, locale = :en) @name = name || klass.name raise ArgumentError, "Class name cannot be blank. You need to supply a name argument when anonymous class given" if @name.blank? @unnamespaced = @name.delete_prefix("#{namespace.name}::") if namespace @klass = klass @singular = _singularize(@name) @plural = ActiveSupport::Inflector.pluralize(@singular, locale) @uncountable = @plural == @singular @element = ActiveSupport::Inflector.underscore(ActiveSupport::Inflector.demodulize(@name)) @human = ActiveSupport::Inflector.humanize(@element) @collection = ActiveSupport::Inflector.tableize(@name) @param_key = (namespace ? _singularize(@unnamespaced) : @singular) @i18n_key = @name.underscore.to_sym @route_key = (namespace ? ActiveSupport::Inflector.pluralize(@param_key, locale) : @plural.dup) @singular_route_key = ActiveSupport::Inflector.singularize(@route_key, locale) @route_key << "_index" if @uncountable end
Returns a new ActiveModel::Name instance. By default, the namespace and name option will take the namespace and name of the given class respectively. Use locale argument for singularize and pluralize model name.
module Foo class Bar end end ActiveModel::Name.new(Foo::Bar).to_s # => "Foo::Bar"
Public Instance Methods
Source
# File lib/active_model/naming.rb, line 82
Equivalent to String#!~. Match the class name against the given regexp. Returns true if there is no match, otherwise false.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name !~ /Post/ # => false BlogPost.model_name !~ /\d/ # => true
Source
# File lib/active_model/naming.rb, line 49
Equivalent to String#<=>.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name <=> 'BlogPost' # => 0 BlogPost.model_name <=> 'Blog' # => 1 BlogPost.model_name <=> 'BlogPosts' # => -1
Source
# File lib/active_model/naming.rb, line 18
Equivalent to String#==. Returns true if the class name and other are equal, otherwise false.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name == 'BlogPost' # => true BlogPost.model_name == 'Blog Post' # => false
Source
# File lib/active_model/naming.rb, line 34
Equivalent to ==.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name === 'BlogPost' # => true BlogPost.model_name === 'Blog Post' # => false
Source
# File lib/active_model/naming.rb, line 65
Equivalent to String#=~. Match the class name against the given regexp. Returns the position where the match starts or nil if there is no match.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name =~ /Post/ # => 4 BlogPost.model_name =~ /\d/ # => nil
Source
# File lib/active_model/naming.rb, line 98
Equivalent to String#eql?. Returns true if the class name and other have the same length and content, otherwise false.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name.eql?('BlogPost') # => true BlogPost.model_name.eql?('Blog Post') # => false
Source
# File lib/active_model/naming.rb, line 196 def human(options = {}) return @human if i18n_keys.empty? || i18n_scope.empty? key, *defaults = i18n_keys defaults << options[:default] if options[:default] defaults << MISSING_TRANSLATION translation = I18n.translate(key, scope: i18n_scope, count: 1, **options, default: defaults) translation = @human if translation == MISSING_TRANSLATION translation end
Transform the model name into a more human format, using I18n. By default, it will underscore then humanize the class name.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name.human # => "Blog post"
Specify options with additional translating options.
Source
# File lib/active_model/naming.rb, line 114
Equivalent to String#match?. Match the class name against the given regexp. Returns true if there is a match, otherwise false.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name.match?(/Post/) # => true BlogPost.model_name.match?(/\d/) # => false
Source
# File lib/active_model/naming.rb, line 130
Returns the class name.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name.to_s # => "BlogPost"
Source
# File lib/active_model/naming.rb, line 150 delegate :==, :===, :<=>, :=~, :"!~", :eql?, :match?, :to_s, :to_str, :as_json, to: :name
Equivalent to to_s.
Source
# File lib/active_model/naming.rb, line 208 def uncountable? @uncountable end
Private Instance Methods
Source
# File lib/active_model/naming.rb, line 215 def _singularize(string) ActiveSupport::Inflector.underscore(string).tr("/", "_") end
Source
# File lib/active_model/naming.rb, line 219 def i18n_keys @i18n_keys ||= if @klass.respond_to?(:lookup_ancestors) @klass.lookup_ancestors.map { |klass| klass.model_name.i18n_key } else [] end end
Source
# File lib/active_model/naming.rb, line 227 def i18n_scope @i18n_scope ||= @klass.respond_to?(:i18n_scope) ? [@klass.i18n_scope, :models] : [] end