class Money::Bank::RussianCentralBank

Attributes

rates_expired_at[R]
rates_updated_at[R]
rates_updated_on[R]
ttl[R]

Public Instance Methods

add_rate(from, to, rate) click to toggle source
Calls superclass method
# File lib/money/bank/russian_central_bank.rb, line 22
def add_rate(from, to, rate)
  super(from, to, rate)
  super(to, from, 1.0 / rate)
end
flush_rates() click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 8
def flush_rates
  @store = Money::RatesStore::Memory.new
end
get_rate(from, to) click to toggle source
Calls superclass method
# File lib/money/bank/russian_central_bank.rb, line 27
def get_rate(from, to)
  update_rates if rates_expired?
  super || indirect_rate(from, to)
end
rates_expired?() click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 38
def rates_expired?
  rates_expired_at && rates_expired_at <= Time.now
end
ttl=(value) click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 32
def ttl=(value)
  @ttl = value
  update_expired_at
  @ttl
end
update_rates(date = Date.today) click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 12
def update_rates(date = Date.today)
  store.transaction do
    update_parsed_rates(exchange_rates(date))
    @rates_updated_at = Time.now
    @rates_updated_on = date
    update_expired_at
    store.send(:rates)
  end
end

Private Instance Methods

exchange_rates(date) click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 48
def exchange_rates(date)
  fetcher.perform(date)
end
fetcher() click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 44
def fetcher
  @fetcher ||= RussianCentralBankFetcher.new
end
indirect_rate(from, to) click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 60
def indirect_rate(from, to)
  get_rate('RUB', to) / get_rate('RUB', from)
end
local_currencies() click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 64
def local_currencies
  @local_currencies ||= Money::Currency.table.map { |currency| currency.last[:iso_code] }
end
update_expired_at() click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 52
def update_expired_at
  @rates_expired_at = if ttl
    @rates_updated_at ? @rates_updated_at + ttl : Time.now
  else
    nil
  end
end
update_parsed_rates(rates) click to toggle source
# File lib/money/bank/russian_central_bank.rb, line 68
def update_parsed_rates(rates)
  add_rate('RUB', 'RUB', 1)
  rates.each do |rate|
    begin
      if local_currencies.include?(rate[:code])
        add_rate(
          'RUB',
          rate[:code],
          1 / (rate[:value] / rate[:nominal])
        )
      end
    rescue Money::Currency::UnknownCurrency
    end
  end
end