class BankOfIsrael
Constants
- VERSION
Public Class Methods
latest_rates()
click to toggle source
# File lib/bank-of-israel.rb, line 12 def self.latest_rates call_bank end
rates(date)
click to toggle source
# File lib/bank-of-israel.rb, line 7 def self.rates(date) raise "Please provide a date in YYYYMMDD format" unless date call_bank(params(date)) end
Private Class Methods
call_bank(params = {})
click to toggle source
# File lib/bank-of-israel.rb, line 32 def self.call_bank(params = {}) MultiXml.parser = :nokogiri uri = URI.parse("http://www.bankisrael.gov.il") http = Net::HTTP.new(uri.host, uri.port) full_path = encode_path_params("/currency.xml", params) request = Net::HTTP::Get.new(full_path) response = http.request(request) hash = MultiXml.parse(response.body) parse(hash) end
downcase_and_symbolize(obj)
click to toggle source
# File lib/bank-of-israel.rb, line 59 def self.downcase_and_symbolize(obj) return obj.inject({}){|memo,(k,v)| memo[k.downcase.to_sym] = downcase_and_symbolize(v); memo} if obj.is_a? Hash return obj.inject([]){|memo,v | memo << downcase_and_symbolize(v); memo} if obj.is_a? Array return obj end
encode_path_params(path, params)
click to toggle source
# File lib/bank-of-israel.rb, line 44 def self.encode_path_params(path, params) encoded = URI.encode_www_form(params) [path, encoded].join("?") end
format_date(date)
click to toggle source
# File lib/bank-of-israel.rb, line 22 def self.format_date(date) begin date = DateTime.parse(date.to_s) raise "rates not available on sunday and saturday" if date.sunday? or date.saturday? date.strftime("%Y%m%d") rescue ArgumentError raise "Please provide a date in YYYYMMDD format" end end
params(date)
click to toggle source
# File lib/bank-of-israel.rb, line 18 def self.params(date) { "rdate" => format_date(date) } end
parse(hash)
click to toggle source
# File lib/bank-of-israel.rb, line 49 def self.parse(hash) raise "rates not available on the given date" if hash["CURRENCIES"]["ERROR1"] == "Requested date is invalid or" helper_hash = { :release_date => hash["CURRENCIES"]["LAST_UPDATE"] } hash["CURRENCIES"]["CURRENCY"].each do |c| helper_hash.merge! c["CURRENCYCODE"] => c.reject {|k,v| k == "CURRENCYCODE"} end downcase_and_symbolize(helper_hash) end