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
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/price_log.rb', line 22
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}
_current_value_field_name_ = options[:current_value_field_name] || UNDEFINED_CURRENT_VALUE_FIELD_NAME
class_eval %{
def #{_field_name_}(date=nil)
#{ (_current_value_field_name_ != UNDEFINED_CURRENT_VALUE_FIELD_NAME) ? "return self.#{_current_value_field_name_} if self.respond_to?('#{_current_value_field_name_}') && date.nil? " : '' }
pl = self.#{_field_name_}_log(date)
pl.price unless pl.nil?
end
def #{_field_name_}_log(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_}')
#{ (_current_value_field_name_ != UNDEFINED_CURRENT_VALUE_FIELD_NAME) ? "self.#{_current_value_field_name_} = amount if self.respond_to?('#{_current_value_field_name_}')" : ''}
self.#{_relation_name_} << ple
end
def #{_field_name_}_dump
self.#{_relation_name_}.each(&:pretty_print)
end
}
end
|