forked from atwam/money-historical-bank
/
open_exchange_rates_loader.rb
35 lines (31 loc) · 1.16 KB
/
open_exchange_rates_loader.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# encoding: UTF-8
require 'money'
require 'date'
require 'yajl'
require 'open-uri'
class Money
module Bank
module OpenExchangeRatesLoader
HIST_URL = 'http://openexchangerates.org/api/historical/'
OER_URL = 'http://openexchangerates.org/api/latest.json'
# Tries to load data from OpenExchangeRates for the given rate.
# Won't do anything if there's no data available for that date
# in OpenExchangeRates (short) history.
def load_data(date)
rates_source = if date == Date.today
OER_URL.dup
else
HIST_URL + date.strftime('%Y-%m-%d') + '.json'
end
rates_source << "?app_id=#{ENV['OPENEXCHANGERATES_APP_ID']}" if ENV['OPENEXCHANGERATES_APP_ID']
doc = Yajl::Parser.parse(open(rates_source).read)
base_currency = doc['base'] || 'USD'
doc['rates'].each do |currency, rate|
# Don't use set_rate here, since this method can only be called from
# get_rate, which already aquired a mutex.
internal_set_rate(date, base_currency, currency, rate)
end
end
end
end
end