orchestrate 0.11.2 → 0.11.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce3fe8f2f327ee80634c2a1cf9ee17a468db30eb
4
- data.tar.gz: 671ec20412081c443941b6f4ab07e26ba2086d12
3
+ metadata.gz: 3b27b7b75267567dba9d38ac452324aab237059a
4
+ data.tar.gz: 332d9bb074378805436b10eadefc6e3db031f030
5
5
  SHA512:
6
- metadata.gz: 6f1b8460ad20f8b779e738374b5276c4ee0af7e415826d8a57a37769313430f565c436c2f48a0a00ead3794a20aa5a1b8307dd566de772efd0d48afa62e0ebc7
7
- data.tar.gz: 39d65b0dba9b87decc41f1e9107b6bc352935ce81fb38873c8ed8aced33aa8170754fca34a2421eb3be7caabca0cb4d87c72eb3a96e7363bf4875b076ce6bf43
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.
@@ -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
@@ -1,4 +1,4 @@
1
1
  module Orchestrate
2
2
  # @return [String] The version number of the Orchestrate Gem
3
- VERSION = "0.11.2"
3
+ VERSION = "0.11.3"
4
4
  end
@@ -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.2
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-03-27 00:00:00.000000000 Z
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