Module: ActForm::Attributes::ClassMethods

Defined in:
lib/act_form/attributes.rb

Instance Method Summary collapse

Instance Method Details

#attribute(name, cast_type = :object, **options) ⇒ Object

attribute :name, type: :string

or

attribute :name, :string, required: true



27
28
29
30
31
32
33
34
35
36
# File 'lib/act_form/attributes.rb', line 27

def attribute(name, cast_type = :object, **options)
  name = name.to_s
  cast_type = options[:type] || cast_type
  self.attribute_set = attribute_set.merge(name => [cast_type, options])

  define_reader_method name, **options.slice(:default)
  define_writer_method name, cast_type

  name
end

#define_reader_method(name, default: NO_DEFAULT_PROVIDED) ⇒ Object



38
39
40
# File 'lib/act_form/attributes.rb', line 38

def define_reader_method(name, default: NO_DEFAULT_PROVIDED)
  define_method(name) { attributes[name] || get_default(default, NO_DEFAULT_PROVIDED) }
end

#define_writer_method(name, cast_type) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/act_form/attributes.rb', line 42

def define_writer_method(name, cast_type)
  define_method("#{name}=") do |value|
    _value = ActiveModel::Type.lookup(cast_type).deserialize(value)
    @attributes = attributes.merge({name => _value})
    _value
  end
end