Class: Xrate::ExchangeRate
- Inherits:
-
Object
- Object
- Xrate::ExchangeRate
- Defined in:
- lib/xrate/exchange_rate.rb
Class Method Summary collapse
- .at(date, from_currency, target_currency) ⇒ Object
- .calculate_rate(date_range, from_currency, target_currency) ⇒ Object
- .fallback_days ⇒ Object
- .get_latest(date_range, from_currency, target_currency) ⇒ Object
Class Method Details
.at(date, from_currency, target_currency) ⇒ Object
7 8 9 10 11 |
# File 'lib/xrate/exchange_rate.rb', line 7 def self.at(date, from_currency, target_currency) date_range = (date - fallback_days)..date get_latest(date_range, from_currency, target_currency) or raise Xrate::UnconvertableCurrencyException end |
.calculate_rate(date_range, from_currency, target_currency) ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/xrate/exchange_rate.rb', line 21 def self.calculate_rate(date_range, from_currency, target_currency) begin base_to_from = Xrate::Rate.where(date: date_range, currency: from_currency).first&.rate base_to_target = Xrate::Rate.where(date: date_range, currency: target_currency).first&.rate base_to_target / base_to_from rescue NoMethodError # handle divide by zero nil end end |
.fallback_days ⇒ Object
32 33 34 |
# File 'lib/xrate/exchange_rate.rb', line 32 def self.fallback_days ENV.fetch("XRATE_FALLBACK_DAYS").to_i end |
.get_latest(date_range, from_currency, target_currency) ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/xrate/exchange_rate.rb', line 13 def self.get_latest(date_range, from_currency, target_currency) if from_currency == ENV.fetch("XRATE_BASE_CURRENCY") Xrate::Rate.where(date: date_range, currency: target_currency).first&.rate else calculate_rate(date_range, from_currency, target_currency) end end |