Module: ActiveRecord::DollarColumn::ClassMethods

Defined in:
lib/active_record/dollar_column.rb

Instance Method Summary collapse

Instance Method Details

#dollar_column(*attr_names) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/active_record/dollar_column.rb', line 10

def dollar_column(*attr_names)
  if attr_names.size == 1 && attr_names[0].is_a?(Symbol)
    generate_dollar_methods(attr_names[0])
  elsif attr_names.flatten != attr_names
    dollar_column(*attr_names.flatten)
  else
    attr_names.each do |attr_each|
      generate_dollar_methods(attr_each.to_s)
    end
  end
end

#generate_dollar_methods(attr_name) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/active_record/dollar_column.rb', line 22

def generate_dollar_methods(attr_name)
  define_method(attr_name) do
    (BigDecimal.new(send("#{attr_name}_in_cents").to_s) / 100).to_f
  end
  
  define_method("decimal_#{attr_name}") do
    BigDecimal.new(send("#{attr_name}_in_cents").to_s) / 100
  end
  
  define_method("formatted_#{attr_name}") do
    sprintf "$%.2f", send(attr_name)
  end
  
  define_method("#{attr_name}=") do |value|
    write_attribute("#{attr_name}_in_cents", (BigDecimal.new(value.to_s) * 100).to_f)
  end
end