class BestbuyApi::Criteria

Public Class Methods

new(klass) click to toggle source
# File lib/bestbuy_api/criteria.rb, line 10
def initialize(klass)
  @klass = klass
end

Public Instance Methods

criteria() click to toggle source
# File lib/bestbuy_api/criteria.rb, line 14
def criteria
  @criteria ||= { attributes: [], conditions: {} }
end
limit(limit) click to toggle source
# File lib/bestbuy_api/criteria.rb, line 32
def limit(limit)
  criteria[:limit] = limit.to_i
  self
end
page(page) click to toggle source
# File lib/bestbuy_api/criteria.rb, line 37
def page(page)
  criteria[:page] = page.to_i
  self
end
response() click to toggle source
# File lib/bestbuy_api/criteria.rb, line 42
def response
  params = Params.new(criteria, @klass.attributes)
  request.find(params.structure)
end
select(args) click to toggle source
# File lib/bestbuy_api/criteria.rb, line 18
def select(args)
  assert_keys(args, @klass.attributes[:read])

  criteria[:attributes] = args
  self
end
where(args) click to toggle source
# File lib/bestbuy_api/criteria.rb, line 25
def where(args)
  assert_keys(args, @klass.attributes[:search])

  criteria[:conditions].merge!(args)
  self
end

Private Instance Methods

assert_keys(args, attributes) click to toggle source
# File lib/bestbuy_api/criteria.rb, line 49
def assert_keys(args, attributes)
  valid_keys = attributes.keys
  args.each do |key, _v|
    unless valid_keys.include?(key)
      raise MissingAttributeError, "Unknown attribute: #{key.inspect}. Valid attributes are: " \
                        "#{valid_keys.map(&:inspect).join(', ')}"
    end
  end
end
request() click to toggle source
# File lib/bestbuy_api/criteria.rb, line 59
def request
  api_key = BestbuyApi.config.api_key
  @request ||= Request.new(api_key, @klass.attributes[:path])
end