class Luchadeer::Search

Constants

QUERY_PARAMS
RESOURCE_TYPES

Public Class Methods

new(opts = {}) { |self| ... } click to toggle source
# File lib/luchadeer/search.rb, line 17
def initialize(opts = {})
  opts.each do |key, value|
    send(:"#{key}=", value)
  end

  yield self if block_given?
end

Public Instance Methods

fetch() click to toggle source
# File lib/luchadeer/search.rb, line 25
def fetch
  Luchadeer.client.get('search', search_params).body[:results].map do |r|
    type = r.delete(:resource_type)
    RESOURCE_TYPES[type] && RESOURCE_TYPES[type].new(r)
  end.compact
end
resources(resources = nil) click to toggle source
# File lib/luchadeer/search.rb, line 44
def resources(resources = nil)
  return @resources unless resources
  append_resources(resources)
  self
end
sort(attribute = nil, dir = :asc) click to toggle source
# File lib/luchadeer/search.rb, line 50
def sort(attribute = nil, dir = :asc)
  return @sort unless attribute
  @sort = "#{attribute}:#{dir}"
  self
end

Private Instance Methods

append_resources(resources) click to toggle source
# File lib/luchadeer/search.rb, line 63
def append_resources(resources)
  @resources ||= ''
  resources = (RESOURCE_TYPES.invert[resources] || '') if resources.is_a? Class

  rx = resources.is_a?(Array) ? resources : resources.split(',')
  rx.each do |r|
    r = (RESOURCE_TYPES.invert[r] || '') if r.is_a? Class        
    RESOURCE_TYPES[r] or raise(ArgumentError, 'Invalid resource type supplied')
    @resources << ",#{r}"
  end

  @resources.sub!(/\A,+/, '')
end
search_params() click to toggle source
# File lib/luchadeer/search.rb, line 58
def search_params
  { query: @query, limit: @limit, resources: @resources, page: @page,
    sort: @sort }.delete_if { |_, v| v.nil? }
end