embark-journey 0.0.28 → 0.0.29

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: 46babc42da1d1c930577a354fc7c2a5618802e8d
4
- data.tar.gz: 7f4c9b046e632f974256b208ba5086296caa08e1
3
+ metadata.gz: 682ec526295c2a46036e0c2abcaa6bf168858d82
4
+ data.tar.gz: a6fe8cb59c20f5f6176bae2f6603f86c1d25533f
5
5
  SHA512:
6
- metadata.gz: 77fedd260429ea7da42267e9c76851e2cf38695eaed140c500accb0ffaf98c4ebb22a19721566961a7d45530c057c3fefe64126c2f81ddbb1dc0eaea8f44396a
7
- data.tar.gz: ef8171616a0a856a023809bfac96300ec481edcf64a4ef2e48892ab64f9148cb68db862bd6d159ce7981b4f2e00a145ae23f231147a492f2cadac2256d71c9e0
6
+ metadata.gz: 66ec3d2cd6f012433c946b427fbbb1cbabf21e5d03bd391ef9be40b7aa2791e900fcbe328d528f3a8294bac84f9451bf9a8bb757342728ce9cff64f516d9a9b1
7
+ data.tar.gz: 6402734a0ec6526072607c5501984b417490d00f65622b6b6a3887adea5f547f7aad59226dc49b7f3073bf723849c186cf05ec80771f781cd060b14ae6d708ab
@@ -43,6 +43,7 @@ require 'journey/resource/enums'
43
43
  require 'journey/resource/enum_sets'
44
44
  require 'journey/resource/queries'
45
45
  require 'journey/resource/search'
46
+ require 'journey/resource/where_multiple'
46
47
 
47
48
  class Journey::Resource
48
49
  include API
@@ -54,6 +55,7 @@ class Journey::Resource
54
55
  include EnumSets
55
56
  include Queries
56
57
  include Search
58
+ include WhereMultiple
57
59
  end
58
60
 
59
61
 
@@ -0,0 +1,29 @@
1
+ require 'active_support/concern'
2
+
3
+ module Journey::Resource::WhereMultiple
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ def self.where_multiple(clauses)
8
+
9
+ query = clauses.delete(:query)
10
+ query_keys_with_array_values = query.map do |key, value|
11
+ key if value.is_a?(Array)
12
+ end.compact
13
+
14
+ if branch_key = query_keys_with_array_values.first
15
+ consistent_query = query.except(branch_key)
16
+ value_branches = query[branch_key]
17
+
18
+ value_branches.map do |value|
19
+ branch_query = consistent_query.merge(branch_key => value)
20
+ where_multiple(clauses.merge(query: branch_query))
21
+ end.map(&:to_a).sum
22
+
23
+ else
24
+ where(clauses)
25
+ end
26
+ end
27
+ end
28
+
29
+ end
@@ -2,7 +2,7 @@ module Journey
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 28
5
+ TINY = 29
6
6
  PRE = nil
7
7
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
8
8
  end
@@ -0,0 +1,106 @@
1
+ require 'spec_helper'
2
+
3
+ describe Journey::Resource::WhereMultiple do
4
+
5
+ let(:klass) do
6
+ Class.new(Journey::Resource) do
7
+ self.element_name = 'job'
8
+
9
+ def self.destroy_all
10
+ all.each(&:destroy)
11
+ end
12
+ end
13
+ end
14
+
15
+
16
+ before { klass.destroy_all }
17
+
18
+ let(:candidates) { matchables + unmatchables }
19
+
20
+ context "when query doesn't contain any key having an array-like value" do
21
+ let(:matchables) do
22
+ [ klass.create(number: 'A') ]
23
+ end
24
+ let(:unmatchables) do
25
+ [ klass.create(number: 'X') ]
26
+ end
27
+
28
+ let(:collection) { klass.where_multiple(query: { number: 'A' }) }
29
+
30
+ it 'returns correct results' do
31
+ expect(matchables).to be_all do |matchable|
32
+ collection.include?(matchable)
33
+ end
34
+ expect(unmatchables).not_to be_any do |unmatchable|
35
+ collection.include?(unmatchable)
36
+ end
37
+ end
38
+
39
+ pending 'performs 1 query'
40
+ end
41
+
42
+ context "when query contains one key having an array-like value" do
43
+
44
+ let(:matchables) do
45
+ [
46
+ klass.create(number: 'A'),
47
+ klass.create(number: 'B')
48
+ ]
49
+ end
50
+ let(:unmatchables) do
51
+ [
52
+ klass.create(number: 'X'),
53
+ klass.create(number: 'Y')
54
+ ]
55
+ end
56
+
57
+ let(:collection) { klass.where_multiple(query: { number: ['A', 'B'] }) }
58
+
59
+ it 'returns correct results' do
60
+ expect(matchables).to be_all do |matchable|
61
+ collection.include?(matchable)
62
+ end
63
+ expect(unmatchables).not_to be_any do |unmatchable|
64
+ collection.include?(unmatchable)
65
+ end
66
+ end
67
+
68
+ pending 'performs n queries'
69
+ end
70
+
71
+
72
+ context "when query contains two keys having array-like values" do
73
+ let(:matchables) do
74
+ [
75
+ klass.create(number: 'A', flash_number: '1'),
76
+ klass.create(number: 'A', flash_number: '2'),
77
+ klass.create(number: 'B', flash_number: '1'),
78
+ klass.create(number: 'B', flash_number: '2'),
79
+ ]
80
+ end
81
+ let(:unmatchables) do
82
+ [
83
+ klass.create(number: 'A', flash_number: '3'),
84
+ klass.create(number: 'B', flash_number: '3'),
85
+ klass.create(number: 'C', flash_number: '1'),
86
+ klass.create(number: 'C', flash_number: '2'),
87
+ klass.create(number: 'C', flash_number: '3'),
88
+ ]
89
+ end
90
+
91
+ let(:collection) { klass.where_multiple(query: { number: ['A', 'B'], flash_number: ['1', '2'] }) }
92
+
93
+ it 'returns correct results' do
94
+ expect(matchables).to be_all do |matchable|
95
+ collection.include?(matchable)
96
+ end
97
+ expect(unmatchables).not_to be_any do |unmatchable|
98
+ collection.include?(unmatchable)
99
+ end
100
+ end
101
+
102
+ pending 'performs m * n queries'
103
+ end
104
+
105
+
106
+ end
@@ -1,6 +1,7 @@
1
1
  require 'pry'
2
2
  require 'journey'
3
3
 
4
+ Journey.logger = Logger.new('/dev/null')
4
5
 
5
6
  require 'dotenv'
6
7
  Dotenv.load
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embark-journey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.28
4
+ version: 0.0.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Davey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-26 00:00:00.000000000 Z
11
+ date: 2015-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_attr
@@ -158,11 +158,13 @@ files:
158
158
  - lib/journey/resource/enums.rb
159
159
  - lib/journey/resource/queries.rb
160
160
  - lib/journey/resource/search.rb
161
+ - lib/journey/resource/where_multiple.rb
161
162
  - lib/journey/version.rb
162
163
  - spec/models/journey/configurable_spec.rb
163
164
  - spec/models/journey/configuration_spec.rb
164
165
  - spec/models/journey/oplog_spec.rb
165
166
  - spec/models/journey/resource/attachments_spec.rb
167
+ - spec/models/journey/resource/where_multiple_spec.rb
166
168
  - spec/models/journey/resource_spec.rb
167
169
  - spec/spec_helper.rb
168
170
  - spec/support/configuration_cache.rb
@@ -197,6 +199,7 @@ test_files:
197
199
  - spec/models/journey/configuration_spec.rb
198
200
  - spec/models/journey/oplog_spec.rb
199
201
  - spec/models/journey/resource/attachments_spec.rb
202
+ - spec/models/journey/resource/where_multiple_spec.rb
200
203
  - spec/models/journey/resource_spec.rb
201
204
  - spec/spec_helper.rb
202
205
  - spec/support/configuration_cache.rb