forked from RubyMoney/money
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
printercu edited this page Dec 27, 2016
·
3 revisions
money2 is the successor of money. Main purpose of this fork is to simplify entire codebase and remove legacy.
There is PR in money gem, but it's awaiting for the review for too long.
I'm going to release it as money2 gem, so it'll be available on rubygems,
and more developers can give it a try.
Just change gem 'money' -> gem 'money2' in your Gemfile.
Three main points:
- It uses BigDecimal to store amounts.
More intuitive
Money.new(1.23, :usd)orMoney.new('1.23', :usd)instead ofMoney.new(123, :usd)orMoney.from_amount(1.23, :usd). This also allowed to remove a lot of conversion stuff all over the code. - Formatting stuff is moved to
Formatterobject, which is improved a lot. This allows to implement and plug-in custom formatters. For example,#to_sis implemented with separate formatter. - Simplified arithmetics. No more implicit conversions with edge-cases:
use
#to_dto compare with numbers, and put numbers as a second argument for arithmetic operations. This allows to remove all the checks for edge-cases (like division number by money, comparison with zeroes, etc).
Of course, it brings backward incompatibility. Here are compatibility modules which I used while migrating gem's code base. If you have good test coverage, just enable them all, and disable one by one.
All changes:
- Moved
lib/money/money/* -> lib/money. - Formatting specific methods moved to Formatter.
-
default_formatting_rules&use_i18nmoved to Formatter. -
Formatter.default_rules=doesn't support nil (hash must be given).
-
- Remove
#currency_as_string. Changelog says it's for rails, but there is no such calls in rails's master. - Lambda passed to
.default_currencymust return currency object (not symbol). - Rename
Currency#iso_code -> #code - Set
Currency#codesame as id (YEN to get JPY, and GHC for GHS will not be supported) - Improved and cleaned up default formatter (2x faster) &
#to_s.- changed empty
Currency.html_entityto nil - renamed options, dropped fallbacks:
south_asian_number_formatting => south_asiantranslate => translate_symbolthousands_separator => delimiterdecimal_mark => separatorsymbol_after_without_space, symbol_before_without_space => symbol_space
- changed empty
- Simplify arithmetics (encourage using to_d).
- Use whole amounts (not cents) as main value.
- Rounding block to
Bank#exchange_withreceives decimal amount and currency so it must be changed to->(value, currency) { value.round(currency.decimal_places) }.
- Rounding block to
- Don't depend on
sixarm_ruby_unaccent. Add it to your Gemfile if you useCurrency.analyze. -
Currency.keep_onlyto cleanup currencies.