ActiveModel::Name (original) (raw)

Methods

E

H

M

N

T

U

Included Modules

Attributes

[RW] cache_key
[RW] collection
[RW] element
[RW] i18n_key
[RW] name
[RW] param_key
[RW] plural
[RW] route_key
[RW] singular
[RW] singular_route_key

Class Public methods

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"

Source: show | on GitHub

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

Instance Public methods

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

Equivalent to String#<=>.

class BlogPost
  extend ActiveModel::Naming
end

BlogPost.model_name <=> 'BlogPost'  # => 0
BlogPost.model_name <=> 'Blog'      # => 1
BlogPost.model_name <=> 'BlogPosts' # => -1

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

Equivalent to ==.

class BlogPost
  extend ActiveModel::Naming
end

BlogPost.model_name === 'BlogPost'  # => true
BlogPost.model_name === 'Blog Post' # => false

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

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

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: show | on GitHub

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

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

Returns the class name.

class BlogPost
  extend ActiveModel::Naming
end

BlogPost.model_name.to_s # => "BlogPost"

Equivalent to to_s.

Source: show | on GitHub

delegate :==, :===, :<=>, :=, :"!", :eql?, :match?, :to_s, :to_str, :as_json, to: :name