Sha256: 350c53a55fd6a8cc34c5807a6537a24a3d3be05b338aae2a7383e663da0746a8

Contents?: true

Size: 987 Bytes

Versions: 1

Compression:

Stored size: 987 Bytes

Contents

require 'net/http'
require 'json'
require_relative './exceptions'

module Mint
  module FixerCurrency
    # Fetch exchange rates from http://fixer.io
    class Request
      def initialize(currency, date = nil)
        @currency = currency
        @date = date
      end

      # @return Hash
      def perform!
        url = @date ? "http://api.fixer.io/#{@date}?base=#{@currency}" : "http://api.fixer.io/latest?base=#{@currency}"
        parse(fetch(url))
      end

      private

      # @return [String]
      def fetch(url)
        uri = URI(url)
        http = Net::HTTP.new(uri.host, 80)
        request = Net::HTTP::Get.new(uri.request_uri)
        response = http.request(request)
        response.body
      end

      # @return [Hash]
      def parse(body)
        json = JSON.parse(body)
        error = json.fetch('error', nil)
        raise FixerArgumentError, error if error
        Hash[json.fetch('rates', nil).map { |k, v| [k.to_sym, v] }]
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mint-fixer_currency-0.1.0 lib/mint/fixer_currency/request.rb