Class Money::RatesStore::Memory
In: lib/money/rates_store/memory.rb
Parent: Object

Class for thread-safe storage of exchange rate pairs. Used by instances of +Money::Bank::VariableExchange+.

@example

  store = Money::RatesStore::Memory.new
  store.add_rate 'USD', 'CAD', 0.98
  store.get_rate 'USD', 'CAD' # => 0.98
  # iterates rates
  store.each_rate {|iso_from, iso_to, rate| puts "#{from} -> #{to}: #{rate}" }

Methods

Constants

INDEX_KEY_SEPARATOR = '_TO_'.freeze

Attributes

index  [R] 
options  [R] 

Public Class methods

Initializes a new +Money::RatesStore::Memory+ object.

@param [Hash] opts Optional store options. @option opts [Boolean] :without_mutex disables the usage of a mutex @param [Hash] rt Optional initial exchange rate data.

Public Instance methods

Registers a conversion rate and returns it. Uses Mutex to synchronize data access.

@param [String] currency_iso_from Currency to exchange from. @param [String] currency_iso_to Currency to exchange to. @param [Numeric] rate Rate to use when exchanging currencies.

@return [Numeric]

@example

  store = Money::RatesStore::Memory.new
  store.add_rate("USD", "CAD", 1.24515)
  store.add_rate("CAD", "USD", 0.803115)

Iterate over rate tuples (iso_from, iso_to, rate)

@yieldparam iso_from [String] Currency ISO string. @yieldparam iso_to [String] Currency ISO string. @yieldparam rate [Numeric] Exchange rate.

@return [Enumerator]

@example

  store.each_rate do |iso_from, iso_to, rate|
    puts [iso_from, iso_to, rate].join
  end

Retrieve the rate for the given currencies. Uses Mutex to synchronize data access. Delegates to +Money::RatesStore::Memory+

@param [String] currency_iso_from Currency to exchange from. @param [String] currency_iso_to Currency to exchange to.

@return [Numeric]

@example

  store = Money::RatesStore::Memory.new
  store.add_rate("USD", "CAD", 1.24515)

  store.get_rate("USD", "CAD") #=> 1.24515

Wraps block execution in a thread-safe transaction

[Validate]