Module: CcyConvertor::ProcessAndValidateOption

Included in:
RateProvider
Defined in:
lib/ccy_convertor/process_and_validate_option.rb

Instance Method Summary collapse

Instance Method Details

#validate_amount!(amount) ⇒ Object



17
18
19
20
21
# File 'lib/ccy_convertor/process_and_validate_option.rb', line 17

def validate_amount!(amount)
  unless amount.is_a?(Numeric)
    raise CcyConvertor::InvalidAmount, 'options[:amount] must be a number'
  end
end

#validate_currency_codes!(currency_codes) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/ccy_convertor/process_and_validate_option.rb', line 23

def validate_currency_codes!(currency_codes)
  currency_codes.each do |code|
    unless CcyConvertor::Constant::CCY_CODE_AND_NAME[code]
      raise CcyConvertor::InvalidCurrencyCode, "Currency code '#{code}' doesn't exists"
    end
  end
end

#validate_currency_support!(currencies, rate_matrix) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/ccy_convertor/process_and_validate_option.rb', line 31

def validate_currency_support!(currencies, rate_matrix)
  currencies.each do |ccy|
    if rate_matrix[ccy].nil?
      raise CcyConvertor::CurrencyNotSupported, "Currency '#{ccy}' is not supported by OpenExchangeRate"
    end
  end
end

#validate_options!(options) ⇒ Object



3
4
5
6
7
# File 'lib/ccy_convertor/process_and_validate_option.rb', line 3

def validate_options!(options)
  validate_presence_of_hash_keys!(options, [:from_ccy, :to_ccy, :amount])
  validate_amount!(options[:amount])
  validate_currency_codes!([options[:from_ccy], options[:to_ccy]])
end

#validate_presence_of_hash_keys!(options, keys) ⇒ Object



9
10
11
12
13
14
15
# File 'lib/ccy_convertor/process_and_validate_option.rb', line 9

def validate_presence_of_hash_keys!(options, keys)
  options_not_provided = keys - options.keys
  if options_not_provided.count != 0
    raise ArgumentError,
      "argument hash should have #{options_not_provided.join(', ')} #{options_not_provided.count > 1 ? 'keys' : 'key'}"
  end
end