orchestrate 0.11.1 → 0.11.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4d0d0f4b8f59826a8f9dbba17f58a94d74a56051
4
- data.tar.gz: 43ad3fb8c92dddd44e4f4757b94b57c48a142f06
3
+ metadata.gz: ce3fe8f2f327ee80634c2a1cf9ee17a468db30eb
4
+ data.tar.gz: 671ec20412081c443941b6f4ab07e26ba2086d12
5
5
  SHA512:
6
- metadata.gz: 7e114a8889c720f8cb505c39fa32e5526f7ad8e47f60cb6acbacd9175e963692c1d2f19cf07388c5482d2098e67e6a44d21b0fc78afe8adb18e22b1d1e342b03
7
- data.tar.gz: bd4bb4b0a7720b99a906247f6e8eb7d8ec1dfd7516cc7996418e6a09912f0ab435c9e66f6a683967f0ee0b9f553142f6fd8b028876c3ce83e9c50f50b5090960
6
+ metadata.gz: 6f1b8460ad20f8b779e738374b5276c4ee0af7e415826d8a57a37769313430f565c436c2f48a0a00ead3794a20aa5a1b8307dd566de772efd0d48afa62e0ebc7
7
+ data.tar.gz: 39d65b0dba9b87decc41f1e9107b6bc352935ce81fb38873c8ed8aced33aa8170754fca34a2421eb3be7caabca0cb4d87c72eb3a96e7363bf4875b076ce6bf43
data/README.md CHANGED
@@ -4,7 +4,7 @@ Orchestrate API for Ruby
4
4
 
5
5
  Ruby client interface for the [Orchestrate.io](http://orchestrate.io) REST API.
6
6
 
7
- [rDoc Documentation](http://rdoc.info/gems/orchestrate/frames)
7
+ [rDoc Documentation](http://rdoc.info/gems/orchestrate)
8
8
 
9
9
  ## Getting Started
10
10
 
@@ -140,6 +140,21 @@ products.search("*").aggregate # Start the search query and aggregate param bui
140
140
  .each_aggregate # return enumerator for iterating over each aggregate result
141
141
  ```
142
142
 
143
+ ### Events
144
+ ```ruby
145
+ steve = users['Steve']
146
+
147
+ # create new events
148
+ steve.events['wall_post'] << { text: "Hello!" }
149
+ steve.events['activities'] << { text: "first post" }
150
+
151
+ # search for events
152
+ users.search('first post').kinds('event').find
153
+
154
+ # search for 'wall_post' events
155
+ users.search('Hello').kinds('event').types('wall_post').find
156
+ ```
157
+
143
158
  ### Method Client use
144
159
 
145
160
  #### Create a Client
@@ -310,9 +325,10 @@ response.aggregates # return aggregate results
310
325
 
311
326
  ### Examples and Documentation
312
327
 
313
- There are more examples at [Orchestrate's API Documentation][apidoc] and documentation in the [rdoc][].
328
+ There are more examples and documentation in [Orchestrate's API Documentation][apidoc] and the [rdoc][rdoc].
314
329
 
315
330
  [apidoc]: http://orchestrate.io/api/version
331
+ [rdoc]: http://rdoc.info/gems/orchestrate
316
332
 
317
333
  ## Swapping out the HTTP back end
318
334
 
@@ -412,6 +428,10 @@ end
412
428
 
413
429
  ## Release Notes
414
430
 
431
+ ### March 27, 2015: release 0.11.2
432
+ - Implement `Orchestrate::Search::QueryBuilder#kinds` to search events as well as KV items.
433
+ - Implement `Orchestrate::Search::QueryBuilder#types` to search specific types of events.
434
+
415
435
  ### February 17, 2015: release 0.11.1
416
436
  - Implement `Search::TimeSeriesBuilder#time_zone` to designate time zone when calculating time series bucket boundaries.
417
437
 
@@ -419,7 +439,7 @@ end
419
439
  - **BACKWARDS-INCOMPATIBLE** `Orchestrate::Collection` searches require `#find` method at the end of the method call/chain. Example: `users.search('foo').find`.
420
440
  - Implement `Orchestrate::Search` module, refactor functionality of prior `Orchestrate::Collection::SearchResults`.
421
441
  - Implement results enumeration & request firing functionality in prior `Orchestrate::Collection::SearchResults` to `Orchestrate::Search::Results`
422
- - Implement `Search::QueryBuilder` to construct `Collection` search queries.
442
+ - Implement `Search::QueryBuilder` to construct `Collection` search queries.
423
443
  - Implement `Search::AggregateBuilder` to construct aggregate params on `Collection` search queries.
424
444
  - Implement `Search::StatsBuilder`, `Search::RangeBuilder`, `Search::DistanceBuilder`, & `Search::TimeSeriesBuilder` to construct aggregate function clauses for aggregate params.
425
445
  - Implement `Search::AggregateResult` objects to repesent aggregate results returned from `Collection` search.
@@ -23,8 +23,8 @@ module Orchestrate
23
23
  def self.from_listing(stem, listing, response=nil)
24
24
  event = new(stem)
25
25
  event.value = listing['value']
26
- event.instance_variable_set(:@timestamp, listing['timestamp'])
27
- event.instance_variable_set(:@ordinal, listing['ordinal'])
26
+ event.instance_variable_set(:@timestamp, listing['path']['timestamp'])
27
+ event.instance_variable_set(:@ordinal, listing['path']['ordinal'])
28
28
  event.instance_variable_set(:@ref, listing['path']['ref'])
29
29
  event.instance_variable_set(:@last_request_time, response.request_time) if response
30
30
  event
@@ -4,15 +4,22 @@ module Orchestrate::Search
4
4
  # @return [Collection] The collection this object will search.
5
5
  attr_reader :collection
6
6
 
7
- # @return [#to_s] The Lucene Query String given as the search query.
8
- attr_reader :query
9
-
10
7
  # Initialize a new SearchBuilder object
11
8
  # @param collection [Orchestrate::Collection] The collection to search.
12
9
  # @param query [#to_s] The Lucene Query to perform.
13
10
  def initialize(collection, query)
14
11
  @collection = collection
15
12
  @query = query
13
+ @kinds = []
14
+ @types = []
15
+ end
16
+
17
+ # @return [#to_s] The Lucene Query String.
18
+ def query
19
+ query = "(#{@query})"
20
+ query << " AND @path.kind:(#{@kinds.join(' ')})" if @kinds.any?
21
+ query << " AND @path.type:(#{@types.join(' ')})" if @types.any?
22
+ query
16
23
  end
17
24
 
18
25
  # @return Pretty-Printed string representation of the Search object
@@ -37,7 +44,7 @@ module Orchestrate::Search
37
44
  self
38
45
  end
39
46
 
40
- # Sets the limit for the query to Orchestrate, so we don't ask for more than is needed.
47
+ # Sets the limit for the query to Orchestrate, so we don't ask for more than is needed.
41
48
  # Does not fire a request.
42
49
  # @overload limit
43
50
  # @return [Integer, nil] The number of items to retrieve. Nil is equivalent to zero.
@@ -69,6 +76,22 @@ module Orchestrate::Search
69
76
  end
70
77
  end
71
78
 
79
+ # Sets the 'kind' to search.
80
+ # @param kinds [Array<String>] The orchestrate kinds to be included ('item' or 'event').
81
+ # @return [QueryBuilder] self.
82
+ def kinds(*kinds)
83
+ @kinds = kinds
84
+ self
85
+ end
86
+
87
+ # Sets the event types to search.
88
+ # @param types [Array<String>] The orchestrate event types to search (e.g. 'activities', 'wall_posts')
89
+ # @return [QueryBuilder] self.
90
+ def types(*types)
91
+ @types = types
92
+ self
93
+ end
94
+
72
95
  # @return [AggregateBuilder] An AggregateBuilder object to construct aggregate search params
73
96
  def aggregate
74
97
  options[:aggregate] ||= AggregateBuilder.new(self)
@@ -80,4 +103,4 @@ module Orchestrate::Search
80
103
  Results.new(collection, query, options)
81
104
  end
82
105
  end
83
- end
106
+ end
@@ -47,7 +47,15 @@ module Orchestrate::Search
47
47
  raise Orchestrate::ResultsNotReady.new if collection.app.inside_parallel?
48
48
  loop do
49
49
  @response.results.each do |listing|
50
- yield [ listing['score'], Orchestrate::KeyValue.from_listing(collection, listing, @response) ]
50
+ case listing['path']['kind']
51
+ when 'event'
52
+ kv = collection.stub(listing['key'])
53
+ event_type = Orchestrate::EventType.new(kv, listing['type'])
54
+ event = Orchestrate::Event.from_listing(event_type, listing, @response)
55
+ yield [listing['score'], event]
56
+ else
57
+ yield [listing['score'], Orchestrate::KeyValue.from_listing(collection, listing, @response)]
58
+ end
51
59
  end
52
60
  break unless @response.next_link
53
61
  @response = @response.next_results
@@ -1,4 +1,4 @@
1
1
  module Orchestrate
2
2
  # @return [String] The version number of the Orchestrate Gem
3
- VERSION = "0.11.1"
3
+ VERSION = "0.11.2"
4
4
  end
data/orchestrate.gemspec CHANGED
@@ -5,8 +5,8 @@ require 'orchestrate/version'
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'orchestrate'
7
7
  s.version = Orchestrate::VERSION
8
- s.authors = ['Matthew Lyon', 'Justin Mecham', 'James Carrasquer', 'Eric Johnson']
9
- s.email = ['matthew@lyonheart.us', 'justin@mecham.me', 'jimcar@aracnet.com', 'erjohnson.pdx@gmail.com']
8
+ s.authors = ['Matthew Lyon', 'Justin Mecham', 'James Carrasquer', 'Eric Johnson', 'Daniel Reverri']
9
+ s.email = ['matthew@lyonheart.us', 'justin@mecham.me', 'jimcar@aracnet.com', 'erjohnson.pdx@gmail.com', 'reverri@gmail.com']
10
10
  s.summary = 'Ruby client for Orchestrate.io'
11
11
  s.description = 'Client for the Orchestrate REST API'
12
12
  s.homepage = 'https://github.com/orchestrate-io/orchestrate-ruby'
@@ -24,4 +24,4 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency "typhoeus"
25
25
  s.add_development_dependency "em-http-request"
26
26
  s.add_development_dependency "em-synchrony"
27
- end
27
+ end
@@ -5,7 +5,7 @@ class CollectionAggregates < MiniTest::Unit::TestCase
5
5
  @app, @stubs = make_application({parallel:true})
6
6
  @items = @app[:items]
7
7
 
8
- @query = "foo"
8
+ @query = '(foo)'
9
9
  @stats = [{
10
10
  "aggregate_kind" => "stats",
11
11
  "field_name" => "value.bar",
@@ -109,7 +109,7 @@ class CollectionAggregates < MiniTest::Unit::TestCase
109
109
  end
110
110
 
111
111
  def test_basic_distance_aggregate
112
- @query = "foo:NEAR:{lat:12.3 lon:56.7 dist:100km}"
112
+ @query = "(foo:NEAR:{lat:12.3 lon:56.7 dist:100km})"
113
113
  results = @items.near("foo", 12.3, 56.7, 100).aggregate.distance("bar").between(0,1).find
114
114
  results.each_aggregate
115
115
  assert_equal @distance, results.aggregates
@@ -5,21 +5,21 @@ class CollectionGeoQueriesTest < MiniTest::Unit::TestCase
5
5
  @app, @stubs = make_application({parallel:true})
6
6
  @items = @app[:items]
7
7
 
8
- @near_query = "location:NEAR:{lat:12 lon:56 dist:1km}"
9
- @in_query = "location:IN:{north:12 east:57 south:12 west:56}"
8
+ @near_query = "(location:NEAR:{lat:12 lon:56 dist:1km})"
9
+ @in_query = "(location:IN:{north:12 east:57 south:12 west:56})"
10
10
  @total = 110
11
11
 
12
12
  @make_listing = lambda{|i| make_kv_listing(:items, key: "item-#{i}", reftime: nil, score: @total-i/@total*5.0) }
13
13
  @handle_geo = lambda do |query|
14
14
  case query
15
- when "location:NEAR:{lat:12 lon:56 dist:1km}"
15
+ when "(location:NEAR:{lat:12 lon:56 dist:1km})"
16
16
  { "results" => 10.times.map{|i| @make_listing.call(i)}, "count" => 10, "total_count" => 10 }
17
- when "location:IN:{north:12 east:57 south:12 west:56}"
17
+ when "(location:IN:{north:12 east:57 south:12 west:56})"
18
18
  { "results" => 12.times.map{|i| @make_listing.call(i)}, "count" => 12, "total_count" => 12 }
19
- when "location:NEAR:{lat:12 lon:56 dist:1km}&sort=location:distance:asc"
19
+ when "(location:NEAR:{lat:12 lon:56 dist:1km}&sort=location:distance:asc)"
20
20
  { "results" => 10.times.map{|i| @make_listing.call(i)}, "count" => 10, "total_count" => 10 }
21
21
  else
22
- raise ArgumentError.new("unexpected query: #{env.params['query']}")
22
+ raise ArgumentError.new("unexpected query: #{query}")
23
23
  end
24
24
  end
25
25
 
@@ -86,4 +86,4 @@ class CollectionGeoQueriesTest < MiniTest::Unit::TestCase
86
86
  assert_nil item[1].reftime
87
87
  end
88
88
  end
89
- end
89
+ end
@@ -1,11 +1,12 @@
1
- require "test_helper"
1
+ require 'test_helper'
2
+ require 'cgi'
2
3
 
3
4
  class CollectionSearchingTest < MiniTest::Unit::TestCase
4
5
  def setup
5
6
  @app, @stubs = make_application({parallel:true})
6
7
  @items = @app[:items]
7
8
 
8
- @query = "foo"
9
+ @query = '(foo)'
9
10
  @limit = 100
10
11
  @total = 110
11
12
 
@@ -14,7 +15,7 @@ class CollectionSearchingTest < MiniTest::Unit::TestCase
14
15
  case offset
15
16
  when nil
16
17
  { "results" => 100.times.map{|i| @make_listing.call(i)}, "count" => 100, "total_count" => @total,
17
- "next" => "/v0/items?query=foo&offset=100&limit=100"}
18
+ "next" => "/v0/items?query=#{CGI.escape(@query)}&offset=100&limit=100"}
18
19
  when "100"
19
20
  { "results" => 10.times.map{|i| @make_listing.call(i+100)}, "count" => 10, "total_count" => @total }
20
21
  else
@@ -97,4 +98,55 @@ class CollectionSearchingTest < MiniTest::Unit::TestCase
97
98
  assert_equal @total, items.force.size
98
99
  end
99
100
 
101
+ def test_search_with_events
102
+ body = '{
103
+ "count": 2,
104
+ "total_count": 2,
105
+ "results": [
106
+ {
107
+ "path": {
108
+ "collection": "users",
109
+ "kind": "item",
110
+ "key": "sjkaliski@gmail.com",
111
+ "ref": "74c22b1736b9d50e",
112
+ "reftime": 1424473968410
113
+ },
114
+ "value": {
115
+ "name": "Steve Kaliski",
116
+ "hometown": "New York, NY",
117
+ "twitter": "@stevekaliski"
118
+ },
119
+ "score": 3.7323708534240723,
120
+ "reftime": 1424473968410
121
+ },
122
+ {
123
+ "path": {
124
+ "collection": "users",
125
+ "kind": "event",
126
+ "key": "byrd@bowery.io",
127
+ "type": "activities",
128
+ "timestamp": 1412787145997,
129
+ "ordinal": 406893558185357300,
130
+ "ref": "82eafab14dc84ed3",
131
+ "reftime": 1412787145997,
132
+ "ordinal_str": "05a593890d087000"
133
+ },
134
+ "value": {
135
+ "activity": "followed",
136
+ "user": "sjkaliski@gmail.com",
137
+ "userName": "Steve Kaliski"
138
+ },
139
+ "score": 2.331388473510742,
140
+ "reftime": 1412787145997
141
+ }
142
+ ]
143
+ }'
144
+ @stubs.get('/v0/users') do
145
+ [200, { 'Content-Type' => 'application/json' }, body]
146
+ end
147
+ results = @app[:users].search('*').find.each.map { |d| d[1] }
148
+ assert_equal 2, results.count
149
+ assert results[0].is_a? Orchestrate::KeyValue
150
+ assert results[1].is_a? Orchestrate::Event
151
+ end
100
152
  end
@@ -1,11 +1,12 @@
1
- require "test_helper"
1
+ require 'test_helper'
2
+ require 'cgi'
2
3
 
3
4
  class CollectionSortingTest < MiniTest::Unit::TestCase
4
5
  def setup
5
6
  @app, @stubs = make_application({parallel:true})
6
7
  @items = @app[:items]
7
8
 
8
- @query = "foo"
9
+ @query = '(foo)'
9
10
  @limit = 100
10
11
  @total = 110
11
12
 
@@ -14,7 +15,7 @@ class CollectionSortingTest < MiniTest::Unit::TestCase
14
15
  case offset
15
16
  when nil
16
17
  { "results" => 100.times.map{|i| @make_listing.call(i)}, "count" => 100, "total_count" => @total,
17
- "next" => "/v0/items?query=foo&offset=100&limit=100"}
18
+ "next" => "/v0/items?query=#{CGI.escape(@query)}&offset=100&limit=100"}
18
19
  when "100"
19
20
  { "results" => 10.times.map{|i| @make_listing.call(i+100)}, "count" => 10, "total_count" => @total }
20
21
  else
@@ -240,25 +240,25 @@ class EventTest < MiniTest::Unit::TestCase
240
240
  assert_nil tweets <=> bar.events['tweets']
241
241
 
242
242
  ts = (Time.now.to_f * 1000).floor
243
- make_tweet_1 = lambda { Orchestrate::Event.from_listing(tweets, {"path" => {"ref" => make_ref}, "timestamp" => ts, "ordinal" => 10}) }
243
+ make_tweet_1 = lambda { Orchestrate::Event.from_listing(tweets, {"path" => {"ref" => make_ref, "timestamp" => ts, "ordinal" => 10}}) }
244
244
  tweet1 = make_tweet_1.call
245
245
  assert_equal tweet1, make_tweet_1.call
246
246
  assert tweet1.eql?(make_tweet_1.call)
247
247
  assert_equal 0, tweet1 <=> make_tweet_1.call
248
248
 
249
- tweet2 = Orchestrate::Event.from_listing(tweets, {"path" => {"ref" => make_ref}, "timestamp" => ts, "ordinal" => 11})
249
+ tweet2 = Orchestrate::Event.from_listing(tweets, {"path" => {"ref" => make_ref, "timestamp" => ts, "ordinal" => 11}})
250
250
  refute_equal tweet1, tweet2
251
251
  refute tweet1.eql?(tweet2)
252
252
  assert_equal 1, tweet1 <=> tweet2
253
253
  assert_equal(-1, tweet2 <=> tweet1)
254
254
 
255
- tweet3 = Orchestrate::Event.from_listing(tweets, {"path" => {"ref" => make_ref}, "timestamp" => ts - 1, "ordinal" => 2})
255
+ tweet3 = Orchestrate::Event.from_listing(tweets, {"path" => {"ref" => make_ref, "timestamp" => ts - 1, "ordinal" => 2}})
256
256
  assert_equal(1, tweet1 <=> tweet3)
257
257
  assert_equal(-1, tweet3 <=> tweet1)
258
258
  assert_equal(1, tweet2 <=> tweet3)
259
259
  assert_equal(-1, tweet3 <=> tweet2)
260
260
 
261
- checkin = Orchestrate::Event.from_listing(foo.events[:checkins], {"path" => {"ref" => make_ref}, "timestamp" => ts, "ordinal" => 40})
261
+ checkin = Orchestrate::Event.from_listing(foo.events[:checkins], {"path" => {"ref" => make_ref, "timestamp" => ts, "ordinal" => 40}})
262
262
  refute_equal tweet1, checkin
263
263
  refute tweet1.eql?(checkin)
264
264
  assert_nil tweet1 <=> checkin
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+
3
+ class QueryBuilderTest < MiniTest::Unit::TestCase
4
+ def setup
5
+ @builder = Orchestrate::Search::QueryBuilder.new(nil, '*')
6
+ end
7
+
8
+ def test_event_query
9
+ @builder.kinds('event')
10
+ assert_equal '(*) AND @path.kind:(event)', @builder.query
11
+ end
12
+
13
+ def test_event_or_item_query
14
+ @builder.kinds('event', 'item')
15
+ assert_equal '(*) AND @path.kind:(event item)', @builder.query
16
+ end
17
+
18
+ def test_event_types_query
19
+ @builder.kinds('event').types('activities')
20
+ assert_equal '(*) AND @path.kind:(event) AND @path.type:(activities)',
21
+ @builder.query
22
+ end
23
+ end
metadata CHANGED
@@ -1,17 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orchestrate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.11.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Lyon
8
8
  - Justin Mecham
9
9
  - James Carrasquer
10
10
  - Eric Johnson
11
+ - Daniel Reverri
11
12
  autorequire:
12
13
  bindir: bin
13
14
  cert_chain: []
14
- date: 2015-02-17 00:00:00.000000000 Z
15
+ date: 2015-03-27 00:00:00.000000000 Z
15
16
  dependencies:
16
17
  - !ruby/object:Gem::Dependency
17
18
  name: faraday
@@ -31,84 +32,84 @@ dependencies:
31
32
  name: net-http-persistent
32
33
  requirement: !ruby/object:Gem::Requirement
33
34
  requirements:
34
- - - "~>"
35
+ - - ~>
35
36
  - !ruby/object:Gem::Version
36
37
  version: '2.9'
37
38
  type: :runtime
38
39
  prerelease: false
39
40
  version_requirements: !ruby/object:Gem::Requirement
40
41
  requirements:
41
- - - "~>"
42
+ - - ~>
42
43
  - !ruby/object:Gem::Version
43
44
  version: '2.9'
44
45
  - !ruby/object:Gem::Dependency
45
46
  name: bundler
46
47
  requirement: !ruby/object:Gem::Requirement
47
48
  requirements:
48
- - - "~>"
49
+ - - ~>
49
50
  - !ruby/object:Gem::Version
50
51
  version: '1.6'
51
52
  type: :development
52
53
  prerelease: false
53
54
  version_requirements: !ruby/object:Gem::Requirement
54
55
  requirements:
55
- - - "~>"
56
+ - - ~>
56
57
  - !ruby/object:Gem::Version
57
58
  version: '1.6'
58
59
  - !ruby/object:Gem::Dependency
59
60
  name: rake
60
61
  requirement: !ruby/object:Gem::Requirement
61
62
  requirements:
62
- - - ">="
63
+ - - '>='
63
64
  - !ruby/object:Gem::Version
64
65
  version: '0'
65
66
  type: :development
66
67
  prerelease: false
67
68
  version_requirements: !ruby/object:Gem::Requirement
68
69
  requirements:
69
- - - ">="
70
+ - - '>='
70
71
  - !ruby/object:Gem::Version
71
72
  version: '0'
72
73
  - !ruby/object:Gem::Dependency
73
74
  name: typhoeus
74
75
  requirement: !ruby/object:Gem::Requirement
75
76
  requirements:
76
- - - ">="
77
+ - - '>='
77
78
  - !ruby/object:Gem::Version
78
79
  version: '0'
79
80
  type: :development
80
81
  prerelease: false
81
82
  version_requirements: !ruby/object:Gem::Requirement
82
83
  requirements:
83
- - - ">="
84
+ - - '>='
84
85
  - !ruby/object:Gem::Version
85
86
  version: '0'
86
87
  - !ruby/object:Gem::Dependency
87
88
  name: em-http-request
88
89
  requirement: !ruby/object:Gem::Requirement
89
90
  requirements:
90
- - - ">="
91
+ - - '>='
91
92
  - !ruby/object:Gem::Version
92
93
  version: '0'
93
94
  type: :development
94
95
  prerelease: false
95
96
  version_requirements: !ruby/object:Gem::Requirement
96
97
  requirements:
97
- - - ">="
98
+ - - '>='
98
99
  - !ruby/object:Gem::Version
99
100
  version: '0'
100
101
  - !ruby/object:Gem::Dependency
101
102
  name: em-synchrony
102
103
  requirement: !ruby/object:Gem::Requirement
103
104
  requirements:
104
- - - ">="
105
+ - - '>='
105
106
  - !ruby/object:Gem::Version
106
107
  version: '0'
107
108
  type: :development
108
109
  prerelease: false
109
110
  version_requirements: !ruby/object:Gem::Requirement
110
111
  requirements:
111
- - - ">="
112
+ - - '>='
112
113
  - !ruby/object:Gem::Version
113
114
  version: '0'
114
115
  description: Client for the Orchestrate REST API
@@ -117,13 +118,14 @@ email:
117
118
  - justin@mecham.me
118
119
  - jimcar@aracnet.com
119
120
  - erjohnson.pdx@gmail.com
121
+ - reverri@gmail.com
120
122
  executables: []
121
123
  extensions: []
122
124
  extra_rdoc_files: []
123
125
  files:
124
- - ".gitignore"
125
- - ".travis.yml"
126
- - ".yardopts"
126
+ - .gitignore
127
+ - .travis.yml
128
+ - .yardopts
127
129
  - Gemfile
128
130
  - LICENSE
129
131
  - README.md
@@ -168,6 +170,7 @@ files:
168
170
  - test/orchestrate/key_value_test.rb
169
171
  - test/orchestrate/ref_test.rb
170
172
  - test/orchestrate/relations_test.rb
173
+ - test/orchestrate/search/query_builder_test.rb
171
174
  - test/test_helper.rb
172
175
  homepage: https://github.com/orchestrate-io/orchestrate-ruby
173
176
  licenses:
@@ -179,17 +182,17 @@ require_paths:
179
182
  - lib
180
183
  required_ruby_version: !ruby/object:Gem::Requirement
181
184
  requirements:
182
- - - ">="
185
+ - - '>='
183
186
  - !ruby/object:Gem::Version
184
187
  version: '0'
185
188
  required_rubygems_version: !ruby/object:Gem::Requirement
186
189
  requirements:
187
- - - ">="
190
+ - - '>='
188
191
  - !ruby/object:Gem::Version
189
192
  version: '0'
190
193
  requirements: []
191
194
  rubyforge_project:
192
- rubygems_version: 2.2.2
195
+ rubygems_version: 2.0.14
193
196
  signing_key:
194
197
  specification_version: 4
195
198
  summary: Ruby client for Orchestrate.io
@@ -215,4 +218,5 @@ test_files:
215
218
  - test/orchestrate/key_value_test.rb
216
219
  - test/orchestrate/ref_test.rb
217
220
  - test/orchestrate/relations_test.rb
221
+ - test/orchestrate/search/query_builder_test.rb
218
222
  - test/test_helper.rb