class Fxify::ECBData

Constants

ECB_90_DAYS_URL

Public Class Methods

new() click to toggle source
# File lib/fxify/base_class.rb, line 7
def initialize  
    @days = []
    fetch_data("data.xml") 
    @data_file = Nokogiri::XML File.open("data.xml") 
    parse_xml
end

Public Instance Methods

currencies() click to toggle source
# File lib/fxify/base_class.rb, line 14
def currencies
    @days.first.currencies.map { |c| c.name } 
end
dates() click to toggle source
# File lib/fxify/base_class.rb, line 18
def dates
    @days.map { |d| d.day } 
end

Private Instance Methods

fetch_data(file_name) click to toggle source
# File lib/fxify/base_class.rb, line 40
def fetch_data(file_name)
    begin
     remote_data = open(ECB_90_DAYS_URL).read
    rescue OpenURI::HTTPError => e
      puts "Error #{e}"
    end 

    File.open(file_name, 'w') { |file| file.write(remote_data) } if e.nil?
end
parse_xml() click to toggle source
# File lib/fxify/base_class.rb, line 28
def parse_xml
  @data_file.xpath("//xmlns:Cube").each do |day| 
      if day.attribute("time")

       @days << ExchangeDate.new(day.attribute("time").value, day.children.map do |currency|
          Currency.new(name: currency.attribute("currency").value, value: currency.attribute("rate").value)
       end)

      end   
  end 
end
rate(date, currency) click to toggle source
# File lib/fxify/base_class.rb, line 24
def rate(date, currency)
    @days.detect { |d| d.day == date }.currencies.detect { |c| c.name == currency }.value
end