Class: Fixer::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/fixer/request.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base = Fixer.base) ⇒ Request

Returns a new instance of Request.



4
5
6
7
8
# File 'lib/fixer/request.rb', line 4

def initialize(base = Fixer.base)
  @base = base
  base_host = "https://api.fixer.io/latest?base=#{base}"
  @response = HTTParty.get(base_host)
end

Instance Attribute Details

#responseObject (readonly)

Returns the value of attribute response.



3
4
5
# File 'lib/fixer/request.rb', line 3

def response
  @response
end

Instance Method Details

#get_rate {|r_obj| ... } ⇒ Object

Yields:

  • (r_obj)


26
27
28
29
30
31
32
33
# File 'lib/fixer/request.rb', line 26

def get_rate
  result = JSON.parse @response.body, symbolize_names: true
  base = {base: @base}
  rates = result[:rates]
  currencies = base.merge(rates)
  r_obj = OpenStruct.new currencies
  yield r_obj
end

#transfer(data) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/fixer/request.rb', line 10

def transfer(data)
  if data.is_a? Hash
    if [:target, :ammount].all? { |k| data.key? k }
      target = data[:target]
      if (valid_currency?(target)) && data[:ammount].is_a?(Numeric)
        result = JSON.parse @response.body, symbolize_names: true
        data[:ammount] * result[:rates][target.to_sym]
      else
        raise "current currency is not supported or ammount set to an non-integer value"
      end
    end
  else
    raise "only hash allowed"
  end
end