baby_squeel 1.4.2 → 2.0.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 +4 -4
- data/CHANGELOG.md +18 -1
- data/ISSUE_TEMPLATE.md +1 -1
- data/baby_squeel.gemspec +1 -1
- data/lib/baby_squeel/active_record/query_methods.rb +15 -15
- data/lib/baby_squeel/active_record/version_helper.rb +0 -9
- data/lib/baby_squeel/join_dependency.rb +5 -32
- data/lib/baby_squeel/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e317da76921bc04f342b3cd1f219fa6585f642c4b96e936a18a442a1eb51c18b
|
4
|
+
data.tar.gz: 6a25d3d64d518f5b43124b4dd9083636f10ac0fad1e0ba4e9634f0dded17cb23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1bcaadbb4fc5894a5cd1e4c797ac3d6cfbbaee0cad994caf360fc2ac347f9a30019c297bcd254cae7642574b56bd22d927ea492bad76be02905379847af5330
|
7
|
+
data.tar.gz: 012e06a95f564e7502a4aa73a5629969f82e76a4abf475fa7364f25891f3345710334848313d6c3fc4c3842da29c5fc3220d95d58a1829258445886be8ac143e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
- AR 6.1: fix - FrozenError: can't modify frozen object: []
|
4
|
+
- Drop support for ActiveRecord older than 6.0.
|
5
|
+
|
6
|
+
## [1.4.4] - 2022-02-07
|
7
|
+
|
8
|
+
### Fixed
|
9
|
+
|
10
|
+
- Nested merge-joins query causes NoMethodError with ActiveRecord 6.1.4.4 (#119)
|
11
|
+
|
12
|
+
## [1.4.3] - 2022-02-04
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
|
16
|
+
- ActiveRecord::Relation#left_joins performs INNER JOIN on Active Record 6.1 (#118)
|
17
|
+
|
3
18
|
## [1.4.2] - 2022-01-24
|
4
19
|
|
5
20
|
### Fixed
|
@@ -219,7 +234,9 @@
|
|
219
234
|
|
220
235
|
- Initial support for selects, orders, wheres, and joins.
|
221
236
|
|
222
|
-
[unreleased]: https://github.com/rzane/baby_squeel/compare/v1.4.
|
237
|
+
[unreleased]: https://github.com/rzane/baby_squeel/compare/v1.4.4...HEAD
|
238
|
+
[1.4.4]: https://github.com/rzane/baby_squeel/compare/v1.4.3...v1.4.4
|
239
|
+
[1.4.3]: https://github.com/rzane/baby_squeel/compare/v1.4.2...v1.4.3
|
223
240
|
[1.4.2]: https://github.com/rzane/baby_squeel/compare/v1.4.1...v1.4.2
|
224
241
|
[1.4.1]: https://github.com/rzane/baby_squeel/compare/v1.4.0...v1.4.1
|
225
242
|
[1.4.0]: https://github.com/rzane/baby_squeel/compare/v1.4.0.beta1...v1.4.0
|
data/ISSUE_TEMPLATE.md
CHANGED
@@ -11,7 +11,7 @@ require 'minitest/autorun'
|
|
11
11
|
|
12
12
|
gemfile true do
|
13
13
|
source 'https://rubygems.org'
|
14
|
-
gem 'activerecord', '~>
|
14
|
+
gem 'activerecord', '~> 6.0.0' # which Active Record version?
|
15
15
|
gem 'sqlite3'
|
16
16
|
gem 'baby_squeel', github: 'rzane/baby_squeel'
|
17
17
|
end
|
data/baby_squeel.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.files = Dir.glob('{lib/**/*,*.{md,txt,gemspec}}')
|
21
21
|
|
22
|
-
spec.add_dependency 'activerecord', '>=
|
22
|
+
spec.add_dependency 'activerecord', '>= 6.0', '< 7.1'
|
23
23
|
spec.add_dependency 'ransack', '~> 2.3'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 2'
|
@@ -51,19 +51,27 @@ module BabySqueel
|
|
51
51
|
having DSL.evaluate(self, &block)
|
52
52
|
end
|
53
53
|
|
54
|
-
private
|
55
|
-
|
56
54
|
if BabySqueel::ActiveRecord::VersionHelper.at_least_6_1?
|
55
|
+
def construct_join_dependency(associations, join_type)
|
56
|
+
result = super(associations, join_type)
|
57
|
+
if associations.any? { |assoc| assoc.is_a?(BabySqueel::Join) }
|
58
|
+
result.extend(BabySqueel::JoinDependency::Injector6_1)
|
59
|
+
end
|
60
|
+
result
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
57
65
|
# https://github.com/rails/rails/commit/c0c53ee9d28134757cf1418521cb97c4a135f140
|
58
66
|
def select_association_list(*args)
|
59
|
-
args[0].
|
67
|
+
if args[0].any? { |join| join.is_a?(BabySqueel::Join) }
|
68
|
+
args[0].extend(BabySqueel::ActiveRecord::QueryMethods::Injector6_1)
|
69
|
+
end
|
60
70
|
super *args
|
61
71
|
end
|
72
|
+
else
|
73
|
+
private
|
62
74
|
|
63
|
-
def construct_join_dependency(associations, join_type)
|
64
|
-
super(associations, join_type).extend(BabySqueel::JoinDependency::Injector6_1)
|
65
|
-
end
|
66
|
-
elsif BabySqueel::ActiveRecord::VersionHelper.at_least_6_0?
|
67
75
|
# Active Record will call `each` on the `joins`. The
|
68
76
|
# Injector has a custom `each` method that handles
|
69
77
|
# BabySqueel::Join nodes.
|
@@ -71,14 +79,6 @@ module BabySqueel
|
|
71
79
|
args[1] = BabySqueel::JoinDependency::Injector6_0.new(args.second)
|
72
80
|
super(*args)
|
73
81
|
end
|
74
|
-
else
|
75
|
-
# Active Record will call `group_by` on the `joins`. The
|
76
|
-
# Injector has a custom `group_by` method that handles
|
77
|
-
# BabySqueel::Join nodes.
|
78
|
-
def build_joins(*args)
|
79
|
-
args[1] = BabySqueel::JoinDependency::Injector5_2.new(args.second)
|
80
|
-
super(*args)
|
81
|
-
end
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
@@ -7,15 +7,6 @@ module BabySqueel
|
|
7
7
|
::ActiveRecord::VERSION::MAJOR > 6 ||
|
8
8
|
::ActiveRecord::VERSION::MAJOR == 6 && ::ActiveRecord::VERSION::MINOR >= 1
|
9
9
|
end
|
10
|
-
|
11
|
-
def self.at_least_6_0?
|
12
|
-
::ActiveRecord::VERSION::MAJOR >= 6
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.at_least_5_2_3?
|
16
|
-
at_least_6_0? ||
|
17
|
-
::ActiveRecord::VERSION::MAJOR >= 5 && ::ActiveRecord::VERSION::MINOR >= 2 && ::ActiveRecord::VERSION::TINY >= 3
|
18
|
-
end
|
19
10
|
end
|
20
11
|
end
|
21
12
|
end
|
@@ -2,26 +2,6 @@ require 'baby_squeel/active_record/version_helper'
|
|
2
2
|
|
3
3
|
module BabySqueel
|
4
4
|
module JoinDependency
|
5
|
-
# This class allows BabySqueel to slip custom
|
6
|
-
# joins_values into Active Record's JoinDependency
|
7
|
-
class Injector5_2 < Array # :nodoc:
|
8
|
-
# Active Record will call group_by on this object
|
9
|
-
# in ActiveRecord::QueryMethods#build_joins. This
|
10
|
-
# allows BabySqueel::Joins to be treated
|
11
|
-
# like typical join hashes until Polyamorous can
|
12
|
-
# deal with them.
|
13
|
-
def group_by
|
14
|
-
super do |join|
|
15
|
-
case join
|
16
|
-
when BabySqueel::Join
|
17
|
-
:association_join
|
18
|
-
else
|
19
|
-
yield join
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
5
|
# This class allows BabySqueel to slip custom
|
26
6
|
# joins_values into Active Record's JoinDependency
|
27
7
|
class Injector6_0 < Array # :nodoc:
|
@@ -50,7 +30,7 @@ module BabySqueel
|
|
50
30
|
# Maybe this could be fixed in joining but I do not know how.
|
51
31
|
module Injector6_1 # :nodoc:
|
52
32
|
def make_constraints(parent, child, join_type) # :nodoc:
|
53
|
-
join_type = child.join_type if child.join_type
|
33
|
+
join_type = child.join_type if child.join_type == Arel::Nodes::OuterJoin
|
54
34
|
super(parent, child, join_type)
|
55
35
|
end
|
56
36
|
end
|
@@ -75,7 +55,7 @@ module BabySqueel
|
|
75
55
|
join_root.each_children do |parent, child|
|
76
56
|
join_dependency.construct_tables_for_association!(parent, child)
|
77
57
|
end
|
78
|
-
|
58
|
+
else
|
79
59
|
# If we tell join_dependency to construct its tables, Active Record
|
80
60
|
# handles building the correct aliases and attaching them to its
|
81
61
|
# JoinDepenencies.
|
@@ -147,16 +127,9 @@ module BabySqueel
|
|
147
127
|
join_list = join_nodes + joins
|
148
128
|
|
149
129
|
alias_tracker = Associations::AliasTracker.create(relation.klass.connection, relation.table.name, join_list)
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
elsif BabySqueel::ActiveRecord::VersionHelper.at_least_5_2_3?
|
154
|
-
join_dependency = Associations::JoinDependency.new(relation.klass, relation.table, association_joins)
|
155
|
-
join_dependency.instance_variable_set(:@alias_tracker, alias_tracker)
|
156
|
-
else
|
157
|
-
# Rails 5.2.0 - 5.2.2
|
158
|
-
join_dependency = Associations::JoinDependency.new(relation.klass, relation.table, association_joins, alias_tracker)
|
159
|
-
end
|
130
|
+
join_dependency = Associations::JoinDependency.new(relation.klass, relation.table, association_joins, Arel::Nodes::InnerJoin)
|
131
|
+
join_dependency.instance_variable_set(:@alias_tracker, alias_tracker)
|
132
|
+
|
160
133
|
join_nodes.each do |join|
|
161
134
|
join_dependency.send(:alias_tracker).aliases[join.left.name.downcase] = 1
|
162
135
|
end
|
data/lib/baby_squeel/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: baby_squeel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ray Zane
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '6.0'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '7.1'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '6.0'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '7.1'
|
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
158
|
requirements: []
|
159
|
-
rubygems_version: 3.
|
159
|
+
rubygems_version: 3.3.7
|
160
160
|
signing_key:
|
161
161
|
specification_version: 4
|
162
162
|
summary: An expressive query DSL for Active Record 4 and 5.
|