orchestrate 0.11.2 → 0.11.3
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.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/lib/orchestrate/client.rb +2 -1
- data/lib/orchestrate/search/aggregate_builder.rb +75 -56
- data/lib/orchestrate/version.rb +1 -1
- data/test/orchestrate/search/aggregate_builder_test.rb +53 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b27b7b75267567dba9d38ac452324aab237059a
|
4
|
+
data.tar.gz: 332d9bb074378805436b10eadefc6e3db031f030
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a133d87db07278ee15a52cfbd9dedb271da759e0122bc857c60ae7ab2ad59017f95721b5e2a751b7ecfeaf38860ba335cd57e4984450604e1f8018eff8e9128
|
7
|
+
data.tar.gz: 9e1fc2be1075499e59283723db17b41b7c845c10f19a9d2dbb3c3ee203fc509d909bbb173651b9419cc6367a2ef6d968d50d256afb5c56c8cb56ff3c3d7f8245
|
data/README.md
CHANGED
@@ -428,6 +428,9 @@ end
|
|
428
428
|
|
429
429
|
## Release Notes
|
430
430
|
|
431
|
+
### April 30, 2015: release 0.11.3
|
432
|
+
- Implement `Orchestrate::Search::TopValuesBuilder` to construct top values aggregates.
|
433
|
+
|
431
434
|
### March 27, 2015: release 0.11.2
|
432
435
|
- Implement `Orchestrate::Search::QueryBuilder#kinds` to search events as well as KV items.
|
433
436
|
- Implement `Orchestrate::Search::QueryBuilder#types` to search specific types of events.
|
data/lib/orchestrate/client.rb
CHANGED
@@ -438,6 +438,7 @@ module Orchestrate
|
|
438
438
|
headers = options.fetch(:headers, {})
|
439
439
|
headers['User-Agent'] = "ruby/orchestrate/#{Orchestrate::VERSION}"
|
440
440
|
headers['Accept'] = 'application/json' if method == :get
|
441
|
+
headers['Connection'] = 'close' if method == :head
|
441
442
|
|
442
443
|
http_response = http.send(method) do |request|
|
443
444
|
request.url path, query_string
|
@@ -445,7 +446,7 @@ module Orchestrate
|
|
445
446
|
headers['Content-Type'] = 'application/json'
|
446
447
|
request.body = body.to_json
|
447
448
|
elsif [:patch].include?(method)
|
448
|
-
request.body = body.to_json
|
449
|
+
request.body = body.to_json
|
449
450
|
end
|
450
451
|
headers.each {|header, value| request[header] = value }
|
451
452
|
end
|
@@ -1,15 +1,24 @@
|
|
1
1
|
module Orchestrate::Search
|
2
|
+
module QueryBuilderDelegator
|
3
|
+
extend Forwardable
|
4
|
+
def_delegators :@builder, :options, :order, :limit, :offset, :aggregate, :find, :collection
|
5
|
+
end
|
6
|
+
|
7
|
+
module AggregateBuilderDelegator
|
8
|
+
extend Forwardable
|
9
|
+
def_delegators :@builder, :top_values, :stats, :range, :distance, :time_series
|
10
|
+
end
|
11
|
+
|
2
12
|
# Aggregate Builder object for constructing aggregate params included in a search
|
3
13
|
class AggregateBuilder
|
14
|
+
include QueryBuilderDelegator
|
4
15
|
|
5
|
-
# @return [QueryBuilder]
|
16
|
+
# @return [QueryBuilder]
|
6
17
|
attr_reader :builder
|
7
18
|
|
8
19
|
# @return [Array] Aggregate param arguments
|
9
20
|
attr_reader :aggregates
|
10
21
|
|
11
|
-
extend Forwardable
|
12
|
-
|
13
22
|
# Initialize a new AggregateBuilder object
|
14
23
|
# @param builder [Orchestrate::Search::SearchBuilder] The Search Builder object
|
15
24
|
def initialize(builder)
|
@@ -17,14 +26,6 @@ module Orchestrate::Search
|
|
17
26
|
@aggregates = []
|
18
27
|
end
|
19
28
|
|
20
|
-
def_delegator :@builder, :options
|
21
|
-
def_delegator :@builder, :order
|
22
|
-
def_delegator :@builder, :limit
|
23
|
-
def_delegator :@builder, :offset
|
24
|
-
def_delegator :@builder, :aggregate
|
25
|
-
def_delegator :@builder, :find
|
26
|
-
def_delegator :@builder, :collection
|
27
|
-
|
28
29
|
# @return Pretty-Printed string representation of the AggregateBuilder object
|
29
30
|
def to_s
|
30
31
|
"#<Orchestrate::Search::AggregateBuilder collection=#{collection.name} query=#{builder.query} aggregate=#{to_param}>"
|
@@ -38,6 +39,16 @@ module Orchestrate::Search
|
|
38
39
|
|
39
40
|
# @!group Aggregate Functions
|
40
41
|
|
42
|
+
# @param field_name [#to_s]
|
43
|
+
# @param offset [Integer, nil]
|
44
|
+
# @param limit [Integer, nil]
|
45
|
+
# @return [AggregateBuilder]
|
46
|
+
def top_values(field_name, offset = nil, limit = nil)
|
47
|
+
top_values = TopValuesBuilder.new(self, "#{field_name}", offset, limit)
|
48
|
+
aggregates << top_values
|
49
|
+
top_values
|
50
|
+
end
|
51
|
+
|
41
52
|
# @param field_name [#to_s]
|
42
53
|
# @return [AggregateBuilder]
|
43
54
|
def stats(field_name)
|
@@ -72,17 +83,61 @@ module Orchestrate::Search
|
|
72
83
|
# @!endgroup
|
73
84
|
end
|
74
85
|
|
86
|
+
# Stats Builder object for constructing top-values functions to be included in the aggregate param
|
87
|
+
class TopValuesBuilder
|
88
|
+
include QueryBuilderDelegator
|
89
|
+
include AggregateBuilderDelegator
|
90
|
+
|
91
|
+
# @return [AggregateBuilder]
|
92
|
+
attr_reader :builder
|
93
|
+
|
94
|
+
# @return [#to_s] The field to operate over
|
95
|
+
attr_reader :field_name
|
96
|
+
|
97
|
+
# Initialize a new TopValuesBuilder object
|
98
|
+
# @param builder [AggregateBuilder] The Aggregate Builder object
|
99
|
+
# @param field_name [#to_s] The field to operate over
|
100
|
+
# @param offset [Integer,nil] The zero-based index of the first paged value to retrieve in this aggregation.
|
101
|
+
# If omitted, uses the server default value of zero.
|
102
|
+
# @param limit [Integer,nil] The maximum number of values to retrieve per page of results for this aggregation.
|
103
|
+
# If omitted, uses the server default value of ten.
|
104
|
+
def initialize(builder, field_name, offset=nil, limit=nil)
|
105
|
+
@builder = builder
|
106
|
+
@field_name = field_name
|
107
|
+
if offset.nil? ^ limit.nil?
|
108
|
+
raise ArgumentError, "offset and limit arguments can only be supplied together, or not at all"
|
109
|
+
end
|
110
|
+
@offset = offset
|
111
|
+
@limit = limit
|
112
|
+
end
|
113
|
+
|
114
|
+
# @return [#to_s] Pretty-Printed string representation of the TopValuesBuilder object
|
115
|
+
def to_s
|
116
|
+
"#<Orchestrate::Search::TopValuesBuilder collection=#{collection.name} field_name=#{@field_name} offset=#{@offset} limit=#{@limit}>"
|
117
|
+
end
|
118
|
+
alias :inspect :to_s
|
119
|
+
|
120
|
+
# @return [#to_s] constructed aggregate string clause
|
121
|
+
def to_param
|
122
|
+
if @offset.nil? && @limit.nil?
|
123
|
+
"#{@field_name}:top_values"
|
124
|
+
else
|
125
|
+
"#{@field_name}:top_values:offset:#{@offset}:limit:#{@limit}"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
75
130
|
# Stats Builder object for constructing stats functions to be included in the aggregate param
|
76
131
|
class StatsBuilder
|
77
|
-
|
132
|
+
include QueryBuilderDelegator
|
133
|
+
include AggregateBuilderDelegator
|
134
|
+
|
78
135
|
# @return [AggregateBuilder]
|
79
136
|
attr_reader :builder
|
80
137
|
|
81
138
|
# @return [#to_s] The field to operate over
|
82
139
|
attr_reader :field_name
|
83
140
|
|
84
|
-
extend Forwardable
|
85
|
-
|
86
141
|
# Initialize a new RangeBuilder object
|
87
142
|
# @param builder [AggregateBuilder] The Aggregate Builder object
|
88
143
|
# @param field_name [#to_s]
|
@@ -91,18 +146,6 @@ module Orchestrate::Search
|
|
91
146
|
@field_name = field_name
|
92
147
|
end
|
93
148
|
|
94
|
-
def_delegator :@builder, :options
|
95
|
-
def_delegator :@builder, :order
|
96
|
-
def_delegator :@builder, :limit
|
97
|
-
def_delegator :@builder, :offset
|
98
|
-
def_delegator :@builder, :aggregate
|
99
|
-
def_delegator :@builder, :find
|
100
|
-
def_delegator :@builder, :stats
|
101
|
-
def_delegator :@builder, :range
|
102
|
-
def_delegator :@builder, :distance
|
103
|
-
def_delegator :@builder, :time_series
|
104
|
-
def_delegator :@builder, :collection
|
105
|
-
|
106
149
|
# @return Pretty-Printed string representation of the StatsBuilder object
|
107
150
|
def to_s
|
108
151
|
"#<Orchestrate::Search::StatsBuilder collection=#{collection.name} field_name=#{field_name}>"
|
@@ -117,6 +160,8 @@ module Orchestrate::Search
|
|
117
160
|
|
118
161
|
# Range Builder object for constructing range functions to be included in the aggregate param
|
119
162
|
class RangeBuilder
|
163
|
+
include QueryBuilderDelegator
|
164
|
+
include AggregateBuilderDelegator
|
120
165
|
|
121
166
|
# @return [AggregateBuilder]
|
122
167
|
attr_reader :builder
|
@@ -125,9 +170,7 @@ module Orchestrate::Search
|
|
125
170
|
attr_reader :field_name
|
126
171
|
|
127
172
|
# @return [#to_s] The range sets
|
128
|
-
attr_reader :ranges
|
129
|
-
|
130
|
-
extend Forwardable
|
173
|
+
attr_reader :ranges
|
131
174
|
|
132
175
|
# Initialize a new RangeBuilder object
|
133
176
|
# @param builder [AggregateBuilder] The Aggregate Builder object
|
@@ -138,18 +181,6 @@ module Orchestrate::Search
|
|
138
181
|
@ranges = ''
|
139
182
|
end
|
140
183
|
|
141
|
-
def_delegator :@builder, :options
|
142
|
-
def_delegator :@builder, :order
|
143
|
-
def_delegator :@builder, :limit
|
144
|
-
def_delegator :@builder, :offset
|
145
|
-
def_delegator :@builder, :aggregate
|
146
|
-
def_delegator :@builder, :find
|
147
|
-
def_delegator :@builder, :stats
|
148
|
-
def_delegator :@builder, :range
|
149
|
-
def_delegator :@builder, :distance
|
150
|
-
def_delegator :@builder, :time_series
|
151
|
-
def_delegator :@builder, :collection
|
152
|
-
|
153
184
|
# @return Pretty-Printed string representation of the RangeBuilder object
|
154
185
|
def to_s
|
155
186
|
"#<Orchestrate::Search::RangeBuilder collection=#{collection.name} field_name=#{field_name} ranges=#{ranges}>"
|
@@ -201,6 +232,8 @@ module Orchestrate::Search
|
|
201
232
|
|
202
233
|
# Time Series Builder object for constructing time series functions for the aggregate param
|
203
234
|
class TimeSeriesBuilder
|
235
|
+
include QueryBuilderDelegator
|
236
|
+
include AggregateBuilderDelegator
|
204
237
|
|
205
238
|
# @return [AggregateBuilder]
|
206
239
|
attr_reader :builder
|
@@ -211,8 +244,6 @@ module Orchestrate::Search
|
|
211
244
|
# @return [#to_s] The interval of time for the TimeSeries function
|
212
245
|
attr_reader :interval
|
213
246
|
|
214
|
-
extend Forwardable
|
215
|
-
|
216
247
|
# Initialize a new TimeSeriesBuilder object
|
217
248
|
# @param builder [AggregateBuilder] The Aggregate Builder object
|
218
249
|
# @param field_name [#to_s] The field to operate over
|
@@ -223,18 +254,6 @@ module Orchestrate::Search
|
|
223
254
|
@time_zone = nil
|
224
255
|
end
|
225
256
|
|
226
|
-
def_delegator :@builder, :options
|
227
|
-
def_delegator :@builder, :order
|
228
|
-
def_delegator :@builder, :limit
|
229
|
-
def_delegator :@builder, :offset
|
230
|
-
def_delegator :@builder, :aggregate
|
231
|
-
def_delegator :@builder, :find
|
232
|
-
def_delegator :@builder, :stats
|
233
|
-
def_delegator :@builder, :range
|
234
|
-
def_delegator :@builder, :distance
|
235
|
-
def_delegator :@builder, :time_series
|
236
|
-
def_delegator :@builder, :collection
|
237
|
-
|
238
257
|
# @return Pretty-Printed string representation of the TimeSeriesBuilder object
|
239
258
|
def to_s
|
240
259
|
"#<Orchestrate::Search::TimeSeriesBuilder collection=#{collection.name} field_name=#{field_name} interval=#{interval} time_zone=#{@time_zone}>"
|
@@ -300,4 +319,4 @@ module Orchestrate::Search
|
|
300
319
|
self
|
301
320
|
end
|
302
321
|
end
|
303
|
-
end
|
322
|
+
end
|
data/lib/orchestrate/version.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class AggregateBuilderTest < MiniTest::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
collection = OpenStruct.new(name: 'users')
|
6
|
+
@query_builder = Orchestrate::Search::QueryBuilder.new(collection, '*')
|
7
|
+
@builder = Orchestrate::Search::AggregateBuilder.new(@query_builder)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_top_values_aggregate
|
11
|
+
top_values = @builder.top_values('name')
|
12
|
+
assert_equal 'name:top_values', top_values.to_param
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_top_values_aggregate_with_offset_limit
|
16
|
+
top_values = @builder.top_values('name', 0, 10)
|
17
|
+
assert_equal 'name:top_values:offset:0:limit:10', top_values.to_param
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_top_values_aggregate_with_offset
|
21
|
+
assert_raises(ArgumentError) do
|
22
|
+
@builder.top_values('name', 0)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_top_values_aggregate_with_limit
|
27
|
+
assert_raises(ArgumentError) do
|
28
|
+
@builder.top_values('name', nil, 10)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_top_values_aggregate_to_s
|
33
|
+
top_values = @builder.top_values('name', 3, 4)
|
34
|
+
assert_equal '#<Orchestrate::Search::TopValuesBuilder collection=users field_name=name offset=3 limit=4>', top_values.to_s
|
35
|
+
end
|
36
|
+
|
37
|
+
# TODO: abstract delegator assertions into a re-usable helper
|
38
|
+
def test_top_values_delegators
|
39
|
+
# this test asserts that the top values aggregator delegates all expected
|
40
|
+
# query builder and aggregate builder methods
|
41
|
+
builder = MiniTest::Mock.new
|
42
|
+
top_values = Orchestrate::Search::TopValuesBuilder.new(builder, "field_name")
|
43
|
+
Orchestrate::Search::QueryBuilderDelegator.public_instance_methods.each do |m|
|
44
|
+
builder.expect(m, true)
|
45
|
+
top_values.send(m)
|
46
|
+
end
|
47
|
+
Orchestrate::Search::AggregateBuilderDelegator.public_instance_methods.each do |m|
|
48
|
+
builder.expect(m, true)
|
49
|
+
top_values.send(m)
|
50
|
+
end
|
51
|
+
builder.verify
|
52
|
+
end
|
53
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orchestrate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Lyon
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2015-
|
15
|
+
date: 2015-04-30 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: faraday
|
@@ -170,6 +170,7 @@ files:
|
|
170
170
|
- test/orchestrate/key_value_test.rb
|
171
171
|
- test/orchestrate/ref_test.rb
|
172
172
|
- test/orchestrate/relations_test.rb
|
173
|
+
- test/orchestrate/search/aggregate_builder_test.rb
|
173
174
|
- test/orchestrate/search/query_builder_test.rb
|
174
175
|
- test/test_helper.rb
|
175
176
|
homepage: https://github.com/orchestrate-io/orchestrate-ruby
|
@@ -218,5 +219,6 @@ test_files:
|
|
218
219
|
- test/orchestrate/key_value_test.rb
|
219
220
|
- test/orchestrate/ref_test.rb
|
220
221
|
- test/orchestrate/relations_test.rb
|
222
|
+
- test/orchestrate/search/aggregate_builder_test.rb
|
221
223
|
- test/orchestrate/search/query_builder_test.rb
|
222
224
|
- test/test_helper.rb
|