Class: Money::Currency

Inherits:
Object
  • Object
show all
Defined in:
lib/money/currency.rb,
lib/money/currency/loader.rb

Defined Under Namespace

Modules: Loader Classes: UnknownCurrency

Constant Summary collapse

@@mutex =
Mutex.new
@@loaded_currencies =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(currency_iso) ⇒ Currency

Returns a new instance of Currency.

Raises:



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/money/currency.rb', line 32

def initialize(currency_iso)
  data = self.class.currencies[currency_iso]
  raise UnknownCurrency, "Invalid iso4217 currency '#{currency_iso}'" unless data
  @symbol                = data['symbol']
  @disambiguate_symbol   = data['disambiguate_symbol'] || data['symbol']
  @subunit_symbol        = data['subunit_symbol']
  @iso_code              = data['iso_code']
  @iso_numeric           = data['iso_numeric']
  @name                  = data['name']
  @smallest_denomination = data['smallest_denomination']
  @subunit_to_unit       = data['subunit_to_unit']
  @decimal_mark          = data['decimal_mark']
  @minor_units           = subunit_to_unit == 0 ? 0 : Math.log(subunit_to_unit, 10).round.to_i
  freeze
end

Instance Attribute Details

#decimal_markObject (readonly)

Returns the value of attribute decimal_mark.



29
30
31
# File 'lib/money/currency.rb', line 29

def decimal_mark
  @decimal_mark
end

#disambiguate_symbolObject (readonly)

Returns the value of attribute disambiguate_symbol.



29
30
31
# File 'lib/money/currency.rb', line 29

def disambiguate_symbol
  @disambiguate_symbol
end

#iso_codeObject (readonly) Also known as: to_s

Returns the value of attribute iso_code.



29
30
31
# File 'lib/money/currency.rb', line 29

def iso_code
  @iso_code
end

#iso_numericObject (readonly)

Returns the value of attribute iso_numeric.



29
30
31
# File 'lib/money/currency.rb', line 29

def iso_numeric
  @iso_numeric
end

#minor_unitsObject (readonly)

Returns the value of attribute minor_units.



29
30
31
# File 'lib/money/currency.rb', line 29

def minor_units
  @minor_units
end

#nameObject (readonly)

Returns the value of attribute name.



29
30
31
# File 'lib/money/currency.rb', line 29

def name
  @name
end

#smallest_denominationObject (readonly)

Returns the value of attribute smallest_denomination.



29
30
31
# File 'lib/money/currency.rb', line 29

def smallest_denomination
  @smallest_denomination
end

#subunit_symbolObject (readonly)

Returns the value of attribute subunit_symbol.



29
30
31
# File 'lib/money/currency.rb', line 29

def subunit_symbol
  @subunit_symbol
end

#subunit_to_unitObject (readonly)

Returns the value of attribute subunit_to_unit.



29
30
31
# File 'lib/money/currency.rb', line 29

def subunit_to_unit
  @subunit_to_unit
end

#symbolObject (readonly)

Returns the value of attribute symbol.



29
30
31
# File 'lib/money/currency.rb', line 29

def symbol
  @symbol
end

Class Method Details

.currenciesObject



24
25
26
# File 'lib/money/currency.rb', line 24

def currencies
  @@currencies ||= Loader.load_currencies
end

.find(currency_iso) ⇒ Object



18
19
20
21
22
# File 'lib/money/currency.rb', line 18

def find(currency_iso)
  new(currency_iso)
rescue UnknownCurrency
  nil
end

.new(currency_iso) ⇒ Object Also known as: find!

Raises:



11
12
13
14
15
# File 'lib/money/currency.rb', line 11

def new(currency_iso)
  raise UnknownCurrency, "Currency can't be blank" if currency_iso.nil? || currency_iso.to_s.empty?
  iso = currency_iso.to_s.downcase
  @@loaded_currencies[iso] || @@mutex.synchronize { @@loaded_currencies[iso] = super(iso) }
end

Instance Method Details

#compatible?(other) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/money/currency.rb', line 52

def compatible?(other)
  other.is_a?(NullCurrency) || eql?(other)
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


48
49
50
# File 'lib/money/currency.rb', line 48

def eql?(other)
  self.class == other.class && iso_code == other.iso_code
end