Sha256: afeabfa5cacdac4c4cc895afb53b8e13256f6b96154f359e6510a8eb2ef9b61c

Contents?: true

Size: 852 Bytes

Versions: 10

Compression:

Stored size: 852 Bytes

Contents

# frozen_string_literal: true

require 'net/http'
require 'date'

# Europe Gem
module Europe
  # currency
  module Currency
    # exchange rates
    module ExchangeRates
      EXCHANGE_URL = 'https://www.floatrates.com/daily/eur.json'

      def self.retrieve
        resp = Net::HTTP.get_response(URI.parse(EXCHANGE_URL))
        resp.code.to_i == 200 ? extract_rates(resp.body) : :failed
      end

      def self.extract_rates(doc)
        data = JSON.parse(doc)

        rates = { date: Date.parse(data['usd']['date']),
                  rates: {} }

        filter_rates(data, rates)
      rescue JSON::ParserError
        :failed
      end

      def self.filter_rates(data, rates)
        data.each do |currency, object|
          rates[:rates][currency.upcase.to_sym] = object['rate'].to_f
        end
        rates
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
europe-0.0.23 lib/europe/currency/exchange_rates.rb
europe-0.0.22 lib/europe/currency/exchange_rates.rb
europe-0.0.21 lib/europe/currency/exchange_rates.rb
europe-0.0.20 lib/europe/currency/exchange_rates.rb
europe-0.0.19 lib/europe/currency/exchange_rates.rb
europe-0.0.18 lib/europe/currency/exchange_rates.rb
europe-0.0.17 lib/europe/currency/exchange_rates.rb
europe-0.0.16 lib/europe/currency/exchange_rates.rb
europe-0.0.15 lib/europe/currency/exchange_rates.rb
europe-0.0.14 lib/europe/currency/exchange_rates.rb