class CurrencyExchange::Xe

Constants

BASE_URL
QUERY

Public Class Methods

get_rate(query) click to toggle source
# File lib/currency_exchange/xe.rb, line 5
def self.get_rate(query)
  rates_parser request_rate(query)
end
rates_parser(resp) click to toggle source
# File lib/currency_exchange/xe.rb, line 9
def self.rates_parser(resp)
  doc = Nokogiri::HTML(resp)
  date = parse_date(doc)
  currency1, currency2, rate = parse_rate doc

  CurrencyExchange::Rate.new("#{currency1}/#{currency2}", rate, date: date)
end

Private Class Methods

parse_date(doc) click to toggle source
# File lib/currency_exchange/xe.rb, line 27
def self.parse_date(doc)
  doc.css('.uccMMR').css('a').children.first.inner_text.
    split('Mid-market rates: ').last
end
parse_rate(doc) click to toggle source
# File lib/currency_exchange/xe.rb, line 32
def self.parse_rate(doc)
  exchange = doc.css('.uccResUnit').css('.leftCol')[0].inner_text
  currency1, currency2 = exchange.gsub(/[\u0080-\u00ff]/, ' ').split(' = ')
  currency1 = currency1.split(' ').last
  rate, currency2 = currency2.split(' ')
  [currency1, currency2, rate]
end
query_builder(query) click to toggle source
# File lib/currency_exchange/xe.rb, line 23
def self.query_builder(query)
  QUERY % query
end
request_rate(query) click to toggle source

Private Methods

# File lib/currency_exchange/xe.rb, line 19
def self.request_rate(query)
  CurrencyExchange::Network.get "#{BASE_URL}?#{query_builder(query)}"
end