Class: FXRates::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/fx_rates/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(api_key: nil) ⇒ Client

Returns a new instance of Client.



3
4
5
6
# File 'lib/fx_rates/client.rb', line 3

def initialize(api_key: nil)
  @api_key = api_key || FXRates.config&.api_key
  @requset = FXRates::Request.new(@api_key)
end

Instance Method Details

#convert(from:, to:, **params) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/fx_rates/client.rb', line 51

def convert(from:, to:, **params)
  query = {
    from: from,
    to: to
  }
  query[:date] = (params[:date] || Time.now.utc).strftime('%Y-%m-%d')
  query[:amount] = params[:amount] || 1
  query[:places] = params[:places] if params[:places]

  Response::Convert.new(@requset.get('/convert', query))
end

#currenciesObject



63
64
65
# File 'lib/fx_rates/client.rb', line 63

def currencies
  @requset.get('/currencies')
end

#historical(**params) ⇒ Object



19
20
21
22
23
24
25
26
27
28
# File 'lib/fx_rates/client.rb', line 19

def historical(**params)
  query = {}
  query[:date] = date_params(params[:date] || Time.now.utc)
  query[:base] = params[:base] || 'USD'
  query[:currencies] = currencies_params(params[:currencies]) if params[:currencies]
  query[:amount] = params[:amount] || 1
  query[:places] = params[:places] if params[:places]

  Response::Rates.new(@requset.get('/historical', query))
end

#latest(**params) ⇒ Object



8
9
10
11
12
13
14
15
16
17
# File 'lib/fx_rates/client.rb', line 8

def latest(**params)
  query = {}
  query[:base] = params[:base] || 'USD'
  query[:amount] = params[:amount] || 1
  query[:places] = params[:places] if params[:places]
  query[:resolution] = params[:resolution] if params[:resolution]
  query[:currencies] = currencies_params(params[:currencies]) if params[:currencies]

  Response::Rates.new(@requset.get('/latest', query))
end

#timeseries(start_date:, end_date:, accuracy: 'day', **params) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/fx_rates/client.rb', line 30

def timeseries(start_date:, end_date:, accuracy: 'day', **params)
  if !start_date.match?(/\d{4}-\d{2}-\d{2}/) && !start_date.match?(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)
    raise ArgumentError, "Invalid start_date format. Must be in the YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss format"
  end
  if !end_date.match?(/\d{4}-\d{2}-\d{2}/) && !end_date.match?(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)
    raise ArgumentError, "Invalid end_date format. Must be in the YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss format"
  end

  query = {
    start_date: start_date,
    end_date: end_date,
    accuracy: accuracy
  }
  query[:currencies] = currencies_params(params[:currencies]) if params[:currencies]
  query[:base] = params[:base] || 'USD'
  query[:amount] = params[:amount] || 1
  query[:places] = params[:places] if params[:places]

  Response::Timeseries.new(@requset.get('/timeseries', query))
end