Module: ActForm::Attributes::ClassMethods

Defined in:
lib/act_form/attributes.rb

Overview

rubocop:disable Style/Documentation

Instance Method Summary collapse

Instance Method Details

#attribute(name, cast_type = :object, **options) ⇒ Object Also known as: attr

attribute :name, type: :string

or

attribute :name, :string, required: true



30
31
32
33
34
35
36
37
38
39
# File 'lib/act_form/attributes.rb', line 30

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



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

def define_reader_method(name, default: NO_DEFAULT_PROVIDED)
  define_method(name) do
    if attributes.key?(name)
      attributes[name]
    else
      get_default(default, NO_DEFAULT_PROVIDED)
    end
  end
end

#define_writer_method(name, cast_type) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/act_form/attributes.rb', line 52

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