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).