Sha256: 634c6eb40f42e010cbd622ec0d91731acfeba853b5ec2d11ad14538b2b926e7c

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

require 'currency_converter/exceptions'
require 'currency_converter/currencies'
require 'currency_converter/version'
require 'net/http'
require 'nokogiri'

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)

      ex_rate.to_f * fixnum
    end

    private

    # Returns the Float value of rate or nil
    def exchange_rate
      http = Net::HTTP.new('themoneyconverter.com', 80)
      url = "/CurrencyConverter.aspx?from=#{from_currency.to_s.upcase}&to=#{to_currency.to_s.upcase}"
      response = http.get(url)

      doc = Nokogiri::HTML(response.body)
      result = doc.css('div.cc-rate textarea').first.text

      regexp = Regexp.new('(\\d+(?:\\.\\d+)?)')
      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

1 entries across 1 versions & 1 rubygems

Version Path
currency_converter-1.0.2 lib/currency_converter.rb