Class: Mint::Currency
- Inherits:
-
Data
- Object
- Data
- Mint::Currency
- Defined in:
- lib/minting/mint/currency.rb
Overview
Represents a specific currency unit, identified by ISO 4217 alphabetic code. Currency objects are immutable and define the properties of a monetary unit including its subunit precision, display symbol, and formatting rules.
Instance Attribute Summary collapse
-
#code ⇒ String
readonly
ISO 4217 currency code (e.g., “USD”, “EUR”).
-
#country ⇒ String?
readonly
Associated country code.
-
#fractional_multiplier ⇒ Integer
readonly
10^subunit, used for fractional conversions.
-
#name ⇒ String?
readonly
Currency name.
-
#priority ⇒ Integer
readonly
Parser precedence for symbol detection.
-
#subunit ⇒ Integer
readonly
Number of decimal places (0 for JPY, 2 for USD, 3 for IQD).
-
#symbol ⇒ String
readonly
Display symbol (e.g., “$”, “€”, “R$”).
Instance Method Summary collapse
-
#initialize(code:, symbol:, subunit: 0, priority: 0, country: nil, name: nil) ⇒ Currency
constructor
A new instance of Currency.
- #inspect ⇒ Object
- #minimum_amount ⇒ Object
-
#normalize_amount(amount) ⇒ Object
Normalizes numeric amounts for this currency 1.
Constructor Details
#initialize(code:, symbol:, subunit: 0, priority: 0, country: nil, name: nil) ⇒ Currency
Returns a new instance of Currency.
19 20 21 22 23 24 25 |
# File 'lib/minting/mint/currency.rb', line 19 def initialize(code:, symbol:, subunit: 0, priority: 0, country: nil, name: nil) subunit = subunit.to_i priority = priority.to_i fractional_multiplier = 10**subunit super(code:, subunit:, symbol:, priority:, country:, name:, fractional_multiplier:) end |
Instance Attribute Details
#code ⇒ String (readonly)
ISO 4217 currency code (e.g., “USD”, “EUR”)
17 18 19 |
# File 'lib/minting/mint/currency.rb', line 17 def code @code end |
#country ⇒ String? (readonly)
Associated country code
17 18 19 |
# File 'lib/minting/mint/currency.rb', line 17 def country @country end |
#fractional_multiplier ⇒ Integer (readonly)
10^subunit, used for fractional conversions
17 18 19 |
# File 'lib/minting/mint/currency.rb', line 17 def fractional_multiplier @fractional_multiplier end |
#name ⇒ String? (readonly)
Currency name
17 18 19 |
# File 'lib/minting/mint/currency.rb', line 17 def name @name end |
#priority ⇒ Integer (readonly)
Parser precedence for symbol detection
17 18 19 |
# File 'lib/minting/mint/currency.rb', line 17 def priority @priority end |
#subunit ⇒ Integer (readonly)
Number of decimal places (0 for JPY, 2 for USD, 3 for IQD)
17 18 19 |
# File 'lib/minting/mint/currency.rb', line 17 def subunit @subunit end |
#symbol ⇒ String (readonly)
Display symbol (e.g., “$”, “€”, “R$”)
17 18 19 |
# File 'lib/minting/mint/currency.rb', line 17 def symbol @symbol end |
Instance Method Details
#inspect ⇒ Object
27 |
# File 'lib/minting/mint/currency.rb', line 27 def inspect = "<Currency:(#{code} #{symbol} #{subunit} #{name})>" |
#minimum_amount ⇒ Object
29 |
# File 'lib/minting/mint/currency.rb', line 29 def minimum_amount = Rational(1, fractional_multiplier) |
#normalize_amount(amount) ⇒ Object
Normalizes numeric amounts for this currency
-
Converts to Rational
-
Rounds to respect currency subunit
34 |
# File 'lib/minting/mint/currency.rb', line 34 def normalize_amount(amount) = amount.to_r.round(subunit) |