n1_loader 1.6.0 → 1.6.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/.github/workflows/rubocop.yml +4 -2
- data/.github/workflows/tests.yml +3 -1
- data/CHANGELOG.md +8 -0
- data/README.md +9 -4
- data/lib/n1_loader/ar_lazy_preload/loader.rb +11 -5
- data/lib/n1_loader/version.rb +1 -1
- data/n1_loader.gemspec +1 -0
- metadata +3 -3
- data/.circleci/config.yml +0 -152
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8a914cabc2c837109b3f6f72b78dbbc4b6e64b87049568e9c6733f29b2a6867
|
4
|
+
data.tar.gz: ce9b88ee6121de3540dd13789da0c28b8c01e32598ed1dacb10af16da05e82b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a290cee96e8ba97c181267efde4f94ca494037d05e4cce93e58131faa4f6cc22c072a792e24631479b41a62cdfff0857e3dd3f51252cf7d05a4f3252eb41c5b
|
7
|
+
data.tar.gz: b4fcf0e7f3911441d542b6ab5d9f657671dcbf7864822f11c2e6854d957e49787026490f4595323c14d60348259eef5a522da4312fe6ee8ccd78a092437d8346
|
data/.github/workflows/tests.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## [1.6.2] - 2022/11/23
|
2
|
+
|
3
|
+
- Add fund metadata
|
4
|
+
|
5
|
+
## [1.6.1] - 2022/10/29
|
6
|
+
|
7
|
+
- Fix ArLazyPreload context setup when using isolated loaders for objects without the context.
|
8
|
+
|
1
9
|
## [1.6.0] - 2022/10/24
|
2
10
|
|
3
11
|
- Add support of ArLazyPreload context for isolated loaders.
|
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# N1Loader
|
2
2
|
|
3
|
-
[![CircleCI][1]][2]
|
4
3
|
[![Gem Version][3]][4]
|
4
|
+
[![][11]][12]
|
5
|
+
[![][13]][14]
|
5
6
|
[![][9]][10]
|
6
7
|
|
7
8
|
N1Loader is designed to provide a simple way for avoiding [N+1 issues][7] of any kind.
|
@@ -11,7 +12,8 @@ For example, it can help with resolving N+1 for:
|
|
11
12
|
- complex calculations
|
12
13
|
- and many more
|
13
14
|
|
14
|
-
>
|
15
|
+
> If the project helps you or your organization, I would be very grateful if you [contribute][15] or [donate][10].
|
16
|
+
> Your support is an incredible motivation and the biggest reward for my hard work.
|
15
17
|
|
16
18
|
___Support:___ ActiveRecord 5, 6, and 7.
|
17
19
|
|
@@ -253,8 +255,6 @@ Everyone interacting in the N1Loader project's codebases, issue trackers, chat r
|
|
253
255
|
|
254
256
|
Copyright (c) Evgeniy Demin. See [LICENSE.txt](LICENSE.txt) for further details.
|
255
257
|
|
256
|
-
[1]: https://circleci.com/gh/djezzzl/n1_loader/tree/master.svg?style=shield
|
257
|
-
[2]: https://circleci.com/gh/djezzzl/n1_loader/tree/master
|
258
258
|
[3]: https://badge.fury.io/rb/n1_loader.svg
|
259
259
|
[4]: https://badge.fury.io/rb/n1_loader
|
260
260
|
[5]: https://github.com/rails/rails/tree/main/activerecord
|
@@ -263,3 +263,8 @@ Copyright (c) Evgeniy Demin. See [LICENSE.txt](LICENSE.txt) for further details.
|
|
263
263
|
[8]: https://github.com/djezzzl/n1_loader
|
264
264
|
[9]: https://opencollective.com/n1_loader/tiers/badge.svg
|
265
265
|
[10]: https://opencollective.com/n1_loader#support
|
266
|
+
[11]: https://github.com/djezzzl/n1_loader/actions/workflows/tests.yml/badge.svg?branch=master
|
267
|
+
[12]: https://github.com/djezzzl/n1_loader/actions/workflows/tests.yml?query=event%3Aschedule
|
268
|
+
[13]: https://github.com/djezzzl/n1_loader/actions/workflows/rubocop.yml/badge.svg?branch=master
|
269
|
+
[14]: https://github.com/djezzzl/n1_loader/actions/workflows/rubocop.yml?query=event%3Aschedule
|
270
|
+
[15]: https://github.com/djezzzl/n1_loader#contributing
|
@@ -1,14 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Raised when a single object without ArLazyPreload context was passed to an isolated loader.
|
4
|
-
N1Loader::Loader::
|
3
|
+
# Raised when a single object without ArLazyPreload context support was passed to an isolated loader.
|
4
|
+
N1Loader::Loader::UnsupportedArLazyPreload = Class.new(StandardError)
|
5
5
|
|
6
6
|
# Defines a singleton method method that allows isolated loaders
|
7
7
|
# to use ArLazyPreload context without passing sibling records.
|
8
8
|
N1Loader::Loader.define_singleton_method(:for) do |element, **args|
|
9
|
-
# It is required to have an ArLazyPreload context
|
10
|
-
|
11
|
-
|
9
|
+
# It is required to have an ArLazyPreload context supported
|
10
|
+
raise N1Loader::Loader::UnsupportedArLazyPreload unless element.respond_to?(:lazy_preload_context)
|
11
|
+
|
12
|
+
if element.lazy_preload_context.nil?
|
13
|
+
ArLazyPreload::Context.register(
|
14
|
+
records: [element],
|
15
|
+
association_tree: [],
|
16
|
+
auto_preload: true
|
17
|
+
)
|
12
18
|
end
|
13
19
|
|
14
20
|
# Fetch or initialize loader from ArLazyPreload context
|
data/lib/n1_loader/version.rb
CHANGED
data/n1_loader.gemspec
CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.metadata["homepage_uri"] = spec.homepage
|
17
17
|
spec.metadata["source_code_uri"] = "https://github.com/djezzzl/n1_loader"
|
18
18
|
spec.metadata["changelog_uri"] = "https://github.com/djezzzl/n1_loader/master/CHANGELOG.md"
|
19
|
+
spec.metadata["funding_uri"] = "https://opencollective.com/n1_loader#support"
|
19
20
|
|
20
21
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
21
22
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: n1_loader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evgeniy Demin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -143,7 +143,6 @@ executables: []
|
|
143
143
|
extensions: []
|
144
144
|
extra_rdoc_files: []
|
145
145
|
files:
|
146
|
-
- ".circleci/config.yml"
|
147
146
|
- ".github/workflows/rubocop.yml"
|
148
147
|
- ".github/workflows/tests.yml"
|
149
148
|
- ".gitignore"
|
@@ -207,6 +206,7 @@ metadata:
|
|
207
206
|
homepage_uri: https://github.com/djezzzl/n1_loader
|
208
207
|
source_code_uri: https://github.com/djezzzl/n1_loader
|
209
208
|
changelog_uri: https://github.com/djezzzl/n1_loader/master/CHANGELOG.md
|
209
|
+
funding_uri: https://opencollective.com/n1_loader#support
|
210
210
|
post_install_message:
|
211
211
|
rdoc_options: []
|
212
212
|
require_paths:
|
data/.circleci/config.yml
DELETED
@@ -1,152 +0,0 @@
|
|
1
|
-
version: 2.1
|
2
|
-
|
3
|
-
executors:
|
4
|
-
ruby:
|
5
|
-
description: The official CircleCI Ruby Docker image
|
6
|
-
parameters:
|
7
|
-
tag:
|
8
|
-
description: The circleci/ruby Docker image version tag
|
9
|
-
type: string
|
10
|
-
default: latest
|
11
|
-
docker:
|
12
|
-
- image: circleci/ruby:<< parameters.tag >>
|
13
|
-
environment:
|
14
|
-
BUNDLE_JOBS: 4
|
15
|
-
BUNDLE_RETRY: 3
|
16
|
-
working_directory: ~/n1_loader
|
17
|
-
|
18
|
-
jobs:
|
19
|
-
checkout:
|
20
|
-
executor: ruby
|
21
|
-
steps:
|
22
|
-
- checkout
|
23
|
-
- persist_to_workspace:
|
24
|
-
root: ~/n1_loader
|
25
|
-
paths:
|
26
|
-
- .
|
27
|
-
|
28
|
-
build:
|
29
|
-
parameters:
|
30
|
-
ruby-version:
|
31
|
-
type: string
|
32
|
-
activerecord-gemfile:
|
33
|
-
type: string
|
34
|
-
ar_lazy_preload-gemfile:
|
35
|
-
type: string
|
36
|
-
environment:
|
37
|
-
ACTIVERECORD_GEMFILE: << parameters.activerecord-gemfile >>
|
38
|
-
AR_LAZY_PRELOAD_GEMFILE: << parameters.ar_lazy_preload-gemfile >>
|
39
|
-
executor:
|
40
|
-
name: ruby
|
41
|
-
tag: << parameters.ruby-version >>
|
42
|
-
steps:
|
43
|
-
- attach_workspace:
|
44
|
-
at: ~/n1_loader
|
45
|
-
- run:
|
46
|
-
name: Install the gems specified by the Gemfile
|
47
|
-
command: bundle install
|
48
|
-
- run:
|
49
|
-
name: Run Core RSpec
|
50
|
-
command: |
|
51
|
-
bundle exec rspec --profile 10 \
|
52
|
-
--format RspecJunitFormatter \
|
53
|
-
--out test_results/core.xml \
|
54
|
-
--format progress \
|
55
|
-
spec/n1_loader_spec.rb
|
56
|
-
- run:
|
57
|
-
name: Run ActiveRecord integration RSpec
|
58
|
-
command: |
|
59
|
-
bundle exec rspec --profile 10 \
|
60
|
-
--format RspecJunitFormatter \
|
61
|
-
--out test_results/activerecord-integration.xml \
|
62
|
-
--format progress \
|
63
|
-
spec/n1_loader_spec.rb \
|
64
|
-
spec/activerecord_spec.rb
|
65
|
-
- run:
|
66
|
-
name: Run ActiveRecord integration RSpec
|
67
|
-
command: |
|
68
|
-
bundle exec rspec --profile 10 \
|
69
|
-
--format RspecJunitFormatter \
|
70
|
-
--out test_results/ar-lazy-preload-integration.xml \
|
71
|
-
--format progress \
|
72
|
-
spec/n1_loader_spec.rb \
|
73
|
-
spec/activerecord_spec.rb \
|
74
|
-
spec/ar_lazy_preload_spec.rb
|
75
|
-
- store_test_results:
|
76
|
-
path: test_results
|
77
|
-
|
78
|
-
rubocop:
|
79
|
-
executor:
|
80
|
-
name: ruby
|
81
|
-
tag: "2.5"
|
82
|
-
steps:
|
83
|
-
- attach_workspace:
|
84
|
-
at: ~/n1_loader
|
85
|
-
- run:
|
86
|
-
name: Install the gems specified by the Gemfile
|
87
|
-
command: bundle install
|
88
|
-
- run:
|
89
|
-
name: Lint Ruby code with RuboCop
|
90
|
-
command: bundle exec rubocop --parallel
|
91
|
-
|
92
|
-
workflows:
|
93
|
-
version: 2
|
94
|
-
default: &default
|
95
|
-
jobs:
|
96
|
-
- checkout
|
97
|
-
- build:
|
98
|
-
requires:
|
99
|
-
- checkout
|
100
|
-
matrix:
|
101
|
-
parameters:
|
102
|
-
ruby-version: [
|
103
|
-
"2.7",
|
104
|
-
"latest"
|
105
|
-
]
|
106
|
-
activerecord-gemfile: [
|
107
|
-
"ar_5_latest",
|
108
|
-
"ar_6_latest",
|
109
|
-
"ar_7_latest"
|
110
|
-
]
|
111
|
-
ar_lazy_preload-gemfile: [
|
112
|
-
"ar_lazy_preload_0.6.1",
|
113
|
-
"ar_lazy_preload_master"
|
114
|
-
]
|
115
|
-
exclude:
|
116
|
-
# AR 5 and ruby 3+
|
117
|
-
- ruby-version: "latest"
|
118
|
-
activerecord-gemfile: "ar_5_latest"
|
119
|
-
ar_lazy_preload-gemfile: "ar_lazy_preload_0.6.1"
|
120
|
-
|
121
|
-
- ruby-version: "latest"
|
122
|
-
activerecord-gemfile: "ar_5_latest"
|
123
|
-
ar_lazy_preload-gemfile: "ar_lazy_preload_master"
|
124
|
-
|
125
|
-
# AR 7 and ar_lazy_preload < 1
|
126
|
-
- ruby-version: "2.5"
|
127
|
-
activerecord-gemfile: "ar_7_latest"
|
128
|
-
ar_lazy_preload-gemfile: "ar_lazy_preload_0.6.1"
|
129
|
-
|
130
|
-
- ruby-version: "2.7"
|
131
|
-
activerecord-gemfile: "ar_7_latest"
|
132
|
-
ar_lazy_preload-gemfile: "ar_lazy_preload_0.6.1"
|
133
|
-
|
134
|
-
- ruby-version: "latest"
|
135
|
-
activerecord-gemfile: "ar_7_latest"
|
136
|
-
ar_lazy_preload-gemfile: "ar_lazy_preload_0.6.1"
|
137
|
-
|
138
|
-
|
139
|
-
name: ruby-<< matrix.ruby-version >>-<< matrix.activerecord-gemfile >>-<< matrix.ar_lazy_preload-gemfile >>
|
140
|
-
- rubocop:
|
141
|
-
requires:
|
142
|
-
- checkout
|
143
|
-
|
144
|
-
nightly:
|
145
|
-
triggers:
|
146
|
-
- schedule:
|
147
|
-
cron: "0 0 * * *"
|
148
|
-
filters:
|
149
|
-
branches:
|
150
|
-
only:
|
151
|
-
- master
|
152
|
-
<<: *default
|