Module: Analysand::Viewing

Included in:
Database
Defined in:
lib/analysand/viewing.rb

Constant Summary collapse

JSON_VALUE_PARAMETERS =
%w(key keys startkey endkey).map(&:to_sym)

Instance Method Summary collapse

Instance Method Details

#all_docs(parameters = {}, credentials = nil) ⇒ Object



10
11
12
# File 'lib/analysand/viewing.rb', line 10

def all_docs(parameters = {}, credentials = nil)
  view('_all_docs', parameters, credentials)
end

#all_docs!(parameters = {}, credentials = nil) ⇒ Object



14
15
16
# File 'lib/analysand/viewing.rb', line 14

def all_docs!(parameters = {}, credentials = nil)
  view!('_all_docs', parameters, credentials)
end

#do_view_query(view_path, parameters, credentials, &block) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/analysand/viewing.rb', line 51

def do_view_query(view_path, parameters, credentials, &block)
  use_post = parameters.delete(:post)

  if use_post
    post_view(view_path, parameters, credentials, block)
  else
    get_view(view_path, parameters, credentials, block)
  end
end

#encode_parameters(parameters) ⇒ Object



76
77
78
79
80
81
82
# File 'lib/analysand/viewing.rb', line 76

def encode_parameters(parameters)
  JSON_VALUE_PARAMETERS.each do |p|
    if parameters.has_key?(p)
      parameters[p] = parameters[p].to_json
    end
  end
end

#expand_view_path(view_name) ⇒ Object



84
85
86
87
88
89
90
91
# File 'lib/analysand/viewing.rb', line 84

def expand_view_path(view_name)
  if view_name.start_with?('_design') || !view_name.include?('/')
    view_name
  else
    design_doc, view_name = view_name.split('/', 2)
    "_design/#{design_doc}/_view/#{view_name}"
  end
end

#get_view(view_path, parameters, credentials, block) ⇒ Object



61
62
63
64
# File 'lib/analysand/viewing.rb', line 61

def get_view(view_path, parameters, credentials, block)
  encode_parameters(parameters)
  _get(view_path, credentials, parameters, {}, nil, block)
end

#post_view(view_path, parameters, credentials, block) ⇒ Object



66
67
68
69
70
71
72
73
74
# File 'lib/analysand/viewing.rb', line 66

def post_view(view_path, parameters, credentials, block)
  body = {
    'keys' => parameters.delete(:keys)
  }.reject { |_, v| v.nil? }

  encode_parameters(parameters)

  _post(view_path, credentials, parameters, json_headers, body.to_json, block)
end

#return_view(view_path, parameters, credentials) ⇒ Object



45
46
47
48
49
# File 'lib/analysand/viewing.rb', line 45

def return_view(view_path, parameters, credentials)
  resp = do_view_query(view_path, parameters, credentials)

  ViewResponse.new resp
end

#stream_view(view_path, parameters, credentials) ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'lib/analysand/viewing.rb', line 35

def stream_view(view_path, parameters, credentials)
  StreamingViewResponse.new do |sresp|
    do_view_query(view_path, parameters, credentials) do |resp|
      sresp.response = resp
      Fiber.yield
      resp.read_body { |data| Fiber.yield(data) }
    end
  end
end

#view(view_name, parameters = {}, credentials = nil) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/analysand/viewing.rb', line 18

def view(view_name, parameters = {}, credentials = nil)
  stream = parameters.delete(:stream)
  view_path = expand_view_path(view_name)

  if stream
    stream_view(view_path, parameters, credentials)
  else
    return_view(view_path, parameters, credentials)
  end
end

#view!(view_name, parameters = {}, credentials = nil) ⇒ Object



29
30
31
32
33
# File 'lib/analysand/viewing.rb', line 29

def view!(view_name, parameters = {}, credentials = nil)
  view(view_name, parameters, credentials).tap do |resp|
    raise ex(CannotAccessView, resp) unless resp.success?
  end
end