Class: Money::Bank::FixerCurrency
- Inherits:
-
VariableExchange
- Object
- VariableExchange
- Money::Bank::FixerCurrency
- Defined in:
- lib/money/bank/fixer_currency.rb
Overview
VariableExchange bank that handles fetching exchange rates from fixer.io and storing them in the in memory rates store.
Constant Summary collapse
- SERVICE_HOST =
'data.fixer.io'.freeze
- SERVICE_PATH =
'/api/latest'.freeze
Class Attribute Summary collapse
-
.rates_expiration ⇒ Time
readonly
Returns the time when the rates expire.
-
.ttl_in_seconds ⇒ Integer
Returns the Time To Live (TTL) in seconds.
Instance Attribute Summary collapse
-
#access_key ⇒ String
Access key from fixer.io allowing access to API.
-
#rates ⇒ Hash
readonly
Stores the currently known rates.
Class Method Summary collapse
-
.refresh_rates_expiration! ⇒ Time
Set the rates expiration TTL seconds from the current time.
Instance Method Summary collapse
-
#expire_rates ⇒ Boolean
Flushes all the rates if they are expired.
-
#flush_rate(from, to) ⇒ Float
Clears the specified rate stored in @rates.
-
#flush_rates ⇒ Hash
Clears all rates stored in @rates.
-
#get_rate(from, to) ⇒ Float
Returns the requested rate.
-
#initialize(access_key) ⇒ FixerCurrency
constructor
A new instance of FixerCurrency.
Constructor Details
#initialize(access_key) ⇒ FixerCurrency
Returns a new instance of FixerCurrency.
49 50 51 52 53 |
# File 'lib/money/bank/fixer_currency.rb', line 49 def initialize(access_key) super() @store.extend Money::RatesStore::RateRemovalSupport @access_key = access_key end |
Class Attribute Details
.rates_expiration ⇒ Time (readonly)
Returns the time when the rates expire.
29 30 31 |
# File 'lib/money/bank/fixer_currency.rb', line 29 def rates_expiration @rates_expiration end |
.ttl_in_seconds ⇒ Integer
Returns the Time To Live (TTL) in seconds.
26 27 28 |
# File 'lib/money/bank/fixer_currency.rb', line 26 def ttl_in_seconds @ttl_in_seconds end |
Instance Attribute Details
#access_key ⇒ String
Returns Access key from fixer.io allowing access to API.
22 23 24 |
# File 'lib/money/bank/fixer_currency.rb', line 22 def access_key @access_key end |
#rates ⇒ Hash (readonly)
Returns Stores the currently known rates.
19 20 21 |
# File 'lib/money/bank/fixer_currency.rb', line 19 def rates @rates end |
Class Method Details
.refresh_rates_expiration! ⇒ Time
Set the rates expiration TTL seconds from the current time.
44 45 46 |
# File 'lib/money/bank/fixer_currency.rb', line 44 def refresh_rates_expiration! @rates_expiration = Time.now + ttl_in_seconds end |
Instance Method Details
#expire_rates ⇒ Boolean
Flushes all the rates if they are expired.
115 116 117 118 119 120 121 122 123 |
# File 'lib/money/bank/fixer_currency.rb', line 115 def expire_rates if self.class.ttl_in_seconds && self.class.rates_expiration <= Time.now flush_rates self.class.refresh_rates_expiration! true else false end end |
#flush_rate(from, to) ⇒ Float
Clears the specified rate stored in @rates.
82 83 84 |
# File 'lib/money/bank/fixer_currency.rb', line 82 def flush_rate(from, to) store.remove_rate(from, to) end |
#flush_rates ⇒ Hash
Clears all rates stored in @rates
64 65 66 |
# File 'lib/money/bank/fixer_currency.rb', line 64 def flush_rates store.clear_rates end |
#get_rate(from, to) ⇒ Float
Returns the requested rate.
It also flushes all the rates when and if they are expired.
99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/money/bank/fixer_currency.rb', line 99 def get_rate(from, to) expire_rates fetch_rates if !store.get_rate(from, :EUR) || !store.get_rate(to, :EUR) begin return store.get_rate(from, :EUR) / store.get_rate(to, :EUR) rescue raise UnknownRate end end |