embark-journey 0.1.0 → 0.1.1

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: 1b89e8bfb66ca4c4f356545376aef856f05f56b6
4
- data.tar.gz: c06e140222c70b4b2565f754c8ec18e737cfe1d0
3
+ metadata.gz: be545fab222f3f8b7ba132b398f1939493884720
4
+ data.tar.gz: adeec5bc879a5ace33102a3306c1c3fa964d14bc
5
5
  SHA512:
6
- metadata.gz: b30f45baab6f77c47c0acb08796d4dc38758db834b43beb159cc4bffdb768723d81bf54b62fa34157e5bd6fe33e83b7197c047a7a6ff21a6c1e407db78f9db86
7
- data.tar.gz: fbcf3ed97258b645618e9d8723d4cd34215ccb7827f4544a4ecf02de07b9cb64205b13b7b222b0a36b60842c6ec91f30828e5636059bb286b83e310f2f4f364a
6
+ metadata.gz: cdc71dea35635846aa89f5020c51eecb6571885fdeb3c190208a609b577809183fb62b4407a881a7a7f60aa437721cab115815f509626b1deba98a3a3a7729f4
7
+ data.tar.gz: a2421076bf07010f27daa861efd57d852aef0b9b61d461586ff798d3dc680d40766cb441b5447753382ad5d666e5d9d376440141add2fc4d8b849bbded3632f3
@@ -24,6 +24,29 @@ module Journey::Resource::WhereMultiple
24
24
  where(clauses.merge(query: query))
25
25
  end
26
26
  end
27
+
28
+ def self.count_multiple(clauses)
29
+ # TODO refactor me to re-use all the same recursive query logic in `where_multiple`
30
+
31
+ query = clauses.delete(:query)
32
+ query_keys_with_array_values = query.map do |key, value|
33
+ key if value.is_a?(Array)
34
+ end.compact
35
+
36
+ if branch_key = query_keys_with_array_values.first
37
+ consistent_query = query.except(branch_key)
38
+ value_branches = query[branch_key]
39
+
40
+ value_branches.map do |value|
41
+ branch_query = consistent_query.merge(branch_key => value)
42
+ count_multiple(clauses.merge(query: branch_query))
43
+ end.sum
44
+
45
+ else
46
+ count(clauses.merge(query: query))
47
+ end
48
+
49
+ end
27
50
  end
28
51
 
29
52
  end
@@ -2,7 +2,7 @@ module Journey
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 0
5
+ TINY = 1
6
6
  PRE = nil
7
7
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
8
8
  end
@@ -16,8 +16,14 @@ describe Journey::Resource::WhereMultiple do
16
16
  before { klass.destroy_all }
17
17
 
18
18
  let!(:candidates) { matchables + unmatchables }
19
+ let(:collection) { klass.where_multiple(clauses) }
20
+ let(:count) { klass.count_multiple(clauses) }
19
21
 
20
22
  context "when query doesn't contain any key having an array-like value" do
23
+ let(:clauses) do
24
+ { query: { number: 'A' } }
25
+ end
26
+
21
27
  let(:matchables) do
22
28
  [ klass.create(number: 'A') ]
23
29
  end
@@ -25,7 +31,6 @@ describe Journey::Resource::WhereMultiple do
25
31
  [ klass.create(number: 'X') ]
26
32
  end
27
33
 
28
- let!(:collection) { klass.where_multiple(query: { number: 'A' }) }
29
34
 
30
35
  it 'returns correct results' do
31
36
  expect(matchables).to be_all do |matchable|
@@ -36,11 +41,17 @@ describe Journey::Resource::WhereMultiple do
36
41
  end
37
42
  end
38
43
 
44
+ it 'counts correctly' do
45
+ expect(count).to eq 1
46
+ end
47
+
39
48
  pending 'performs 1 query'
40
49
  end
41
50
 
42
51
  context "when query contains a key with the value of an array containing a single item" do
43
-
52
+ let(:clauses) do
53
+ { query: { number: ['A'] }, sort: { number: :desc } }
54
+ end
44
55
  let(:matchables) do
45
56
  [
46
57
  klass.create(number: 'A')
@@ -52,10 +63,7 @@ describe Journey::Resource::WhereMultiple do
52
63
  ]
53
64
  end
54
65
 
55
- let!(:collection) { klass.where_multiple(query: { number: ['A'] }, sort: { number: :desc }) }
56
-
57
66
  it 'returns correct results' do
58
- collection
59
67
  expect(matchables).to be_all do |matchable|
60
68
  collection.include?(matchable)
61
69
  end
@@ -64,12 +72,18 @@ describe Journey::Resource::WhereMultiple do
64
72
  end
65
73
  end
66
74
 
75
+ it 'counts correctly' do
76
+ expect(count).to eq 1
77
+ end
78
+
67
79
  pending 'performs n queries'
68
80
 
69
81
  end
70
82
 
71
83
  context "when query contains one key having an array-like value" do
72
-
84
+ let(:clauses) do
85
+ { query: { number: ['A', 'B'] } }
86
+ end
73
87
  let(:matchables) do
74
88
  [
75
89
  klass.create(number: 'A'),
@@ -83,8 +97,6 @@ describe Journey::Resource::WhereMultiple do
83
97
  ]
84
98
  end
85
99
 
86
- let!(:collection) { klass.where_multiple(query: { number: ['A', 'B'] }) }
87
-
88
100
  it 'returns correct results' do
89
101
  expect(matchables).to be_all do |matchable|
90
102
  collection.include?(matchable)
@@ -94,11 +106,18 @@ describe Journey::Resource::WhereMultiple do
94
106
  end
95
107
  end
96
108
 
109
+ it 'counts correctly' do
110
+ expect(count).to eq 2
111
+ end
112
+
97
113
  pending 'performs n queries'
98
114
  end
99
115
 
100
116
 
101
117
  context "when query contains two keys having array-like values" do
118
+ let(:clauses) do
119
+ { query: { number: ['A', 'B'], flash_number: ['1', '2'] } }
120
+ end
102
121
  let(:matchables) do
103
122
  [
104
123
  klass.create(number: 'A', flash_number: '1'),
@@ -117,8 +136,6 @@ describe Journey::Resource::WhereMultiple do
117
136
  ]
118
137
  end
119
138
 
120
- let!(:collection) { klass.where_multiple(query: { number: ['A', 'B'], flash_number: ['1', '2'] }) }
121
-
122
139
  it 'returns correct results' do
123
140
  expect(matchables).to be_all do |matchable|
124
141
  collection.include?(matchable)
@@ -128,6 +145,10 @@ describe Journey::Resource::WhereMultiple do
128
145
  end
129
146
  end
130
147
 
148
+ it 'counts correctly' do
149
+ expect(count).to eq 4
150
+ end
151
+
131
152
  pending 'performs m * n queries'
132
153
  end
133
154
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embark-journey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Davey