class Money::RatesStore::Memory

store.each_rate {|iso_from, iso_to, rate| puts “#{from} -> #{to}: #{rate}” }
# iterates rates
store.get_rate ‘USD’, ‘CAD’ # => 0.98
store.add_rate ‘USD’, ‘CAD’, 0.98
store = Money::RatesStore::Memory.new
@example
Used by instances of Money::Bank::VariableExchange.
Class for thread-safe storage of exchange rate pairs.

def add_rate(currency_iso_from, currency_iso_to, rate)

Returns:
  • (Numeric) -

Parameters:
  • rate (Numeric) -- Rate to use when exchanging currencies.
  • currency_iso_to (String) -- Currency to exchange to.
  • currency_iso_from (String) -- Currency to exchange from.
def add_rate(currency_iso_from, currency_iso_to, rate)
  guard.synchronize do
    rates[rate_key_for(currency_iso_from, currency_iso_to)] = rate
  end
end

def each_rate(&block)

Returns:
  • (Enumerator) -

Other tags:
    Yieldparam: rate - Exchange rate.
    Yieldparam: iso_to - Currency ISO string.
    Yieldparam: iso_from - Currency ISO string.
def each_rate(&block)
  return to_enum(:each_rate) unless block_given?
  guard.synchronize do
    rates.each do |key, rate|
      iso_from, iso_to = key.split(INDEX_KEY_SEPARATOR)
      yield iso_from, iso_to, rate
    end
  end
end

def get_rate(currency_iso_from, currency_iso_to)

Returns:
  • (Numeric) -

Parameters:
  • currency_iso_to (String) -- Currency to exchange to.
  • currency_iso_from (String) -- Currency to exchange from.
def get_rate(currency_iso_from, currency_iso_to)
  guard.synchronize do
    rates[rate_key_for(currency_iso_from, currency_iso_to)]
  end
end

def initialize(opts = {}, rates = {})

Parameters:
  • rates (Hash) -- Optional initial exchange rate data.
  • opts (Hash) -- Optional store options.

Options Hash: (**opts)
  • :without_mutex (Boolean) -- disables the usage of a mutex
def initialize(opts = {}, rates = {})
  @rates = rates
  @options = opts
  @guard = Monitor.new
end

def marshal_dump

def marshal_dump
  guard.synchronize do
    return [self.class, options, rates.dup]
  end
end

def rate_key_for(currency_iso_from, currency_iso_to)

Returns:
  • (String) -

Parameters:
  • currency_iso_to (String) -- The currency to exchange to.
  • currency_iso_from (String) -- The currency to exchange from.
def rate_key_for(currency_iso_from, currency_iso_to)
  [currency_iso_from, currency_iso_to].join(INDEX_KEY_SEPARATOR).upcase
end

def transaction(&block)

Wraps block execution in a thread-safe transaction
def transaction(&block)
  guard.synchronize do
    yield
  end
end