Project

minting

0.0
The project is in a healthy, maintained state
Library to manipulate currency values
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

Minting

Yet another Ruby library for dealing with money and currency.

Work in progress, please wait release 1.0.0

Installation

Option 1: Via bundler command

bundle add minting
bundle install

Option 2: add the line below to your application's Gemfile:

gem 'minting'

or, if you want latest development version from Github

gem 'minting', git: 'https://github.com/gferraz/minting.git'

and execute:

bundle install

Option3: Install it yourself with:

gem install minting

Usage

require 'minting'

# 10.00 USD
ten_dollars = Mint.money(10, 'USD') #=> [USD 10.00]
ten_dollars.to_i            #=> 10
ten_dollars.currency_code   #=> "USD"

# Comparisons
ten_dollars = Mint.money(10, 'USD')

ten_dollars == Mint.money(10, 'USD') #=> true
ten_dollars == Mint.money(11, 'USD') #=> false
ten_dollars == Mint.money(10, 'EUR') #=> false

ten_dollars.eql? Mint.money(10, 'USD')         #=> true
ten_dollars.hash == Mint.money(10, 'USD').hash #=> true

# Format (uses Kernel.format internally)
price = Mint.money(9.99, 'USD')

price.to_s                                  #=> "$9.99",
price.to_s(format: '%<amount>d')            #=> "9",
price.to_s(format: '%<symbol>s%<amount>f')  #=> "$9.99",
price.to_s(format: '%<symbol>s%<amount>+f') #=> "$+9.99",
(-price).to_s(format: '%<amount>f')         #=> "-9.99",

# Format with padding
price_in_euros = euro.money(12.34, 'EUR')

price.to_s(format: '--%<amount>7d')               #=> "--      9"
price.to_s(format: '  %<amount>10f %<currency>s') #=> "        9.99 USD"
(-price).to_s(format: '  %<amount>10f')           #=> "       -9.99"

price_in_euros.to_s(format: '%<symbol>2s%<amount>+10f')    #=> " €    +12.34"

# Json serialization

price.to_json # "{"currency": "USD", "amount": "9.99"}

# Allocation and split

ten_dollars.split(3) #=> [[USD 3.34], [USD 3.33], [USD 3.33]]
ten_dollars.split(7) #=> [[USD 1.42], [USD 1.43], [USD 1.43], [USD 1.43], [USD 1.43], [USD 1.43], [USD 1.43]]

ten_dollars.allocate([1, 2, 3]) #=> [[USD 1.67], [USD 3.33], [USD 5.00]]

# Numeric refinements
uning Mint

1.dollar == Mint.money(1, 'USD') #=> true
3.euros == Mint.money(2, 'EUR')  #=> true
4.mint('USD') == 4.dollars #=> true
4.to_money('USD') == 4.dollars #=> true

Release 1.0 Plan

  • Localization: I18n
  • Arithmetics: div, mod
  • Mint.parse

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/gferraz/minting.