uberloader 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -3
  3. data/lib/uberloader/version.rb +1 -1
  4. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18172000e1265e1e5a71cf636dc7589a9a66ea126cbf4284657b9470b4e056eb
4
- data.tar.gz: 5ed598b20223993795bd34cbeb2dacbe0a972e1c901d17598240b797b3db05bc
3
+ metadata.gz: 8492bc8a8089cb6ece086e3b2b0f0827e8c52f59d7d26d6813153c0ea7d08193
4
+ data.tar.gz: a9586e3880975bcbba4975bb969c3b0be354c6d8b51059cae77aae5d84ad86b9
5
5
  SHA512:
6
- metadata.gz: d217e55a50c48408823c1415a7413f62645e4384e7000ef30cc6ca2764298820e86d8cd8222738f64a4fa9a3f65fe173aca69ef2e2c06f08adfa2b1f53286a3a
7
- data.tar.gz: c787e50e4d5e89cfd0673aa5f52e6634bc91d92396001f5b559b47fc0f080d271af2e6cb9ca45cca2a59632d6b7616bccaebc753b0669d52ca8583036224ce46
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. Nested preloads use blocks. Custom scopes may be given as args and/or as method calls inside a block.
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
- ## Status
29
+ Install with Bundler:
26
30
 
27
- Uberloader is an attempt to bring [ideas from OccamsRecord](https://github.com/jhollinger/occams-record/?tab=readme-ov-file#advanced-eager-loading) deeper into ActiveRecord, making them easier to use in existing applications. It's usable in production, but **note that it monkeypatches** `ActiveRecord::Relation#preload_associations`. YMMV if other gems monkeypatch this method.
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
+ ```
@@ -1,3 +1,3 @@
1
1
  module Uberloader
2
- VERSION = "0.1.0".freeze
2
+ VERSION = "0.2.0".freeze
3
3
  end
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.1.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-06-22 00:00:00.000000000 Z
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.2'
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.2'
32
+ version: '7.3'
33
33
  description: Customizable SQL when preloading in ActiveRecord
34
34
  email: jordan.hollinger@gmail.com
35
35
  executables: []