filter.rb
1.29 KB
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
require_relative '../nested_helper/environment'
module Filter
def self.included base
base.extend ClassMethods
base.send :include, InstanceMethods
end
module ClassMethods
def filter options={}
result_filter = {}
result_filter[:indices] = {:index => self.index_name, :no_match_filter => "none" }
result_filter[:indices][:filter] = { :bool => self.filter_bool(options) }
result_filter
end
def filter_bool options={}
environment = options[:environment].presence
user = options[:user].presence
result_filter = {}
result_filter[:must] = [ NestedEnvironment::filter(environment) ]
return result_filter if user and user.person.is_admin?
self.nested_filter.each {|filter| result_filter[:must].append(filter)} if self.respond_to? :nested_filter
self.must.each {|filter| result_filter[:must].append(filter) } if self.respond_to? :must
result_filter[:should] = self.should if self.respond_to? :should
result_filter[:must_not] = self.must_not if self.respond_to? :must_not
result_filter
end
def filter_category selected_categories
{
query: {
terms: { category_ids: selected_categories }
}
}
end
end
module InstanceMethods
end
end