/
base_view_spec.rb
61 lines (53 loc) · 1.81 KB
/
base_view_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
module CouchPotato
module View
class BaseViewSpec
attr_reader :reduce_function, :design_document, :view_name, :view_parameters, :klass, :options
private :klass, :options
def initialize(klass, view_name, options, view_parameters)
normalized_view_parameters = normalize_view_parameters view_parameters
assert_valid_view_parameters normalized_view_parameters
@klass = klass
@design_document = klass.to_s.snake_case('::')
@view_name = view_name
@options = options
@view_parameters = {}
[:group, :include_docs, :descending, :group_level, :limit].each do |key|
@view_parameters[key] = options[key] if options.include?(key)
end
@view_parameters.merge!(normalized_view_parameters)
end
def process_results(results)
results
end
private
def normalize_view_parameters(params)
normalized_params = params.dup
hash = wrap_in_hash params
replace_range_key hash
end
def wrap_in_hash(params)
if params.is_a?(Hash)
params
else
{:key => params}
end
end
def replace_range_key(params)
if((key = params[:key]).is_a?(Range))
params.delete :key
params[:startkey] = key.first
params[:endkey] = key.last
end
params
end
def assert_valid_view_parameters(params)
params.keys.each do |key|
raise ArgumentError.new("invalid view parameter: #{key}") unless valid_view_parameters.include?(key.to_s)
end
end
def valid_view_parameters
%w(key startkey startkey_docid endkey endkey_docid limit stale descending skip group group_level reduce include_docs inclusive_end)
end
end
end
end