Class: Mint::Currency

Inherits:
Data
  • Object
show all
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

Instance Method Summary collapse

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

#codeString (readonly)

ISO 4217 currency code (e.g., “USD”, “EUR”)

Returns:

  • (String)

    the current value of code



17
18
19
# File 'lib/minting/mint/currency.rb', line 17

def code
  @code
end

#countryString? (readonly)

Associated country code

Returns:

  • (String, nil)

    the current value of country



17
18
19
# File 'lib/minting/mint/currency.rb', line 17

def country
  @country
end

#fractional_multiplierInteger (readonly)

10^subunit, used for fractional conversions

Returns:

  • (Integer)

    the current value of fractional_multiplier



17
18
19
# File 'lib/minting/mint/currency.rb', line 17

def fractional_multiplier
  @fractional_multiplier
end

#nameString? (readonly)

Currency name

Returns:

  • (String, nil)

    the current value of name



17
18
19
# File 'lib/minting/mint/currency.rb', line 17

def name
  @name
end

#priorityInteger (readonly)

Parser precedence for symbol detection

Returns:

  • (Integer)

    the current value of priority



17
18
19
# File 'lib/minting/mint/currency.rb', line 17

def priority
  @priority
end

#subunitInteger (readonly)

Number of decimal places (0 for JPY, 2 for USD, 3 for IQD)

Returns:

  • (Integer)

    the current value of subunit



17
18
19
# File 'lib/minting/mint/currency.rb', line 17

def subunit
  @subunit
end

#symbolString (readonly)

Display symbol (e.g., “$”, “€”, “R$”)

Returns:

  • (String)

    the current value of symbol



17
18
19
# File 'lib/minting/mint/currency.rb', line 17

def symbol
  @symbol
end

Instance Method Details

#inspectObject



27
# File 'lib/minting/mint/currency.rb', line 27

def inspect = "<Currency:(#{code} #{symbol} #{subunit} #{name})>"

#minimum_amountObject



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

  1. Converts to Rational

  2. Rounds to respect currency subunit



34
# File 'lib/minting/mint/currency.rb', line 34

def normalize_amount(amount) = amount.to_r.round(subunit)