Skip to content

far-rel/acts_as_priceable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ActsAsPriceable

This gem is extension for ActiveRecord which provides mechanism for handling prices.

Installation

Add this line to your application's Gemfile:

gem 'acts_as_priceable'

And then execute:

$ bundle

Or install it yourself as:

$ gem install acts_as_priceable

Migrations

You can add all columns which are needed by this gem using provided migrations

  def change
    create_table :products do |t|
      t.price :price
      # This creates 3 column
      # t.integer :price_gross
      # t.integer :price_net
      # t.integer :price_tax
    end
  end
  def change
    add_price :products, :price
  end
  def change
    remove_price :products, :price
  end

Usage

Basics

class Product < ActiveRecord::Base
  has_price :price
end

This provides accessors which wraps created database columns. price_gross and price_net converts integer columns into BigDecimal with some scale (default scale is 2). Ex. if price_gross in database is 1000, accessor will return 10.00 as BigDecimal.

price_tax is percentage VAT tax added to net price. price_tax_value is value of tax.

Instead of setting price_net and price_gross separately you can use price and price_mode accessors.

p = Product.new
p.price_tax = 20
p.price = '10.00'
p.price_mode = 'net'
p.save
p.price_net # 10.00
p.price_gross # 12.00

Recalculating price takes place in before_validation. You can recalculate it manually by calling update_price method.

NOTE: price_net, price_gross, etc. are made from has_price method first argument. You can have different name for price accessor or even two or more prices

class Product < ActiveRecord::Base
  has_price :price
  has_price :promotion
end

This defines price_net etc. as well as promotion_net ...

Validations

On default price_tax, price_net and price_gross can't be lower than 0. You can turn off validation by setting without_validation parameter to true in options.

Configuration

class Product < ActiveRecord::Base
  has_price :price, scale: 4,
                    without_validation: true
end

From version 0.2.1 you can use serialized fields to store your price information. Gem supports serialization to Hash and Hstore

class Product
  serialize :data, Hash

  has_price :price, serialized: :data

end

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages