module SerializeHasMany::Concern

Public Instance Methods

serialize_has_many(attr_name, child_class, options=nil) click to toggle source
# File lib/serialize_has_many/concern.rb, line 9
def serialize_has_many(attr_name, child_class, options=nil)
  reject_if = options[:reject_if]
  using = options[:using] || raise(':using is required')
  serializer = Serializer.new(child_class, using)

  serialize attr_name, serializer
  validates_with Validators::TypeValidator, attr_name: attr_name, child_class: child_class

  define_method "#{attr_name}_attributes=" do |items|
    values = items.kind_of?(Hash) ? items.values : items
    values = values.reject { |v| reject_if.call(v) } if reject_if
    write_attribute attr_name, serializer.from_attributes(values)
  end

  if options[:validate] == true
    validates_with Validators::NestedValidator, attr_name: attr_name, child_class: child_class
  end
end