where_exists 2.0.0 → 2.0.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 +4 -4
- data/MIT-LICENSE +0 -0
- data/README.markdown +3 -1
- data/Rakefile +0 -0
- data/lib/where_exists/version.rb +1 -1
- data/lib/where_exists.rb +18 -13
- data/test/belongs_to_polymorphic_test.rb +0 -0
- data/test/belongs_to_test.rb +0 -0
- data/test/documentation_test.rb +0 -0
- data/test/has_and_belongs_to_many.rb +0 -0
- data/test/has_many_polymorphic_test.rb +0 -0
- data/test/has_many_test.rb +0 -0
- data/test/has_many_through_test.rb +8 -6
- data/test/test_helper.rb +0 -0
- metadata +6 -8
- data/test/db/test.db +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9957b5787ab2fda2505560b01ffeca8f2e1d24bf0d0d38e09f4f25969a30ab6
|
4
|
+
data.tar.gz: 4718917be7477f54afb0e322a588adadb4d2d375c6b7938d922b89ef0629ea27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 839de9969500c67df98512ee5f5043b4d34a8e337263e3dcc79dd081e6730a0b1bb6bce3c632a764372d6dabe143f9b3c7ffcbc55092f55727d8746d40eafaf3
|
7
|
+
data.tar.gz: a4c38490f6caf945889d2f92075e1069cef92706524c299bd4d800c4b856fd62fda39738539fee816daa955a5ef3908e49c7aed9ed4e3be97af6bf8c419f3b07
|
data/MIT-LICENSE
CHANGED
File without changes
|
data/README.markdown
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
## Description
|
6
6
|
|
7
|
-
<img src="
|
7
|
+
<img src="exists.png" alt="Exists" align="right" width="100" height="200">
|
8
8
|
|
9
9
|
This gem does exactly two things:
|
10
10
|
|
@@ -155,6 +155,8 @@ Also,
|
|
155
155
|
* Submit pull request with new features or bug fixes
|
156
156
|
* Enhance or clarify the documentation that you are reading
|
157
157
|
|
158
|
+
**Please ping me in addition to creating PR/issue** (just add "@EugZol" to the PR/issue text). Thank you!
|
159
|
+
|
158
160
|
To run tests:
|
159
161
|
```
|
160
162
|
> bundle exec appraisal install
|
data/Rakefile
CHANGED
File without changes
|
data/lib/where_exists/version.rb
CHANGED
data/lib/where_exists.rb
CHANGED
@@ -36,11 +36,11 @@ module WhereExists
|
|
36
36
|
|
37
37
|
case association.macro
|
38
38
|
when :belongs_to
|
39
|
-
queries = where_exists_for_belongs_to_query(association, where_parameters)
|
39
|
+
queries = where_exists_for_belongs_to_query(association, where_parameters, &block)
|
40
40
|
when :has_many, :has_one
|
41
|
-
queries = where_exists_for_has_many_query(association, where_parameters)
|
41
|
+
queries = where_exists_for_has_many_query(association, where_parameters, &block)
|
42
42
|
when :has_and_belongs_to_many
|
43
|
-
queries = where_exists_for_habtm_query(association, where_parameters)
|
43
|
+
queries = where_exists_for_habtm_query(association, where_parameters, &block)
|
44
44
|
else
|
45
45
|
inspection = nil
|
46
46
|
begin
|
@@ -53,13 +53,12 @@ module WhereExists
|
|
53
53
|
|
54
54
|
queries_sql =
|
55
55
|
queries.map do |query|
|
56
|
-
query = yield query if block_given?
|
57
56
|
"EXISTS (" + query.to_sql + ")"
|
58
57
|
end
|
59
58
|
queries_sql.join(" OR ")
|
60
59
|
end
|
61
60
|
|
62
|
-
def where_exists_for_belongs_to_query(association, where_parameters)
|
61
|
+
def where_exists_for_belongs_to_query(association, where_parameters, &block)
|
63
62
|
polymorphic = association.options[:polymorphic].present?
|
64
63
|
|
65
64
|
association_scope = association.scope
|
@@ -93,13 +92,14 @@ module WhereExists
|
|
93
92
|
|
94
93
|
query = query.where("#{self_type} IN (?)", other_types.uniq)
|
95
94
|
end
|
95
|
+
query = yield query if block_given?
|
96
96
|
queries.push query
|
97
97
|
end
|
98
98
|
|
99
99
|
queries
|
100
100
|
end
|
101
101
|
|
102
|
-
def where_exists_for_has_many_query(association, where_parameters, next_association = {})
|
102
|
+
def where_exists_for_has_many_query(association, where_parameters, next_association = {}, &block)
|
103
103
|
if association.through_reflection
|
104
104
|
raise ArgumentError.new(association) unless association.source_reflection
|
105
105
|
next_association = {
|
@@ -111,9 +111,9 @@ module WhereExists
|
|
111
111
|
|
112
112
|
case association.macro
|
113
113
|
when :has_many, :has_one
|
114
|
-
return where_exists_for_has_many_query(association, {}, next_association)
|
114
|
+
return where_exists_for_has_many_query(association, {}, next_association, &block)
|
115
115
|
when :has_and_belongs_to_many
|
116
|
-
return where_exists_for_habtm_query(association, {}, next_association)
|
116
|
+
return where_exists_for_habtm_query(association, {}, next_association, &block)
|
117
117
|
else
|
118
118
|
inspection = nil
|
119
119
|
begin
|
@@ -148,17 +148,18 @@ module WhereExists
|
|
148
148
|
end
|
149
149
|
|
150
150
|
if next_association[:association]
|
151
|
-
return loop_nested_association(result, next_association)
|
151
|
+
return loop_nested_association(result, next_association, &block)
|
152
152
|
end
|
153
153
|
|
154
154
|
if where_parameters != []
|
155
155
|
result = result.where(*where_parameters)
|
156
156
|
end
|
157
157
|
|
158
|
+
result = yield result if block_given?
|
158
159
|
[result]
|
159
160
|
end
|
160
161
|
|
161
|
-
def where_exists_for_habtm_query(association, where_parameters, next_association = {})
|
162
|
+
def where_exists_for_habtm_query(association, where_parameters, next_association = {}, &block)
|
162
163
|
association_scope = association.scope
|
163
164
|
|
164
165
|
associated_model = association.klass
|
@@ -182,7 +183,7 @@ module WhereExists
|
|
182
183
|
where("#{join_ids} = #{self_ids}")
|
183
184
|
|
184
185
|
if next_association[:association]
|
185
|
-
return loop_nested_association(result, next_association)
|
186
|
+
return loop_nested_association(result, next_association, &block)
|
186
187
|
end
|
187
188
|
|
188
189
|
if where_parameters != []
|
@@ -193,15 +194,18 @@ module WhereExists
|
|
193
194
|
result = result.instance_exec(&association_scope)
|
194
195
|
end
|
195
196
|
|
197
|
+
result = yield result if block_given?
|
198
|
+
|
196
199
|
[result]
|
197
200
|
end
|
198
201
|
|
199
|
-
def loop_nested_association(query, next_association = {}, nested = false)
|
202
|
+
def loop_nested_association(query, next_association = {}, nested = false, &block)
|
200
203
|
str = query.klass.build_exists_string(
|
201
204
|
next_association[:association].name,
|
202
205
|
*[
|
203
206
|
*next_association[:params]
|
204
207
|
],
|
208
|
+
&block
|
205
209
|
)
|
206
210
|
|
207
211
|
if next_association[:next_association] && next_association[:next_association][:association]
|
@@ -210,7 +214,8 @@ module WhereExists
|
|
210
214
|
"(#{subq} AND (#{loop_nested_association(
|
211
215
|
next_association[:association],
|
212
216
|
next_association[:next_association],
|
213
|
-
true
|
217
|
+
true,
|
218
|
+
&block
|
214
219
|
)}))"
|
215
220
|
end
|
216
221
|
end
|
File without changes
|
data/test/belongs_to_test.rb
CHANGED
File without changes
|
data/test/documentation_test.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
data/test/has_many_test.rb
CHANGED
File without changes
|
@@ -52,8 +52,6 @@ class Blob < ActiveRecord::Base
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
|
56
|
-
|
57
55
|
class Project < ActiveRecord::Base
|
58
56
|
has_many :tasks
|
59
57
|
has_many :invoices, :through => :tasks
|
@@ -99,8 +97,6 @@ class HasManyThroughTest < Minitest::Test
|
|
99
97
|
end
|
100
98
|
|
101
99
|
def test_one_level_through
|
102
|
-
ActiveRecord::Base.descendants.each(&:delete_all)
|
103
|
-
|
104
100
|
project = Project.create!
|
105
101
|
irrelevant_project = Project.create!
|
106
102
|
|
@@ -121,8 +117,6 @@ class HasManyThroughTest < Minitest::Test
|
|
121
117
|
end
|
122
118
|
|
123
119
|
def test_deep_through
|
124
|
-
ActiveRecord::Base.descendants.each(&:delete_all)
|
125
|
-
|
126
120
|
project = Project.create! name: 'relevant'
|
127
121
|
irrelevant_project = Project.create! name: 'irrelevant'
|
128
122
|
|
@@ -188,6 +182,14 @@ class HasManyThroughTest < Minitest::Test
|
|
188
182
|
result = Project.where_not_exists(:blobs)
|
189
183
|
|
190
184
|
assert_equal 0, result.length
|
185
|
+
end
|
191
186
|
|
187
|
+
def test_with_yield
|
188
|
+
project = Project.create! name: 'example_project'
|
189
|
+
task = Task.create!(project: project)
|
190
|
+
line_item = LineItem.create!(name: 'example_line_item', task: task)
|
191
|
+
result = Project.where_exists(:project_line_items) { |scope| scope.where(name: 'example_line_item') }
|
192
|
+
|
193
|
+
assert_equal 1, result.length
|
192
194
|
end
|
193
195
|
end
|
data/test/test_helper.rb
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: where_exists
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugene Zolotarev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -114,7 +114,6 @@ files:
|
|
114
114
|
- lib/where_exists/version.rb
|
115
115
|
- test/belongs_to_polymorphic_test.rb
|
116
116
|
- test/belongs_to_test.rb
|
117
|
-
- test/db/test.db
|
118
117
|
- test/documentation_test.rb
|
119
118
|
- test/has_and_belongs_to_many.rb
|
120
119
|
- test/has_many_polymorphic_test.rb
|
@@ -145,12 +144,11 @@ signing_key:
|
|
145
144
|
specification_version: 4
|
146
145
|
summary: "#where_exists extension of ActiveRecord"
|
147
146
|
test_files:
|
147
|
+
- test/documentation_test.rb
|
148
148
|
- test/belongs_to_polymorphic_test.rb
|
149
149
|
- test/belongs_to_test.rb
|
150
|
-
- test/db/test.db
|
151
|
-
- test/documentation_test.rb
|
152
|
-
- test/has_and_belongs_to_many.rb
|
153
150
|
- test/has_many_polymorphic_test.rb
|
154
|
-
- test/has_many_test.rb
|
155
151
|
- test/has_many_through_test.rb
|
156
152
|
- test/test_helper.rb
|
153
|
+
- test/has_and_belongs_to_many.rb
|
154
|
+
- test/has_many_test.rb
|
data/test/db/test.db
DELETED
Binary file
|