embark-journey 0.0.28 → 0.0.29

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: 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