has_price ========= Let's just say, it organizes your price breakdowns and allows for easy retrieval of price subgroups and subtotals, as well as simple serialization for your receipts. Install ------- Make sure [gemcutter.org](http://gemcutter.org) is in your sources.
sudo gem install has_priceIn rails environment:
config.gem "has_price"For any generic Ruby class:
require 'has_price' include HasPrice::HasPriceP.S. Usage as Rails plugin is supported too, but gem is preferred. Organize -------- Say you have a Product class with some attributes which price depends on. For this example assume that base_price, federal_tax, and state_tax are integer attributes existing on Product model.
class Product < ActiveRecord::Base
has_many :discounts
end
has_price provides a small DSL with two methods, `item` and `group`, to help you organize this.
class Product < ActiveRecord::Base
has_many :discounts
has_price do
item base_price, "base"
group "taxes" do
item federal_tax, "federal"
item state_tax, "state"
end
group "discounts" do
discounts.each do |discount|
item discount.amount, discount.title
end
end
end
end
What we've done just now is — built instance method `price` on products. Now you can use it as so.
# Hypothetically all these numbers are coming from the above declared instance methods.
product = Product.find(1)
product.price # => Price object
product.price.total # => 500
product.price.base # => 400
product.price.taxes # => Price object
product.price.taxes.federal # => 50
product.price.taxes.total # => 100
product.discounts.total # => -50
Serialize
---------
Price object actually inherits from a plain old Hash. Therefore, this will work:
class Receipt < ActiveRecord::Base
serialize :price, Hash
end
Now passing the whole price breakdown into receipt is as simple as `receipt.price = product.price`.