Class: Straight::ExchangeRate::AverageRateAdapter
- Inherits:
-
Adapter
- Object
- Adapter
- Straight::ExchangeRate::AverageRateAdapter
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
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
|