Sha256: f1497a6cfc8ff21a233f0830b5c8b4db2d10894a7fa94c250755b9afc93ad0b8

Contents?: true

Size: 1.79 KB

Versions: 2

Compression:

Stored size: 1.79 KB

Contents

require "currency_converter/exceptions"
require "currency_converter/currencies"
require "currency_converter/version"
require "net/http"

module CurrencyConverter
  class << self
    # Returns the Symbol of 'from' currency
    attr_reader :from_currency

    # Returns the Symbol of 'to' currency
    attr_reader :to_currency

    # Receive the amount of you desire currency.
    #
    # @param [String, String, Numeric] other currency to exchange to.
    #
    # @return [amount]
    #
    # @example
    # CurrencyConverter.exchange("USD", "EUR", 100)
    # CurrencyConverter.exchange("USD", "INR", 100)
    def exchange(from, to, fixnum)
      @from_currency = from.upcase.to_sym
      @to_currency = to.upcase.to_sym
      validate_currency
      ex_rate = exchange_rate
      validate_rate(ex_rate)
      value = "%.2f" % (ex_rate.to_f * fixnum).to_s
      value.to_f
    end

    private

    # Returns the Float value of rate or nil
    def exchange_rate
      http = Net::HTTP.new("www.google.com", 80)
      url = "/finance/converter?a=1&from=#{from_currency.to_s.upcase}&to=#{to_currency.to_s.upcase}"
      response = http.get(url)
      result = response.body
      regexp = Regexp.new("(\\d+\\.{0,1}\\d*)\\s+#{to_currency}")
      regexp.match result
      return $1
    rescue Timeout::Error
      raise StandardError, "Please check your internet connection"
    end

    # Raise errors for invalid currencies.
    def validate_currency
      raise UnknownCurrency.new(from_currency) unless CurrencyConverter::CURRENCIES.has_key?(from_currency)
      raise UnknownCurrency.new(to_currency) unless CurrencyConverter::CURRENCIES.has_key?(to_currency)
    end

    # Raise errors for missing data.
    def validate_rate(rate)
      raise MissingExchangeRate.new(from_currency, to_currency) if rate.to_f.zero?
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
currency_converter-1.0.0 lib/currency_converter.rb
currency_converter-0.0.2 lib/currency_converter.rb