class Edmunds::Api::Request

Attributes

allowed_parameters[W]
default_parameters[W]
path[R]
raw_parameters[W]
required_parameters[W]

Public Class Methods

new(path) click to toggle source
# File lib/edmunds/api/request.rb, line 9
def initialize(path)
  @path = path
end

Public Instance Methods

get() click to toggle source
# File lib/edmunds/api/request.rb, line 17
def get
  Faraday.get(@path, parameters)
end
parameters() click to toggle source
# File lib/edmunds/api/request.rb, line 13
def parameters
  sanitized_parameters
end

Private Instance Methods

api_key() click to toggle source
# File lib/edmunds/api/request.rb, line 71
def api_key
  { api_key: ENV['EDMUNDS_API_KEY'] }
end
check_required(params) click to toggle source
# File lib/edmunds/api/request.rb, line 43
def check_required(params)
  @required_parameters.each do |param|
    raise "missing required parameter #{param}" if params[param].blank?
  end
  params
end
check_values(params) click to toggle source
# File lib/edmunds/api/request.rb, line 50
def check_values(params)
  params.each do |param, value|
    raise "bad parameter value #{value} for param #{param}" unless valid_param?(param, value)
  end
  params
end
sanitized_parameters() click to toggle source
# File lib/edmunds/api/request.rb, line 23
def sanitized_parameters
  @allowed_parameters = @allowed_parameters.with_indifferent_access
  params = @raw_parameters.with_indifferent_access

  # merge in default parameters
  params.reverse_merge! @default_parameters

  # throw away unknown parameters
  params.slice! *@allowed_parameters.keys

  # confirm required parameters are present
  check_required(params)

  # confirm parameter values are allowed
  check_values(params)

  # merge or override api_key
  params.merge! api_key
end
valid_param?(param, value) click to toggle source
# File lib/edmunds/api/request.rb, line 57
def valid_param?(param, value)
  constraint = @allowed_parameters[param]

  if constraint == :anything
    true
  elsif constraint.respond_to?(:cover?)
    constraint.cover?(value)
  elsif constraint.respond_to?(:match)
    !! constraint.match(value)
  else
    constraint.include?(value)
  end
end