Module: ConcernsOnRails::Models::Monetizable

Extended by:
ActiveSupport::Concern
Defined in:
lib/concerns_on_rails/models/monetizable.rb

Overview

Money handling for an integer "subunit" column (e.g. cents) — exact, float-free, via BigDecimal.

Declaring monetizable :price_cents adds three methods derived from the column name (the _cents suffix is stripped):

* `price`            — the amount as a BigDecimal (cents / 100)
* `price=`           — assign in major units; rounded to whole cents
* `formatted_price`  — a display string ("$1,234.56")

class Product < ApplicationRecord
include ConcernsOnRails::Models::Monetizable

monetizable :price_cents                       # => price / price= / formatted_price
monetizable :shipping_cents, as: :shipping
monetizable :total_cents, unit: "€", separator: ",", delimiter: "."
end

product.price = 19.99   # stores price_cents = 1999
product.price           # => 0.1999e2  (BigDecimal 19.99)
product.formatted_price # => "$19.99"

Options: as: (explicit method name — required when the column does not end in _cents), unit: ("$"), precision: (2), delimiter: (","), separator: ("."), subunit_to_unit: (100).