class JustExchangeRates
Note: To use this gem you need an **app id** which you can get when registering for free from openexchangerates.org/signup/free
Public Class Methods
new(base: 'USD', cache_refresh: '1 week', cache_path: '.', \ debug: false, app_id: nil)
click to toggle source
# File lib/justexchangerates.rb, line 19 def initialize(base: 'USD', cache_refresh: '1 week', cache_path: '.', \ debug: false, app_id: nil) @base, @debug, @app_id, @cache_refresh = base, debug, app_id, cache_refresh filename = 'justexchangerates_' + base.downcase + '.json' @cache_filepath = File.join(cache_path, filename) h = if cache_refresh then if File.exists? @cache_filepath then JSON.parse(File.read(@cache_filepath), {:symbolize_names => true}) else {base: @base, date: Time.now, rates: {}} end end puts 'h: ' + h.inspect if debug @base, @date, @rates = h[:base], h[:date], h[:rates] end
Public Instance Methods
rate(currency)
click to toggle source
# File lib/justexchangerates.rb, line 45 def rate(currency) if @rates.has_key? currency.upcase.to_sym then seconds = ChronicDuration.parse(@cache_refresh) puts 'seconds: ' + seconds.inspect if @debug t = (Time.parse(rates[currency.upcase.to_sym].last) \ + seconds) puts 't: ' + t.inspect if @debug if t > Time.now then rates[currency.upcase.to_sym].first else fetch_rate currency end else fetch_rate currency end end
Private Instance Methods
fetch_rate(currency)
click to toggle source
# File lib/justexchangerates.rb, line 69 def fetch_rate(currency) puts 'inside fetch_rate' if @debug puts '@app_id: ' + @app_id.inspect if @debug rate = OpenExchangeRates::Rates.new(app_id: @app_id)\ .exchange_rate(from: @base, to: currency) puts "currency: %s rate: %s" % [currency, rate] if @debug @rates[currency.upcase.to_sym] = [rate, Time.now.to_s] File.write @cache_filepath, \ {base: @base, date: @date, rates: @rates}.to_json rate end