module PriceLog::ClassMethods
Constants
- UNDEFINED_CURRENT_VALUE_FIELD_NAME
Public Instance Methods
has_price_log(name, options = {})
click to toggle source
# 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