uberloader 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 +4 -4
- data/README.md +32 -3
- data/lib/uberloader/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8492bc8a8089cb6ece086e3b2b0f0827e8c52f59d7d26d6813153c0ea7d08193
|
4
|
+
data.tar.gz: a9586e3880975bcbba4975bb969c3b0be354c6d8b51059cae77aae5d84ad86b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0a7b5dc7990d96df8c9075eff13283543f6e8dfc17eca55095a7a5ab7e629fdd1a0d4f31ecd68b5cc75c143bba73291e6638e410a446bd16f77e6c89aeffd92
|
7
|
+
data.tar.gz: 5c595cbf5702da0a6f9fdd558ab6193efc33509de2c96ac61f95da1158e8a4d811ee11dd8ab59f4c81a15868ca2d10ede18d8d62f7869a23ca66a0bc25bec3f5
|
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# Uberloader
|
2
2
|
|
3
|
-
Uberloader is a new way of preloading associations in ActiveRecord.
|
3
|
+
Uberloader is a new way of preloading associations in ActiveRecord. It works like `preload`, but with the following changes:
|
4
|
+
|
5
|
+
* Custom scopes may be given.
|
6
|
+
* Nested preloads use blocks.
|
4
7
|
|
5
8
|
```ruby
|
6
9
|
widgets = Widget
|
@@ -14,6 +17,7 @@ widgets = Widget
|
|
14
17
|
# and their subparts, using a custom scope
|
15
18
|
u.uberload(:subparts) do
|
16
19
|
u.scope my_subparts_scope_helper
|
20
|
+
u.scope Subpart.where(kind: params[:sub_kinds]) if params[:sub_kinds]&.any?
|
17
21
|
|
18
22
|
u.uberload(:foo) do
|
19
23
|
u.uberload(:bar)
|
@@ -22,9 +26,11 @@ widgets = Widget
|
|
22
26
|
end
|
23
27
|
```
|
24
28
|
|
25
|
-
|
29
|
+
Install with Bundler:
|
26
30
|
|
27
|
-
|
31
|
+
```bash
|
32
|
+
bundle add uberloader
|
33
|
+
```
|
28
34
|
|
29
35
|
## Interaction with preload and includes
|
30
36
|
|
@@ -36,6 +42,14 @@ widgets = Widget
|
|
36
42
|
.uberload(:parts, scope: Part.order(:name))
|
37
43
|
```
|
38
44
|
|
45
|
+
## On Monkeypatches and Safety
|
46
|
+
|
47
|
+
Regretably, none of this is possible without monkeypatching `ActiveRecord::Relation`'s non-public `preload_associations` method. While small, the patch has no guarntee of working in the next minor, or even tiny, patch.
|
48
|
+
|
49
|
+
To assess its stability over time, I ran Uberloader's unit tests against the full matrix of (supported) ActiveRecord and Uberloader versions. They passed consistently, but with predictable clusters of failures around pre-release and X.0.0 versions.
|
50
|
+
|
51
|
+
I will keep these tests running daily, and against this project's `main` branch as well. [You can find the link to the results here](https://github.com/jhollinger/uberloader/blob/docs/VERSION_COMPATIBILITY.md). If something breaks, I'll try to fix it. If we're lucky, maybe this behavior could get _into_ Rails itself someday...
|
52
|
+
|
39
53
|
## Testing
|
40
54
|
|
41
55
|
Testing is fully scripted under the `bin/` directory. Appraisal is used to test against various ActiveRecord versions, and Docker or Podman is used to test against various Ruby versions. The combinations to test are defined in [test/matrix](https://github.com/jhollinger/uberloader/blob/main/test/matrix).
|
@@ -61,3 +75,18 @@ bin/test ruby-3.3 ar-7.1 sqlite3 N=test_add_preload_values
|
|
61
75
|
# Use podman
|
62
76
|
PODMAN=1 bin/testall
|
63
77
|
```
|
78
|
+
|
79
|
+
### Version compatibility testing
|
80
|
+
|
81
|
+
```bash
|
82
|
+
# Test all combinations of (supported) ActiveRecord versions against all uberloader versions
|
83
|
+
bin/testall-compatibility
|
84
|
+
|
85
|
+
# Output the results as a Markdown table
|
86
|
+
bin/generate-version-test-table
|
87
|
+
|
88
|
+
# Run tests for specific versions
|
89
|
+
# Appraisal ActiveRecord Uberloader
|
90
|
+
bin/test-compatibility 7.1 7.1.3.2 0.1.0
|
91
|
+
bin/test-compatibility 7.1 7.1.3.2 HEAD
|
92
|
+
```
|
data/lib/uberloader/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uberloader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jordan Hollinger
|
8
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
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '6.0'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '7.
|
22
|
+
version: '7.3'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '6.0'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '7.
|
32
|
+
version: '7.3'
|
33
33
|
description: Customizable SQL when preloading in ActiveRecord
|
34
34
|
email: jordan.hollinger@gmail.com
|
35
35
|
executables: []
|