jit_preloader 3.0.0 → 8.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/.github/workflows/ci.yml +3 -2
- data/.gitignore +2 -0
- data/Gemfile +4 -2
- data/{Gemfile.6.1 → Gemfile.7.1} +1 -1
- data/README.md +2 -0
- data/Rakefile +2 -1
- data/jit_preloader.gemspec +22 -18
- data/lib/jit_preloader/active_record/base.rb +2 -0
- data/lib/jit_preloader/version.rb +1 -1
- data/spec/lib/jit_preloader/active_record/base_spec.rb +22 -0
- metadata +32 -27
- data/Gemfile.6.0 +0 -6
- data/Gemfile.6.0.lock +0 -72
- data/Gemfile.6.1.lock +0 -72
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16275182d701734a61adff78829a23effeff83a02af1a5f225e7d85e7c03a172
|
4
|
+
data.tar.gz: b44cbada71a7ed0fbfb3e05eb3fc43206b040dfcbdd0358ae6da101c50881d91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f34471c1474522b5cf9fea220e35fb092a078d1e9dff2ea4a056b8d0fb9ca0da55df97b49031f7202de659e01476869260aae4c0acd9e0d83ac3db762958637a
|
7
|
+
data.tar.gz: 45cd0fad8395d46db5d2cfef76e724ae5a02e568789ae1457c6897191d5af78d14305f5263a7d48433392a479181952958e4940c862a6b36d4cf5e0052949f0a
|
data/.github/workflows/ci.yml
CHANGED
@@ -9,12 +9,13 @@ on:
|
|
9
9
|
jobs:
|
10
10
|
test:
|
11
11
|
runs-on: ubuntu-latest
|
12
|
+
timeout-minutes: 5
|
12
13
|
strategy:
|
13
14
|
fail-fast: false
|
14
15
|
matrix:
|
15
16
|
gemfile:
|
16
17
|
- Gemfile
|
17
|
-
- Gemfile.
|
18
|
+
- Gemfile.7.1
|
18
19
|
env:
|
19
20
|
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
|
20
21
|
steps:
|
@@ -22,7 +23,7 @@ jobs:
|
|
22
23
|
- name: Set up Ruby ${{ matrix.ruby-version }}
|
23
24
|
uses: ruby/setup-ruby@v1
|
24
25
|
with:
|
25
|
-
ruby-version: 3.1
|
26
|
+
ruby-version: 3.4.1
|
26
27
|
- name: Install dependencies
|
27
28
|
run: bundle install
|
28
29
|
- name: Run tests
|
data/.gitignore
CHANGED
@@ -44,9 +44,11 @@ build-iPhoneSimulator/
|
|
44
44
|
|
45
45
|
# for a library or gem, you might want to ignore these files since the code is
|
46
46
|
# intended to run in multiple environments; otherwise, check them in:
|
47
|
+
Gemfile.7.1.lock
|
47
48
|
Gemfile.lock
|
48
49
|
# .ruby-version
|
49
50
|
# .ruby-gemset
|
50
51
|
|
51
52
|
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
52
53
|
.rvmrc
|
54
|
+
.ruby-version
|
data/Gemfile
CHANGED
data/{Gemfile.6.1 → Gemfile.7.1}
RENAMED
data/README.md
CHANGED
data/Rakefile
CHANGED
data/jit_preloader.gemspec
CHANGED
@@ -1,31 +1,35 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'jit_preloader/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
+
spec.name = 'jit_preloader'
|
8
9
|
spec.version = JitPreloader::VERSION
|
9
10
|
spec.authors = ["Kyle d'Oliveira"]
|
10
|
-
spec.email = [
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
13
|
-
spec.homepage =
|
14
|
-
spec.
|
11
|
+
spec.email = ['kyle.doliveira@clio.com']
|
12
|
+
spec.summary = 'Tool to understand N+1 queries and to remove them'
|
13
|
+
spec.description = 'The JitPreloader has the ability to send notifications when N+1 queries occur to help guage how problematic they are for your code base and a way to remove all of the commons explicitly or automatically'
|
14
|
+
spec.homepage = 'https://github.com/clio/jit_preloader'
|
15
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
16
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
17
|
+
|
18
|
+
spec.license = 'MIT'
|
15
19
|
|
16
20
|
spec.files = `git ls-files -z`.split("\x0")
|
17
21
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
22
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
23
|
+
spec.require_paths = ['lib']
|
20
24
|
|
21
|
-
spec.add_dependency
|
22
|
-
spec.add_dependency
|
25
|
+
spec.add_dependency 'activerecord', '>= 7.1', '< 9'
|
26
|
+
spec.add_dependency 'activesupport'
|
23
27
|
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
30
|
-
spec.add_development_dependency
|
28
|
+
spec.add_development_dependency 'bundler'
|
29
|
+
spec.add_development_dependency 'byebug'
|
30
|
+
spec.add_development_dependency 'database_cleaner'
|
31
|
+
spec.add_development_dependency 'db-query-matchers'
|
32
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
33
|
+
spec.add_development_dependency 'rspec'
|
34
|
+
spec.add_development_dependency 'sqlite3'
|
31
35
|
end
|
@@ -22,6 +22,7 @@ module JitPreloadExtension
|
|
22
22
|
def preload_scoped_relation(name:, base_association:, preload_scope: nil)
|
23
23
|
return jit_preload_scoped_relations[name] if jit_preload_scoped_relations&.key?(name)
|
24
24
|
|
25
|
+
base_association = base_association.to_sym
|
25
26
|
records = jit_preloader&.records || [self]
|
26
27
|
previous_association_values = {}
|
27
28
|
|
@@ -55,6 +56,7 @@ module JitPreloadExtension
|
|
55
56
|
def preload_scoped_relation(name:, base_association:, preload_scope: nil)
|
56
57
|
return jit_preload_scoped_relations[name] if jit_preload_scoped_relations&.key?(name)
|
57
58
|
|
59
|
+
base_association = base_association.to_sym
|
58
60
|
records = jit_preloader&.records || [self]
|
59
61
|
previous_association_values = {}
|
60
62
|
|
@@ -106,5 +106,27 @@ RSpec.describe "ActiveRecord::Base Extensions" do
|
|
106
106
|
expect(value).to eq([])
|
107
107
|
end
|
108
108
|
end
|
109
|
+
|
110
|
+
context "when preload_scoped_relation with string base_association name" do
|
111
|
+
it "preload properly" do
|
112
|
+
contacts = Contact.jit_preload.limit(2).to_a
|
113
|
+
|
114
|
+
call_with_string = lambda { |contact| contact.preload_scoped_relation(
|
115
|
+
name: "American Addresses",
|
116
|
+
base_association: "addresses",
|
117
|
+
preload_scope: Address.where(country: usa)
|
118
|
+
) }
|
119
|
+
|
120
|
+
usa_addresses = contacts.first.addresses.where(country: usa).to_a
|
121
|
+
expect do
|
122
|
+
expect(call_with_string.call(contacts.first)).to match_array usa_addresses
|
123
|
+
end.to make_database_queries(count: 1)
|
124
|
+
|
125
|
+
usa_addresses = contacts.last.addresses.where(country: usa).to_a
|
126
|
+
expect do
|
127
|
+
expect(call_with_string.call(contacts.last)).to match_array usa_addresses
|
128
|
+
end.to_not make_database_queries
|
129
|
+
end
|
130
|
+
end
|
109
131
|
end
|
110
132
|
end
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jit_preloader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 8.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyle d'Oliveira
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '7.1'
|
17
20
|
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
22
|
+
version: '9'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '7.1'
|
24
30
|
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
32
|
+
version: '9'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: activesupport
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,21 +59,21 @@ dependencies:
|
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '0'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
62
|
+
name: byebug
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
|
-
- - "
|
65
|
+
- - ">="
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
67
|
+
version: '0'
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
|
-
- - "
|
72
|
+
- - ">="
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
74
|
+
version: '0'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
76
|
+
name: database_cleaner
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
79
|
- - ">="
|
@@ -81,7 +87,7 @@ dependencies:
|
|
81
87
|
- !ruby/object:Gem::Version
|
82
88
|
version: '0'
|
83
89
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
90
|
+
name: db-query-matchers
|
85
91
|
requirement: !ruby/object:Gem::Requirement
|
86
92
|
requirements:
|
87
93
|
- - ">="
|
@@ -95,21 +101,21 @@ dependencies:
|
|
95
101
|
- !ruby/object:Gem::Version
|
96
102
|
version: '0'
|
97
103
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
104
|
+
name: rake
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
100
106
|
requirements:
|
101
|
-
- - "
|
107
|
+
- - "~>"
|
102
108
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
109
|
+
version: '13.0'
|
104
110
|
type: :development
|
105
111
|
prerelease: false
|
106
112
|
version_requirements: !ruby/object:Gem::Requirement
|
107
113
|
requirements:
|
108
|
-
- - "
|
114
|
+
- - "~>"
|
109
115
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
116
|
+
version: '13.0'
|
111
117
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
118
|
+
name: rspec
|
113
119
|
requirement: !ruby/object:Gem::Requirement
|
114
120
|
requirements:
|
115
121
|
- - ">="
|
@@ -123,7 +129,7 @@ dependencies:
|
|
123
129
|
- !ruby/object:Gem::Version
|
124
130
|
version: '0'
|
125
131
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
132
|
+
name: sqlite3
|
127
133
|
requirement: !ruby/object:Gem::Requirement
|
128
134
|
requirements:
|
129
135
|
- - ">="
|
@@ -151,10 +157,7 @@ files:
|
|
151
157
|
- ".gitignore"
|
152
158
|
- ".rspec"
|
153
159
|
- Gemfile
|
154
|
-
- Gemfile.
|
155
|
-
- Gemfile.6.0.lock
|
156
|
-
- Gemfile.6.1
|
157
|
-
- Gemfile.6.1.lock
|
160
|
+
- Gemfile.7.1
|
158
161
|
- LICENSE
|
159
162
|
- README.md
|
160
163
|
- Rakefile
|
@@ -176,11 +179,13 @@ files:
|
|
176
179
|
- spec/spec_helper.rb
|
177
180
|
- spec/support/database.rb
|
178
181
|
- spec/support/models.rb
|
179
|
-
homepage:
|
182
|
+
homepage: https://github.com/clio/jit_preloader
|
180
183
|
licenses:
|
181
184
|
- MIT
|
182
|
-
metadata:
|
183
|
-
|
185
|
+
metadata:
|
186
|
+
homepage_uri: https://github.com/clio/jit_preloader
|
187
|
+
source_code_uri: https://github.com/clio/jit_preloader
|
188
|
+
post_install_message:
|
184
189
|
rdoc_options: []
|
185
190
|
require_paths:
|
186
191
|
- lib
|
@@ -196,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
201
|
version: '0'
|
197
202
|
requirements: []
|
198
203
|
rubygems_version: 3.3.27
|
199
|
-
signing_key:
|
204
|
+
signing_key:
|
200
205
|
specification_version: 4
|
201
206
|
summary: Tool to understand N+1 queries and to remove them
|
202
207
|
test_files:
|
data/Gemfile.6.0
DELETED
data/Gemfile.6.0.lock
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
jit_preloader (1.0.3)
|
5
|
-
activerecord (>= 5.2, < 7)
|
6
|
-
activesupport
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
activemodel (6.0.4.1)
|
12
|
-
activesupport (= 6.0.4.1)
|
13
|
-
activerecord (6.0.4.1)
|
14
|
-
activemodel (= 6.0.4.1)
|
15
|
-
activesupport (= 6.0.4.1)
|
16
|
-
activesupport (6.0.4.1)
|
17
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (>= 0.7, < 2)
|
19
|
-
minitest (~> 5.1)
|
20
|
-
tzinfo (~> 1.1)
|
21
|
-
zeitwerk (~> 2.2, >= 2.2.2)
|
22
|
-
byebug (11.1.3)
|
23
|
-
concurrent-ruby (1.1.9)
|
24
|
-
database_cleaner (2.0.1)
|
25
|
-
database_cleaner-active_record (~> 2.0.0)
|
26
|
-
database_cleaner-active_record (2.0.1)
|
27
|
-
activerecord (>= 5.a)
|
28
|
-
database_cleaner-core (~> 2.0.0)
|
29
|
-
database_cleaner-core (2.0.1)
|
30
|
-
db-query-matchers (0.10.0)
|
31
|
-
activesupport (>= 4.0, < 7)
|
32
|
-
rspec (~> 3.0)
|
33
|
-
diff-lcs (1.4.4)
|
34
|
-
i18n (1.8.10)
|
35
|
-
concurrent-ruby (~> 1.0)
|
36
|
-
minitest (5.14.4)
|
37
|
-
rake (13.0.6)
|
38
|
-
rspec (3.10.0)
|
39
|
-
rspec-core (~> 3.10.0)
|
40
|
-
rspec-expectations (~> 3.10.0)
|
41
|
-
rspec-mocks (~> 3.10.0)
|
42
|
-
rspec-core (3.10.1)
|
43
|
-
rspec-support (~> 3.10.0)
|
44
|
-
rspec-expectations (3.10.1)
|
45
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
-
rspec-support (~> 3.10.0)
|
47
|
-
rspec-mocks (3.10.2)
|
48
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
49
|
-
rspec-support (~> 3.10.0)
|
50
|
-
rspec-support (3.10.2)
|
51
|
-
sqlite3 (1.4.2)
|
52
|
-
thread_safe (0.3.6)
|
53
|
-
tzinfo (1.2.9)
|
54
|
-
thread_safe (~> 0.1)
|
55
|
-
zeitwerk (2.4.2)
|
56
|
-
|
57
|
-
PLATFORMS
|
58
|
-
x86_64-darwin-19
|
59
|
-
|
60
|
-
DEPENDENCIES
|
61
|
-
activerecord (~> 6.0.0)
|
62
|
-
bundler
|
63
|
-
byebug
|
64
|
-
database_cleaner
|
65
|
-
db-query-matchers
|
66
|
-
jit_preloader!
|
67
|
-
rake (~> 13.0)
|
68
|
-
rspec
|
69
|
-
sqlite3
|
70
|
-
|
71
|
-
BUNDLED WITH
|
72
|
-
2.2.12
|
data/Gemfile.6.1.lock
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
jit_preloader (1.0.3)
|
5
|
-
activerecord (>= 5.2, < 7)
|
6
|
-
activesupport
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
activemodel (6.1.4.1)
|
12
|
-
activesupport (= 6.1.4.1)
|
13
|
-
activerecord (6.1.4.1)
|
14
|
-
activemodel (= 6.1.4.1)
|
15
|
-
activesupport (= 6.1.4.1)
|
16
|
-
activesupport (6.1.4.1)
|
17
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (>= 1.6, < 2)
|
19
|
-
minitest (>= 5.1)
|
20
|
-
tzinfo (~> 2.0)
|
21
|
-
zeitwerk (~> 2.3)
|
22
|
-
byebug (11.1.3)
|
23
|
-
concurrent-ruby (1.1.9)
|
24
|
-
database_cleaner (2.0.1)
|
25
|
-
database_cleaner-active_record (~> 2.0.0)
|
26
|
-
database_cleaner-active_record (2.0.1)
|
27
|
-
activerecord (>= 5.a)
|
28
|
-
database_cleaner-core (~> 2.0.0)
|
29
|
-
database_cleaner-core (2.0.1)
|
30
|
-
db-query-matchers (0.10.0)
|
31
|
-
activesupport (>= 4.0, < 7)
|
32
|
-
rspec (~> 3.0)
|
33
|
-
diff-lcs (1.4.4)
|
34
|
-
i18n (1.8.10)
|
35
|
-
concurrent-ruby (~> 1.0)
|
36
|
-
minitest (5.14.4)
|
37
|
-
rake (13.0.6)
|
38
|
-
rspec (3.10.0)
|
39
|
-
rspec-core (~> 3.10.0)
|
40
|
-
rspec-expectations (~> 3.10.0)
|
41
|
-
rspec-mocks (~> 3.10.0)
|
42
|
-
rspec-core (3.10.1)
|
43
|
-
rspec-support (~> 3.10.0)
|
44
|
-
rspec-expectations (3.10.1)
|
45
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
-
rspec-support (~> 3.10.0)
|
47
|
-
rspec-mocks (3.10.2)
|
48
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
49
|
-
rspec-support (~> 3.10.0)
|
50
|
-
rspec-support (3.10.2)
|
51
|
-
sqlite3 (1.4.2)
|
52
|
-
tzinfo (2.0.4)
|
53
|
-
concurrent-ruby (~> 1.0)
|
54
|
-
zeitwerk (2.4.2)
|
55
|
-
|
56
|
-
PLATFORMS
|
57
|
-
ruby
|
58
|
-
x86_64-darwin-19
|
59
|
-
|
60
|
-
DEPENDENCIES
|
61
|
-
activerecord (~> 6.1)
|
62
|
-
bundler
|
63
|
-
byebug
|
64
|
-
database_cleaner
|
65
|
-
db-query-matchers
|
66
|
-
jit_preloader!
|
67
|
-
rake (~> 13.0)
|
68
|
-
rspec
|
69
|
-
sqlite3
|
70
|
-
|
71
|
-
BUNDLED WITH
|
72
|
-
2.2.12
|