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