Module: LunaPark::Extensions::TypedAttrAccessor

Included in:
Dsl::Attributes
Defined in:
lib/luna_park/extensions/typed_attr_accessor.rb

Instance Method Summary collapse

Instance Method Details

#typed_attr_accessor(*names, callable, is_array: false) ⇒ Object



6
7
8
9
# File 'lib/luna_park/extensions/typed_attr_accessor.rb', line 6

def typed_attr_accessor(*names, callable, is_array: false)
  attr_reader(*names)
  typed_attr_writer(*names, callable, is_array: is_array)
end

#typed_attr_writer(*names, callable, is_array: false) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/luna_park/extensions/typed_attr_accessor.rb', line 11

def typed_attr_writer(*names, callable, is_array: false)
  return attr_writer(*names) if callable.nil?

  names.each do |name|
    setter = :"#{name}="
    ivar   = :"@#{name}"
    if is_array
      define_method(setter) { |input| instance_variable_set(ivar, input&.map { |elem| callable.call(elem) }) }
    else
      define_method(setter) { |input| instance_variable_set(ivar, callable.call(input)) }
    end
  end
end