module LunaPark::Extensions::TypedAttrAccessor

Public Instance Methods

typed_attr_accessor(*names, callable, is_array: false) click to toggle source
# 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) click to toggle source
# 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