Class: Monies::Serialization::ActiveRecord::PredicateBuilderHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/monies/serialization/active_record.rb

Instance Method Summary collapse

Constructor Details

#initialize(predicate_builder, model) ⇒ PredicateBuilderHandler

Returns a new instance of PredicateBuilderHandler.



25
26
27
# File 'lib/monies/serialization/active_record.rb', line 25

def initialize(predicate_builder, model)
  @predicate_builder, @model = predicate_builder, model
end

Instance Method Details

#call(attribute, value) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/monies/serialization/active_record.rb', line 29

def call(attribute, value)
  currency = @model.send(:"#{attribute.name}_currency")

  if currency.nil?
    @predicate_builder.build(attribute, Monies.dump(value))
  elsif currency.is_a?(String)
    unless value.nil? || value.currency == currency
      raise Monies::CurrencyError, "can't serialize #{value.currency} to #{currency}"
    end

    @predicate_builder.build(attribute, @model.send(:"serialize_#{attribute.name}", value))
  elsif currency.is_a?(Symbol)
    Arel::Nodes::And.new([
      @predicate_builder.build(attribute, @model.send(:"serialize_#{attribute.name}", value)),
      @predicate_builder[currency, value.currency]
    ])
  end
end