activerecord_where_assoc 1.1.5 → 1.2.0
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ef06d95cd1fa0b3de7d06e745fc1a527bdc86415adb2e6b36b86b1f1477e804
|
4
|
+
data.tar.gz: 36a723c284fbb1e0b44ea9af5368995d504a53026817f545a14235212d4ae7bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a26660a18b817b6a5cd106e71413e064f899e6fb9c73e9f502a14fc5aeb2896412368bc932028300611c94adac234ebbff85d0e2fd3ed8b900c01fa6c5e2670
|
7
|
+
data.tar.gz: febe936611a53bc9f2f75aeb639fe8d8b905304b9b910e71f5cc9020ab1c0fae6803cd303f0cd7b830e29aa092778df21ce0303150f876930a02be2ed831821e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Unreleased
|
2
2
|
|
3
|
+
# 1.2.0 - 2024-08-31
|
4
|
+
|
5
|
+
* Add support for composite primary keys in Rails 7.2
|
6
|
+
|
3
7
|
# 1.1.5 - 2024-05-18
|
4
8
|
|
5
9
|
* Add compatibility for Rails 7.2
|
@@ -22,12 +26,12 @@
|
|
22
26
|
|
23
27
|
# 1.1.0 - 2020-02-24
|
24
28
|
|
25
|
-
* Added methods which return the SQL used by this gem: `assoc_exists_sql`, `assoc_not_exists_sql`, `compare_assoc_count_sql`, `only_assoc_count_sql`
|
29
|
+
* Added methods which return the SQL used by this gem: `assoc_exists_sql`, `assoc_not_exists_sql`, `compare_assoc_count_sql`, `only_assoc_count_sql`
|
26
30
|
[Documentation for them](https://maxlap.github.io/activerecord_where_assoc/ActiveRecordWhereAssoc/SqlReturningMethods.html)
|
27
31
|
|
28
32
|
# 1.0.1
|
29
33
|
|
30
|
-
* Fix broken urls in error messages
|
34
|
+
* Fix broken urls in error messages
|
31
35
|
|
32
36
|
# 1.0.0
|
33
37
|
|
@@ -35,16 +39,16 @@
|
|
35
39
|
|
36
40
|
# 0.1.3
|
37
41
|
|
38
|
-
* Use `SELECT 1` instead of `SELECT 0`...
|
42
|
+
* Use `SELECT 1` instead of `SELECT 0`...
|
39
43
|
... it just seems more natural that way.
|
40
44
|
* Bugfixes
|
41
45
|
|
42
46
|
# 0.1.2
|
43
47
|
|
44
|
-
* It is now possible to pass a `Range` as first argument to `#where_assoc_count`.
|
48
|
+
* It is now possible to pass a `Range` as first argument to `#where_assoc_count`.
|
45
49
|
Ex: Users that have between 10 and 20 posts
|
46
50
|
`User.where_assoc_count(10..20, :==, :posts)`
|
47
|
-
The operator in that case must be either :== or :!=.
|
48
|
-
This will use `BETWEEN` and `NOT BETWEEN`.
|
51
|
+
The operator in that case must be either :== or :!=.
|
52
|
+
This will use `BETWEEN` and `NOT BETWEEN`.
|
49
53
|
Ranges that exclude the last value, i.e. `5...10`, are also supported, resulting in `BETWEEN 5 and 9`.
|
50
54
|
Ranges with infinities are also supported.
|
@@ -364,6 +364,9 @@ module ActiveRecordWhereAssoc
|
|
364
364
|
if reflection.klass.table_name.include?(".") || option_value(options, :never_alias_limit)
|
365
365
|
# We use unscoped to avoid duplicating the conditions in the query, which is noise. (unless it
|
366
366
|
# could helps the query planner of the DB, if someone can show it to be worth it, then this can be changed.)
|
367
|
+
if reflection.klass.primary_key.is_a?(Array)
|
368
|
+
raise NeverAliasLimitDoesntWorkWithCompositePrimaryKeysError, "Sorry, it just doesn't work..."
|
369
|
+
end
|
367
370
|
|
368
371
|
reflection.klass.unscoped.where(reflection.klass.primary_key.to_sym => current_scope)
|
369
372
|
else
|
@@ -395,8 +398,13 @@ module ActiveRecordWhereAssoc
|
|
395
398
|
|
396
399
|
alias_scope = foreign_klass.base_class.unscoped
|
397
400
|
alias_scope = alias_scope.from("#{table.name} #{ALIAS_TABLE.name}")
|
398
|
-
|
399
|
-
|
401
|
+
|
402
|
+
primary_key_constraints =
|
403
|
+
Array(primary_key).map do |a_primary_key|
|
404
|
+
table[a_primary_key].eq(ALIAS_TABLE[a_primary_key])
|
405
|
+
end
|
406
|
+
|
407
|
+
alias_scope.where(primary_key_constraints.inject(&:and))
|
400
408
|
end
|
401
409
|
|
402
410
|
def self.wrapper_and_join_constraints(record_class, reflection, options = {})
|
@@ -424,7 +432,18 @@ module ActiveRecordWhereAssoc
|
|
424
432
|
foreign_table = ALIAS_TABLE
|
425
433
|
end
|
426
434
|
|
427
|
-
|
435
|
+
constraint_keys = Array.wrap(key)
|
436
|
+
constraint_foreign_keys = Array.wrap(foreign_key)
|
437
|
+
constraint_key_map = constraint_keys.zip(constraint_foreign_keys)
|
438
|
+
|
439
|
+
primary_foreign_key_constraints =
|
440
|
+
constraint_key_map.map do |primary_and_foreign_keys|
|
441
|
+
a_primary_key, a_foreign_key = primary_and_foreign_keys
|
442
|
+
|
443
|
+
table[a_primary_key].eq(foreign_table[a_foreign_key])
|
444
|
+
end
|
445
|
+
|
446
|
+
constraints = primary_foreign_key_constraints.inject(&:and)
|
428
447
|
|
429
448
|
if reflection.type
|
430
449
|
# Handling of the polymorphic has_many/has_one's type column
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord_where_assoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maxime Handfield Lapointe
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -181,7 +181,7 @@ homepage: https://github.com/MaxLap/activerecord_where_assoc
|
|
181
181
|
licenses:
|
182
182
|
- MIT
|
183
183
|
metadata: {}
|
184
|
-
post_install_message:
|
184
|
+
post_install_message:
|
185
185
|
rdoc_options: []
|
186
186
|
require_paths:
|
187
187
|
- lib
|
@@ -196,8 +196,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
196
|
- !ruby/object:Gem::Version
|
197
197
|
version: '0'
|
198
198
|
requirements: []
|
199
|
-
rubygems_version: 3.
|
200
|
-
signing_key:
|
199
|
+
rubygems_version: 3.5.11
|
200
|
+
signing_key:
|
201
201
|
specification_version: 4
|
202
202
|
summary: Make ActiveRecord do conditions on your associations
|
203
203
|
test_files: []
|