6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/dolla_dolla_bill.rb', line 6
def money(name, options = {})
cents_field_reader = options[:cents] || :"#{name}_in_cents"
currency_field_reader = options[:currency] || :"#{name}_currency"
cents_field_writer = :"#{cents_field_reader}="
currency_field_writer = :"#{currency_field_reader}="
define_method(name) do
return nil if send(cents_field_reader).nil? || send(currency_field_reader).nil?
::Money.new(send(cents_field_reader), send(currency_field_reader))
end
define_method("#{name}=") do |value|
if value.nil?
cents_value = nil
currency_value = nil
else
value = value.to_money
cents_value = value.cents
currency_value = value.currency_as_string
end
send(cents_field_writer, cents_value)
send(currency_field_writer, currency_value)
end
self.class.send(:define_method, "lowest_#{name}") do
lowest = select("#{cents_field_reader}, #{currency_field_reader}").
order("#{cents_field_reader} ASC").
first
lowest.nil? ? nil : lowest.price
end
end
|