Class: Straight::ExchangeRate::AverageRateAdapter

Inherits:
Adapter
  • Object
show all
Defined in:
lib/straight/exchange_rate_adapters/average_rate_adapter.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Adapter

#convert_from_currency, #convert_to_currency, #initialize

Constructor Details

This class inherits a constructor from Straight::ExchangeRate::Adapter

Class Method Details

.instance(*adapters) ⇒ Object

Takes exchange rate adapters instances or classes as arguments



7
8
9
10
11
# File 'lib/straight/exchange_rate_adapters/average_rate_adapter.rb', line 7

def self.instance(*adapters)
  instance = super()
  instance.instance_variable_set(:@adapters, adapters.map { |adapter| adapter.respond_to?(:instance) ? adapter.instance : adapter })
  instance
end

Instance Method Details

#fetch_rates!Object



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/straight/exchange_rate_adapters/average_rate_adapter.rb', line 13

def fetch_rates!
  failed_fetches = 0
  @adapters.each do |adapter|
    begin
      adapter.fetch_rates!
    rescue => e
      failed_fetches += 1
      raise e if failed_fetches == @adapters.size
    end
  end
end

#get_rate_value_from_hash(rates_hash, *keys) ⇒ Object



43
44
45
# File 'lib/straight/exchange_rate_adapters/average_rate_adapter.rb', line 43

def get_rate_value_from_hash(rates_hash, *keys)
  raise "This method is not supposed to be used in #{self.class}."
end

#rate_for(currency_code) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/straight/exchange_rate_adapters/average_rate_adapter.rb', line 25

def rate_for(currency_code)
  rates = []
  @adapters.each do |adapter| 
    begin
      rates << adapter.rate_for(currency_code)
    rescue CurrencyNotSupported
      rates << nil
    end
  end

  unless rates.select(&:nil?).size == @adapters.size 
    rates.compact!
    rates.inject {|sum, rate| sum + rate} / rates.size
  else
    raise CurrencyNotSupported
  end
end

#rate_to_f(rate) ⇒ Object



47
48
49
# File 'lib/straight/exchange_rate_adapters/average_rate_adapter.rb', line 47

def rate_to_f(rate)
  raise "This method is not supposed to be used in #{self.class}."
end