Module: PriceLog::ClassMethods

Defined in:
lib/price_log.rb

Instance Method Summary collapse

Instance Method Details

#has_price_log(name, options = {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/price_log.rb', line 20

def has_price_log(name, options = {})
  configuration = {
    name: name,
    dependent: :destroy
  }
  configuration.update(options) if options.is_a?(Hash)

  _field_name_ = configuration[:name]
  _relation_name_ = "all_#{_field_name_}_price_logs".to_sym


  has_many _relation_name_, -> (object){ where("priceable_field_name = ?", _field_name_.to_sym)},  {as: :priceable, dependent: :destroy, class_name: "PriceLogEntry", validate:false}

  class_eval %{
    def #{_field_name_}(date=nil)
      self.#{_relation_name_}.for_date(self.class.name, self.id, '#{_field_name_}', date).first
    end

    def #{_field_name_}=(amount)
      ple = PriceLogEntry.new(priceable: self, price: amount, start_date: DateTime.now, priceable_field_name: '#{_field_name_}')
      self.#{_relation_name_} << ple
    end

    def #{_field_name_}_dump
      self.#{_relation_name_}.each(&:pretty_print)
    end
  }

end