class Slipcover::Query

Attributes

design_document[R]
view_name[R]

Public Class Methods

new(design_document, view_name) click to toggle source
# File lib/slipcover/query.rb, line 5
def initialize(design_document, view_name)
  @design_document = design_document
  @view_name = view_name
end

Public Instance Methods

all(opts={}) click to toggle source
# File lib/slipcover/query.rb, line 14
def all(opts={})
  do_http_request(opts)[:rows].map do |row|
    doc_data = opts[:include_docs] ? row["doc"] : row
    Document.new(database.name, doc_data.symbolize_keys)
  end
end
database() click to toggle source
# File lib/slipcover/query.rb, line 21
def database
  design_document.database
end
url() click to toggle source
# File lib/slipcover/query.rb, line 10
def url
  "#{design_document.url}/_view/#{view_name}"
end

Private Instance Methods

add_qs_to_url(url, params) click to toggle source
# File lib/slipcover/query.rb, line 59
def add_qs_to_url(url, params)
  url + "?" + params.to_query
end
do_http_request(opts) click to toggle source

This is here because Cloudant doesn't support POST without supplying `keys`.

# File lib/slipcover/query.rb, line 29
def do_http_request(opts)
  if opts.include?(:keys)
    opts_params, body_params = url_params_and_body(opts)
    url_with_qs = add_qs_to_url(url, repackage(opts_params))
    http_adapter.post(url_with_qs, body_params)
  else
    url_with_qs = add_qs_to_url(url, repackage(opts))
    http_adapter.get(url_with_qs)
  end
end
http_adapter() click to toggle source
# File lib/slipcover/query.rb, line 63
def http_adapter
  @http_adapter ||= HttpAdapter.new
end
jsonify_key?(key) click to toggle source
# File lib/slipcover/query.rb, line 55
def jsonify_key?(key)
  [:key, :startkey, :endkey].include?(key.to_sym)
end
jsonify_param(value) click to toggle source
# File lib/slipcover/query.rb, line 51
def jsonify_param(value)
  value.to_json
end
repackage(opts) click to toggle source
# File lib/slipcover/query.rb, line 45
def repackage(opts)
  opts.each_with_object({}) do |(key, value), result|
    result[key] = jsonify_key?(key) ? jsonify_param(value) : value
  end
end
url_params_and_body(opts) click to toggle source
# File lib/slipcover/query.rb, line 40
def url_params_and_body(opts)
  keys_for_body = [:keys]
  [opts.except(*keys_for_body), opts.slice(*keys_for_body)]
end