active_record_include 0.1.0 → 0.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 +5 -5
- data/Changelog.md +16 -0
- data/License +1 -1
- data/active_record_include.gemspec +5 -7
- data/lib/active_record_include/version.rb +1 -1
- data/lib/active_record_include/when_connected.rb +60 -23
- metadata +19 -59
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 389e7cfde0e5c5eadbc2f4b978f2847784b543289e9ef211c95aa75d974054ae
|
|
4
|
+
data.tar.gz: 723b50c391a00dd17eea1a4ba5b9e943438c717c9aa6a3d61636be5a6f1dac5f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5fa4130d0968ee0a9f0d1e2de0c9853b0c7b9356c91a9ec26311bdbc0428207282cba7281fe998db071e845ff01de34e1df079704ea292a35c998ab6f32b0045
|
|
7
|
+
data.tar.gz: d153ff7f19389878f3977077415125c481a47cbcc4e6f05bb909db963b9d019b49853f8d5b2252c90d2ecb1c39e12547527e7836b32fdae57209e266546ac680
|
data/Changelog.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
- Rails 7 / 8 compatibility. Modern ActiveRecord calls `connection` from within the `inherited`
|
|
6
|
+
hook chain (before it has set `@base_class`), and some extensions (e.g. torque-postgresql's
|
|
7
|
+
`physically_inherited?`) do the same, so `include_when_connected` could fire while a subclass was
|
|
8
|
+
still mid-definition and blow up any concern that inspects the schema. Pending includes are now
|
|
9
|
+
skipped while a class's `@base_class` is unset, applied at the end of the `inherited` hook once
|
|
10
|
+
the class is fully defined, and guarded against re-entrancy (an included concern calling
|
|
11
|
+
`connection` again).
|
|
12
|
+
- Loosened the `activerecord` / `activesupport` dependency cap (was `< 5.3`).
|
|
13
|
+
|
|
14
|
+
## 0.1.0
|
|
15
|
+
|
|
16
|
+
- Initial release.
|
data/License
CHANGED
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
|
15
15
|
|
|
16
16
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
17
17
|
spec.metadata["source_code_uri"] = spec.homepage
|
|
18
|
-
spec.metadata["changelog_uri"] = "
|
|
18
|
+
spec.metadata["changelog_uri"] = "#{spec.metadata["source_code_uri"]}/blob/master/Changelog.md"
|
|
19
19
|
|
|
20
20
|
# Specify which files should be added to the gem when it is released.
|
|
21
21
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
@@ -27,14 +27,12 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.require_paths = ["lib"]
|
|
28
28
|
|
|
29
29
|
spec.required_ruby_version = ">= 2.3.0"
|
|
30
|
-
spec.add_dependency "
|
|
31
|
-
spec.add_dependency "activerecord", [">= 4.2", "< 5.3"]
|
|
30
|
+
spec.add_dependency "activerecord"
|
|
32
31
|
|
|
33
|
-
spec.add_development_dependency "bundler"
|
|
34
|
-
spec.add_development_dependency "rake"
|
|
35
|
-
spec.add_development_dependency "rspec"
|
|
32
|
+
spec.add_development_dependency "bundler"
|
|
33
|
+
spec.add_development_dependency "rake"
|
|
34
|
+
spec.add_development_dependency "rspec"
|
|
36
35
|
spec.add_development_dependency "sqlite3"
|
|
37
|
-
spec.add_development_dependency "normalizy"
|
|
38
36
|
spec.add_development_dependency "pry"
|
|
39
37
|
spec.add_development_dependency "byebug"
|
|
40
38
|
end
|
|
@@ -5,6 +5,9 @@ module ActiveRecordInclude::WhenConnected
|
|
|
5
5
|
@@verbose = false
|
|
6
6
|
|
|
7
7
|
module ClassMethods
|
|
8
|
+
# recursive: default is true.
|
|
9
|
+
# only: (into_classes:)
|
|
10
|
+
# except:
|
|
8
11
|
def include_when_connected(mod, **options)
|
|
9
12
|
self.class_eval do
|
|
10
13
|
unless defined?(modules_to_include_when_connected)
|
|
@@ -27,36 +30,71 @@ module ActiveRecordInclude::WhenConnected
|
|
|
27
30
|
extend ActiveSupport::Concern
|
|
28
31
|
|
|
29
32
|
module ClassMethods
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
def connection(*)
|
|
34
|
+
super.tap do
|
|
35
|
+
include_pending_modules_when_connected
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
# The pending includes are also applied at the end of `inherited` (after ActiveRecord's own
|
|
42
|
+
# inherited chain has completed and set @base_class), because a class might have its
|
|
43
|
+
# scopes/concern methods accessed before any `connection` call happens on that specific class.
|
|
44
|
+
# (On Rails <= 5.2 the first connection call always happened during class definition, which had
|
|
45
|
+
# the same effective timing.)
|
|
46
|
+
def inherited(subclass)
|
|
47
|
+
super.tap do
|
|
48
|
+
if subclass < ActiveRecord::Base
|
|
49
|
+
subclass.send(:include_pending_modules_when_connected)
|
|
36
50
|
end
|
|
37
|
-
|
|
38
|
-
|
|
51
|
+
end
|
|
52
|
+
end
|
|
39
53
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
54
|
+
def include_pending_modules_when_connected
|
|
55
|
+
# Rails 7+/8: ActiveRecord (and some extensions, e.g. torque-postgresql's
|
|
56
|
+
# physically_inherited?) call `connection` from within the `inherited` hook chain, i.e.
|
|
57
|
+
# while the new subclass is still mid-definition (AR sets @base_class only *after* its
|
|
58
|
+
# inherited super chain returns). Including concerns that inspect the schema (table_exists?,
|
|
59
|
+
# table_name -> base_class) at that point breaks. Skip; the inherited-after-super hook above
|
|
60
|
+
# (or a later connection call) will perform the includes once the class is fully defined.
|
|
61
|
+
return if name.nil?
|
|
62
|
+
return if self < ActiveRecord::Base && !instance_variable_defined?(:@base_class)
|
|
63
|
+
# Guard against re-entrancy: the included concerns themselves call connection.
|
|
64
|
+
return if @_including_modules_when_connected
|
|
65
|
+
|
|
66
|
+
@_including_modules_when_connected = true
|
|
67
|
+
begin
|
|
68
|
+
self.modules_to_include_when_connected.each do |config|
|
|
69
|
+
config.each do |(mod, options)|
|
|
70
|
+
self.singleton_class.class_eval do
|
|
71
|
+
attr_accessor :modules_already_included_when_connected
|
|
45
72
|
end
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
73
|
+
self.modules_already_included_when_connected ||= []
|
|
74
|
+
next if self.modules_already_included_when_connected.include?(mod)
|
|
75
|
+
|
|
76
|
+
match = (
|
|
77
|
+
if options[:into_classes]
|
|
78
|
+
self.in? options[:into_classes]
|
|
79
|
+
else
|
|
80
|
+
self < ActiveRecord::Base && !self.abstract_class?
|
|
81
|
+
end
|
|
82
|
+
)
|
|
83
|
+
#puts %(Include #{mod} into #{self} (#{options.inspect})? #{match})
|
|
84
|
+
if match
|
|
85
|
+
puts "Including #{mod} into #{self}" if ActiveRecordInclude::WhenConnected.verbose
|
|
86
|
+
modules_already_included_when_connected << mod
|
|
87
|
+
class_eval do
|
|
88
|
+
include mod
|
|
89
|
+
end
|
|
53
90
|
end
|
|
54
91
|
end
|
|
55
|
-
|
|
92
|
+
end
|
|
93
|
+
ensure
|
|
94
|
+
@_including_modules_when_connected = false
|
|
56
95
|
end
|
|
57
96
|
end
|
|
58
97
|
end
|
|
59
|
-
end
|
|
60
98
|
end
|
|
61
99
|
end
|
|
62
100
|
|
|
@@ -65,4 +103,3 @@ ActiveSupport.on_load(:active_record) do
|
|
|
65
103
|
include ActiveRecordInclude::WhenConnected
|
|
66
104
|
end
|
|
67
105
|
end
|
|
68
|
-
|
metadata
CHANGED
|
@@ -1,99 +1,59 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_record_include
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tyler Rick
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-07-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: activesupport
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '4.2'
|
|
20
|
-
- - "<"
|
|
21
|
-
- !ruby/object:Gem::Version
|
|
22
|
-
version: '5.3'
|
|
23
|
-
type: :runtime
|
|
24
|
-
prerelease: false
|
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
-
requirements:
|
|
27
|
-
- - ">="
|
|
28
|
-
- !ruby/object:Gem::Version
|
|
29
|
-
version: '4.2'
|
|
30
|
-
- - "<"
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '5.3'
|
|
33
13
|
- !ruby/object:Gem::Dependency
|
|
34
14
|
name: activerecord
|
|
35
15
|
requirement: !ruby/object:Gem::Requirement
|
|
36
16
|
requirements:
|
|
37
17
|
- - ">="
|
|
38
18
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '
|
|
40
|
-
- - "<"
|
|
41
|
-
- !ruby/object:Gem::Version
|
|
42
|
-
version: '5.3'
|
|
19
|
+
version: '0'
|
|
43
20
|
type: :runtime
|
|
44
21
|
prerelease: false
|
|
45
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
23
|
requirements:
|
|
47
24
|
- - ">="
|
|
48
25
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: '
|
|
50
|
-
- - "<"
|
|
51
|
-
- !ruby/object:Gem::Version
|
|
52
|
-
version: '5.3'
|
|
26
|
+
version: '0'
|
|
53
27
|
- !ruby/object:Gem::Dependency
|
|
54
28
|
name: bundler
|
|
55
29
|
requirement: !ruby/object:Gem::Requirement
|
|
56
30
|
requirements:
|
|
57
|
-
- - "
|
|
31
|
+
- - ">="
|
|
58
32
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: '
|
|
33
|
+
version: '0'
|
|
60
34
|
type: :development
|
|
61
35
|
prerelease: false
|
|
62
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
63
37
|
requirements:
|
|
64
|
-
- - "
|
|
38
|
+
- - ">="
|
|
65
39
|
- !ruby/object:Gem::Version
|
|
66
|
-
version: '
|
|
40
|
+
version: '0'
|
|
67
41
|
- !ruby/object:Gem::Dependency
|
|
68
42
|
name: rake
|
|
69
43
|
requirement: !ruby/object:Gem::Requirement
|
|
70
44
|
requirements:
|
|
71
|
-
- - "
|
|
45
|
+
- - ">="
|
|
72
46
|
- !ruby/object:Gem::Version
|
|
73
|
-
version: '
|
|
47
|
+
version: '0'
|
|
74
48
|
type: :development
|
|
75
49
|
prerelease: false
|
|
76
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
77
51
|
requirements:
|
|
78
|
-
- - "
|
|
52
|
+
- - ">="
|
|
79
53
|
- !ruby/object:Gem::Version
|
|
80
|
-
version: '
|
|
54
|
+
version: '0'
|
|
81
55
|
- !ruby/object:Gem::Dependency
|
|
82
56
|
name: rspec
|
|
83
|
-
requirement: !ruby/object:Gem::Requirement
|
|
84
|
-
requirements:
|
|
85
|
-
- - "~>"
|
|
86
|
-
- !ruby/object:Gem::Version
|
|
87
|
-
version: '3.0'
|
|
88
|
-
type: :development
|
|
89
|
-
prerelease: false
|
|
90
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
91
|
-
requirements:
|
|
92
|
-
- - "~>"
|
|
93
|
-
- !ruby/object:Gem::Version
|
|
94
|
-
version: '3.0'
|
|
95
|
-
- !ruby/object:Gem::Dependency
|
|
96
|
-
name: sqlite3
|
|
97
57
|
requirement: !ruby/object:Gem::Requirement
|
|
98
58
|
requirements:
|
|
99
59
|
- - ">="
|
|
@@ -107,7 +67,7 @@ dependencies:
|
|
|
107
67
|
- !ruby/object:Gem::Version
|
|
108
68
|
version: '0'
|
|
109
69
|
- !ruby/object:Gem::Dependency
|
|
110
|
-
name:
|
|
70
|
+
name: sqlite3
|
|
111
71
|
requirement: !ruby/object:Gem::Requirement
|
|
112
72
|
requirements:
|
|
113
73
|
- - ">="
|
|
@@ -159,6 +119,7 @@ files:
|
|
|
159
119
|
- ".gitignore"
|
|
160
120
|
- ".rspec"
|
|
161
121
|
- ".travis.yml"
|
|
122
|
+
- Changelog.md
|
|
162
123
|
- Gemfile
|
|
163
124
|
- Gemfile.lock
|
|
164
125
|
- License
|
|
@@ -179,8 +140,8 @@ licenses:
|
|
|
179
140
|
metadata:
|
|
180
141
|
homepage_uri: http://github.com/TylerRick/active_record_include
|
|
181
142
|
source_code_uri: http://github.com/TylerRick/active_record_include
|
|
182
|
-
changelog_uri:
|
|
183
|
-
post_install_message:
|
|
143
|
+
changelog_uri: http://github.com/TylerRick/active_record_include/blob/master/Changelog.md
|
|
144
|
+
post_install_message:
|
|
184
145
|
rdoc_options: []
|
|
185
146
|
require_paths:
|
|
186
147
|
- lib
|
|
@@ -195,9 +156,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
195
156
|
- !ruby/object:Gem::Version
|
|
196
157
|
version: '0'
|
|
197
158
|
requirements: []
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
signing_key:
|
|
159
|
+
rubygems_version: 3.5.1
|
|
160
|
+
signing_key:
|
|
201
161
|
specification_version: 4
|
|
202
162
|
summary: Makes it easy to have specific concern modules included into all of your
|
|
203
163
|
models after the model has connected to the database
|