ruby-druid 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +9 -1
- data/lib/druid/console.rb +1 -1
- data/lib/druid/filter.rb +21 -16
- data/lib/druid/query.rb +2 -2
- data/ruby-druid.gemspec +1 -1
- data/spec/lib/query_spec.rb +11 -1
- metadata +8 -2
data/README.md
CHANGED
@@ -187,7 +187,7 @@ Druid::Query.new('service/source').filter{!dimension.eq(1)}
|
|
187
187
|
|
188
188
|
#### Inclusion Filter
|
189
189
|
|
190
|
-
This filter creates a set of equals filters in an
|
190
|
+
This filter creates a set of equals filters in an or filter.
|
191
191
|
|
192
192
|
```ruby
|
193
193
|
Druid::Query.new('service/source').filter{dimension.in(1,2,3)}
|
@@ -204,6 +204,14 @@ Druid::Query.new('service/source').time_series().long_sum([:aggregate1]).filter{
|
|
204
204
|
Druid::Query.new('service/source').time_series().long_sum([:aggregate1]).filter{coordinates.in_circ [[53.0,13.0], 5.0]}
|
205
205
|
```
|
206
206
|
|
207
|
+
#### Exclusion Filter
|
208
|
+
|
209
|
+
This filter creates a set of not-equals fitlers in an and filter.
|
210
|
+
|
211
|
+
```ruby
|
212
|
+
Druid::Query.new('service/source').filter{dimension.nin(1,2,3)}
|
213
|
+
```
|
214
|
+
|
207
215
|
#### Hash syntax
|
208
216
|
|
209
217
|
Sometimes it can be useful to use a hash syntax for filtering
|
data/lib/druid/console.rb
CHANGED
@@ -69,6 +69,6 @@ module Druid
|
|
69
69
|
client.query(@source)
|
70
70
|
end
|
71
71
|
|
72
|
-
def_delegators :query, :group_by, :sum, :long_sum, :double_sum, :postagg, :interval, :granularity, :filter, :time_series, :topn
|
72
|
+
def_delegators :query, :group_by, :sum, :long_sum, :double_sum, :count, :postagg, :interval, :granularity, :filter, :time_series, :topn
|
73
73
|
end
|
74
74
|
end
|
data/lib/druid/filter.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Druid
|
2
2
|
class Filter
|
3
3
|
(instance_methods + private_instance_methods).each do |method|
|
4
|
-
unless method.to_s =~ /^(__|instance_eval|instance_exec|initialize|object_id|raise|puts|inspect)/ || method.to_s =~ /\?/
|
4
|
+
unless method.to_s =~ /^(__|instance_eval|instance_exec|initialize|object_id|raise|puts|inspect|send)/ || method.to_s =~ /\?/
|
5
5
|
undef_method method
|
6
6
|
end
|
7
7
|
end
|
@@ -13,7 +13,7 @@ module Druid
|
|
13
13
|
|
14
14
|
class FilterParameter
|
15
15
|
(instance_methods + private_instance_methods).each do |method|
|
16
|
-
unless method.to_s =~ /^(__|instance_eval|instance_exec|initialize|object_id|raise|puts|inspect|class)/ || method.to_s =~ /\?/
|
16
|
+
unless method.to_s =~ /^(__|instance_eval|instance_exec|initialize|object_id|raise|puts|inspect|class|send)/ || method.to_s =~ /\?/
|
17
17
|
undef_method method
|
18
18
|
end
|
19
19
|
end
|
@@ -55,7 +55,6 @@ module Druid
|
|
55
55
|
|
56
56
|
alias :'==' :eq
|
57
57
|
|
58
|
-
|
59
58
|
def neq(value)
|
60
59
|
return !self.in(value)
|
61
60
|
end
|
@@ -64,20 +63,12 @@ module Druid
|
|
64
63
|
|
65
64
|
def in(*args)
|
66
65
|
values = args.flatten
|
67
|
-
|
68
|
-
|
69
|
-
if (values.length == 1)
|
70
|
-
return self.eq(values[0])
|
71
|
-
end
|
66
|
+
filter_multiple(values, 'or', :eq)
|
67
|
+
end
|
72
68
|
|
73
|
-
|
74
|
-
values
|
75
|
-
|
76
|
-
param = FilterDimension.new(@name)
|
77
|
-
param.eq value
|
78
|
-
filter_or.add param
|
79
|
-
end
|
80
|
-
filter_or
|
69
|
+
def nin(*args)
|
70
|
+
values = args.flatten
|
71
|
+
filter_multiple(values, 'and', :neq)
|
81
72
|
end
|
82
73
|
|
83
74
|
def &(other)
|
@@ -145,6 +136,20 @@ module Druid
|
|
145
136
|
end
|
146
137
|
hash
|
147
138
|
end
|
139
|
+
|
140
|
+
private
|
141
|
+
|
142
|
+
def filter_multiple(values, operator, method)
|
143
|
+
raise 'Values cannot be empty' if values.empty?
|
144
|
+
return self.send(method, values[0]) if values.length == 1
|
145
|
+
|
146
|
+
filter = FilterOperator.new(operator, true)
|
147
|
+
values.each do |value|
|
148
|
+
raise 'Value cannot be a parameter' if value.is_a?(FilterParameter)
|
149
|
+
filter.add(FilterDimension.new(@name).send(method, value))
|
150
|
+
end
|
151
|
+
filter
|
152
|
+
end
|
148
153
|
end
|
149
154
|
|
150
155
|
class FilterOperator < FilterParameter
|
data/lib/druid/query.rb
CHANGED
@@ -68,9 +68,9 @@ module Druid
|
|
68
68
|
self
|
69
69
|
end
|
70
70
|
|
71
|
-
[:long_sum, :double_sum].each do |method_name|
|
71
|
+
[:long_sum, :double_sum, :count].each do |method_name|
|
72
72
|
agg_type = method_name.to_s.split('_')
|
73
|
-
agg_type[1].capitalize!
|
73
|
+
agg_type[1].capitalize! if agg_type.length > 1
|
74
74
|
agg_type = agg_type.join
|
75
75
|
|
76
76
|
define_method method_name do |*metrics|
|
data/ruby-druid.gemspec
CHANGED
data/spec/lib/query_spec.rb
CHANGED
@@ -315,6 +315,16 @@ end
|
|
315
315
|
"type" => "or"}
|
316
316
|
end
|
317
317
|
|
318
|
+
it 'creates a nin statement with and filter' do
|
319
|
+
@query.filter{a.nin [1,2,3]}
|
320
|
+
JSON.parse(@query.to_json)['filter'].should == {"fields" => [
|
321
|
+
{"field"=>{"type"=>"selector", "dimension"=>"a", "value"=>1},"type" => "not"},
|
322
|
+
{"field"=>{"type"=>"selector", "dimension"=>"a", "value"=>2},"type" => "not"},
|
323
|
+
{"field"=>{"type"=>"selector", "dimension"=>"a", "value"=>3},"type" => "not"}
|
324
|
+
],
|
325
|
+
"type" => "and"}
|
326
|
+
end
|
327
|
+
|
318
328
|
it 'creates a javascript with > filter' do
|
319
329
|
@query.filter{a > 100}
|
320
330
|
JSON.parse(@query.to_json)['filter'].should == {
|
@@ -366,7 +376,7 @@ end
|
|
366
376
|
end
|
367
377
|
|
368
378
|
it 'does not accept in with empty array' do
|
369
|
-
expect { @query.filter{a.in []} }.to raise_error "
|
379
|
+
expect { @query.filter{a.in []} }.to raise_error "Values cannot be empty"
|
370
380
|
end
|
371
381
|
|
372
382
|
it 'does raise on invalid filter statement' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-druid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: zk
|
@@ -86,12 +86,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
86
86
|
- - ! '>='
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: '0'
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
hash: -3649172061711800760
|
89
92
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
93
|
none: false
|
91
94
|
requirements:
|
92
95
|
- - ! '>='
|
93
96
|
- !ruby/object:Gem::Version
|
94
97
|
version: '0'
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
hash: -3649172061711800760
|
95
101
|
requirements: []
|
96
102
|
rubyforge_project:
|
97
103
|
rubygems_version: 1.8.25
|