Sha256: abe53360154ba4a06748e596815af5edff605e5b72e51b70053a772c0e30fe4b

Contents?: true

Size: 1.06 KB

Versions: 7

Compression:

Stored size: 1.06 KB

Contents

module Economy
  module Rates
    class Yahoo < Base

      private

      def call
        ids = Economy.currencies.map(&:iso_code).permutation(2).map(&:join).join(',')
        uri = URI('https://query.yahooapis.com/v1/public/yql')
        uri.query = URI.encode_www_form(
          q: "select * from yahoo.finance.xchange where pair in ('#{ids}')",
          env: 'store://datatables.org/alltableswithkeys',
          format: 'json'
        )
        response = Net::HTTP.get_response(uri)
        if response.code == '200'
          body = JSON.parse(response.body.downcase, symbolize_names: true)
          results = body[:query][:results][:rate]
          if results.is_a?(Hash)
            results = [results]
          end
          rates = []
          results.each do |result|
            if result[:name] != 'n/a'
              from, to = result[:name].split('/').map(&:upcase)
              rate = BigDecimal(result[:rate])
              rates << [from, to, rate]
            end
          end
          rates
        else
          []
        end
      end

    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
economy-5.1.0 lib/economy/rates/yahoo.rb
economy-4.0.2.2 lib/economy/rates/yahoo.rb
economy-4.0.2.1 lib/economy/rates/yahoo.rb
economy-4.0.2.0 lib/economy/rates/yahoo.rb
economy-4.0.1.0 lib/economy/rates/yahoo.rb
economy-4.0.0.0 lib/economy/rates/yahoo.rb
economy-0.0.1 lib/economy/rates/yahoo.rb