# File activemodel/lib/active_model/naming.rb, line 166 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"
# File activemodel/lib/active_model/naming.rb, line 83
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
# File activemodel/lib/active_model/naming.rb, line 50
Equivalent to String#<=>
.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name <=> 'BlogPost' # => 0 BlogPost.model_name <=> 'Blog' # => 1 BlogPost.model_name <=> 'BlogPosts' # => -1
# File activemodel/lib/active_model/naming.rb, line 19
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
# File activemodel/lib/active_model/naming.rb, line 35
Equivalent to #==
.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name === 'BlogPost' # => true BlogPost.model_name === 'Blog Post' # => false
# File activemodel/lib/active_model/naming.rb, line 66
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
# File activemodel/lib/active_model/naming.rb, line 99
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
# File activemodel/lib/active_model/naming.rb, line 197 def human(options = {}) return @human unless @klass.respond_to?(:lookup_ancestors) && @klass.respond_to?(:i18n_scope) defaults = @klass.lookup_ancestors.map do |klass| klass.model_name.i18n_key end defaults << options[:default] if options[:default] defaults << @human options = { scope: [@klass.i18n_scope, :models], count: 1, default: defaults }.merge!(options.except(:default)) I18n.translate(defaults.shift, **options) 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.
# File activemodel/lib/active_model/naming.rb, line 115
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
# File activemodel/lib/active_model/naming.rb, line 131
Returns the class name.
class BlogPost extend ActiveModel::Naming end BlogPost.model_name.to_s # => "BlogPost"
# File activemodel/lib/active_model/naming.rb, line 151 delegate :==, :===, :<=>, :=~, :"!~", :eql?, :match?, :to_s, :to_str, :as_json, to: :name
Equivalent to to_s
.
# File activemodel/lib/active_model/naming.rb, line 212 def uncountable? @uncountable end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.