module ActiveModel::Attributes::ClassMethods

Public Instance Methods

attribute(name, cast_type = nil, default: nil, **options) click to toggle source

Defines a model attribute. In addition to the attribute name, a cast type and default value may be specified, as well as any options supported by the given cast type.

class Person
  include ActiveModel::Attributes

  attribute :name, :string
  attribute :active, :boolean, default: true
end

person = Person.new
person.name = "Volmer"

person.name   # => "Volmer"
person.active # => true
Calls superclass method
# File lib/active_model/attributes.rb, line 59
def attribute(name, ...)
  super
  define_attribute_method(name)
end
attribute_names() click to toggle source

Returns an array of attribute names as strings.

class Person
  include ActiveModel::Attributes

  attribute :name, :string
  attribute :age, :integer
end

Person.attribute_names # => ["name", "age"]
# File lib/active_model/attributes.rb, line 74
def attribute_names
  attribute_types.keys
end
type_for_attribute(attribute_name, &block) click to toggle source

Returns the type of the specified attribute after applying any modifiers. This method is the only valid source of information for anything related to the types of a model’s attributes. The return value of this method will implement the interface described by ActiveModel::Type::Value (though the object itself may not subclass it).

# File lib/active_model/attributes.rb, line 79
      

Private Instance Methods

define_method_attribute=(canonical_name, owner:, as: canonical_name) click to toggle source
# File lib/active_model/attributes.rb, line 92
def define_method_attribute=(canonical_name, owner:, as: canonical_name)
  ActiveModel::AttributeMethods::AttrNames.define_attribute_accessor_method(
    owner, canonical_name, writer: true,
  ) do |temp_method_name, attr_name_expr|
    owner.define_cached_method(temp_method_name, as: "#{as}=", namespace: :active_model) do |batch|
      batch <<
        "def #{temp_method_name}(value)" <<
        "  _write_attribute(#{attr_name_expr}, value)" <<
        "end"
    end
  end
end