class Loquor::ApiCall::Index

Attributes

clauses[R]
criteria[R]

Public Class Methods

new(klass) click to toggle source
Calls superclass method Loquor::ApiCall::new
# File lib/loquor/api_calls/index.rb, line 6
def initialize(klass)
  super(klass)
  @criteria = {}
  @clauses = []
end

Public Instance Methods

find_each() { |klass| ... } click to toggle source
# File lib/loquor/api_calls/index.rb, line 52
def find_each
  page = 1
  per = 200
  results = []
  begin
    results = Loquor.get("#{generate_url}&page=#{page}&per=#{per}")
    results.each do |result|
      yield klass.new(result)
    end
    page += 1
  end while(results.size == per)
end
limit(value)
Alias for: per
method_missing(name, *args, &block) click to toggle source

Proxy everything to the results so that this this class transparently acts as an Array.

# File lib/loquor/api_calls/index.rb, line 48
def method_missing(name, *args, &block)
  results.send(name, *args, &block)
end
order(value) click to toggle source
# File lib/loquor/api_calls/index.rb, line 30
def order(value)
  @order = value
  self
end
page(value) click to toggle source
# File lib/loquor/api_calls/index.rb, line 41
def page(value)
  @page = value
  self
end
per(value) click to toggle source
# File lib/loquor/api_calls/index.rb, line 35
def per(value)
  @per = value
  self
end
Also aliased as: limit
select(value) click to toggle source
# File lib/loquor/api_calls/index.rb, line 24
def select(value)
  @criteria[:fields] ||= []
  @criteria[:fields] += value
  self
end
where(data) click to toggle source
# File lib/loquor/api_calls/index.rb, line 12
def where(data)
  case data
  when String
    @clauses << data
  else
    data.each do |key, value|
      @criteria[key] = value
    end
  end
  self
end

Private Instance Methods

add_clause(query_string, clause) click to toggle source
# File lib/loquor/api_calls/index.rb, line 116
def add_clause(query_string, clause)
  query_string << "clauses[]=#{URI.encode(clause.to_s)}"
end
add_criteria(query_string, key, value) click to toggle source
# File lib/loquor/api_calls/index.rb, line 90
def add_criteria(query_string, key, value)
  substitute_value = Loquor.config.substitute_values[value]
  if !substitute_value.nil?
    query_string << "#{key}=#{URI.encode_www_form_component(substitute_value)}"
  else
    case value
    when String, Symbol, Numeric, Date, Time, DateTime
      query_string << "#{key}=#{URI.encode_www_form_component(value.to_s)}"
    when Array
      if value.empty?
          query_string << "#{key}[]="
      else
        value.each do |v|
          query_string << "#{key}[]=#{URI.encode_www_form_component(v.to_s)}"
        end
      end
    when Hash
      value.each do |k,v|
        query_string << "#{key}[#{k}]=#{URI.encode_www_form_component(v.to_s)}"
      end
    else
      raise LoquorError.new("Filter values must be strings, arrays, date, time, datetime or single-depth hashes.")
    end
  end
end
generate_url() click to toggle source
# File lib/loquor/api_calls/index.rb, line 74
def generate_url
  query_string = []
  @criteria.each do |key,value|
    add_criteria(query_string, key, value)
  end
  @clauses.each do |clause|
    add_clause(query_string, clause)
  end

  query_string << "per=#{@per}" if @per
  query_string << "page=#{@page}" if @page
  query_string << "order=#{@order}" if @order

  "#{klass.path}?#{query_string.join("&")}"
end
results() click to toggle source
# File lib/loquor/api_calls/index.rb, line 67
def results
  if @results.nil?
    @results = Loquor.get(generate_url).map {|obj| klass.new(obj)}
  end
  @results
end