Rails plugin which simplifies adding money and currency attributes to
ActiveRecord models. Uses money gem by RubyMoney.
Install the plugin:
script/plugin install git://github.com/kammerer/has_money.git
class Foo < ActiveRecord::Base
has_currency :currency
validates_currency :currency, :in => ["EUR", "PLN"]
end
foo = Foo.new
foo.currency = "EUR"
foo.currency # -> Money::Currency.new("EUR")
foo.currency = Money::Currency.new("PLN")
foo.currency # -> Money::Currency.new("PLN")
Uses single database column called currency
(string).
class Bar < ActiveRecord::Base
has_money :price
validates_money :price, :greater_than => 0, :currency => { :in => ["EUR", "PLN"] }
end
bar = Bar.new
bar.price_currency = "EUR"
bar.price = 5
bar.price # -> Money.new(500, "EUR")
bar.price = Money.new(1000, "PLN")
bar.price # -> Money.new(2.5, "EUR")
bar.price_currency = "PLN"
bar.price # -> Money.new(1000, "PLN") assuming 1 EUR == 4 PLN
Uses two database columns:
price
(integer)price_currency
(string)
Money validation options:
:greater_than
:greater_than_or_equal
:less_than
:less_than_or_equal
:between
All options except :between
expects amount of money in main units (i.e. euros or dollars, not cents) as a value. :between
expects
a range.
class Baz
has_currency :currency, :for => [:min_price, :max_price]
has_money :min_price, :with_currency => :currency
has_money :max_price, :with_currency => :currency
end
Uses three database columns:
min_price
(integer)max_price
(integer)currency
(string)
- tests for ActiveRecord style validations