Intuitive extensions and utilities to handle money in multiple currencies for Ruby on Rails
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
tasks
.gitignore
MIT-LICENSE
README.textile
init.rb

README.textile

cash_handler

cash_handler aims to be an intuitive (and useful) set of extensions and utilities to assist in handling money across different currencies for Ruby on Rails.

Requirements and Installation

  • Install the hpricot gem (gem install hpricot)
  • Install the cash_handler plugin (script/plugin install git://github.com/JamesBrooks/cash_handler.git)

Usage


  c = CashHandler::Base.new
  
  # Get the current exchange rate of the AUD against the USD (currency code strings are case in-sensitive, can also be symbols)
  c.get('AUD')
  => 0.619099
  
  # Get the current exchange rate of the AUD against the GBP
  c.get('AUD', :against => 'GBP')
  => 0.418621272567449
  
  # Convert
  c.convert(10, :aud, :usd)
  => 6.19099
  
  # Force the converstion rates cache to reload currencies
  c.cache.expire
  
  # The CashHandler::Cache has a default cache life of one day, this can be overridden in one of two ways
  # Upon creation
  c = CashHandler::Base.new(:ttl => 30.minutes)
  
  # During operation
  c.cache.ttl = 30.minutes

Backup rates in case themoneyconverter.com is inaccessible

You may configure cash_handler to create a backup file every time it pulls rates from themoneyconverter.com. In the event that themoneyconverter.com is inaccessible, the rates stored in the backup file will be used.


  # Configure cash_handler to persist rates to our app's log directory
  c = CashHandler::Base.new(:backup_rates_file_location => "#{RAILS_ROOT}/tmp/rates.yml")

When working in a development or test environment with cache classes disabled, you may not want to fetch new rates with each request.


  # Will only force cache expiration on initialization CashHandler::Cache.new(:force_expire => true) in a production environment.
  c = CashHandler::Base.new(:force_expire => Rails.env.production?)

Copyright and License

Copyright © 2008 James Brooks, released under the MIT license