uberloader 0.2.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8492bc8a8089cb6ece086e3b2b0f0827e8c52f59d7d26d6813153c0ea7d08193
4
- data.tar.gz: a9586e3880975bcbba4975bb969c3b0be354c6d8b51059cae77aae5d84ad86b9
3
+ metadata.gz: cf39d2fc30a38dc13e238ddfc6d8d2e4bb47c6d2a3e94da375dcf328055f4ba4
4
+ data.tar.gz: c761f0bb0e277ae12781066a3ad16c9e06a049ca303966b3c0d97040d7144eb5
5
5
  SHA512:
6
- metadata.gz: d0a7b5dc7990d96df8c9075eff13283543f6e8dfc17eca55095a7a5ab7e629fdd1a0d4f31ecd68b5cc75c143bba73291e6638e410a446bd16f77e6c89aeffd92
7
- data.tar.gz: 5c595cbf5702da0a6f9fdd558ab6193efc33509de2c96ac61f95da1158e8a4d811ee11dd8ab59f4c81a15868ca2d10ede18d8d62f7869a23ca66a0bc25bec3f5
6
+ metadata.gz: 646a47d968675f8f6e156e56865187dfecc52c64cda7c86244737b515c5f2e2a15992a2678cc11d8e0cfec7fbf49dc508c2739d428238a642d90bc396a27a11f
7
+ data.tar.gz: fb8417d185f513eb3a31253a52301767cd3e08f73e9eb6faee7c8566f26f395e21e8b94c54a8b96432bd4a359a0dee9d8247ff1439456e3a6566683ba8f6f1d6
data/README.md CHANGED
@@ -1,35 +1,48 @@
1
1
  # Uberloader
2
2
 
3
- Uberloader is a new way of preloading associations in ActiveRecord. It works like `preload`, but with the following changes:
3
+ Uberloader is a new way of preloading associations in ActiveRecord. It behaves like `preload`, but with a lot more power.
4
4
 
5
- * Custom scopes may be given.
6
- * Nested preloads use blocks.
5
+ #### Install with Bundler
6
+
7
+ ```bash
8
+ bundle add uberloader
9
+ ```
10
+
11
+ #### Nested preloads use blocks
7
12
 
8
13
  ```ruby
9
14
  widgets = Widget
10
15
  .where(category_id: category_ids)
11
- # Preload category
12
16
  .uberload(:category)
13
- # Preload parts, ordered by name
14
- .uberload(:parts, scope: Part.order(:name)) do |u|
15
- # Preload the parts' manufacturer
17
+ .uberload(:parts) { |u|
16
18
  u.uberload(:manufacturer)
17
- # and their subparts, using a custom scope
18
- u.uberload(:subparts) do
19
- u.scope my_subparts_scope_helper
20
- u.scope Subpart.where(kind: params[:sub_kinds]) if params[:sub_kinds]&.any?
21
-
22
- u.uberload(:foo) do
19
+ u.uberload(:subparts) {
20
+ u.uberload(:foo) {
23
21
  u.uberload(:bar)
24
- end
25
- end
26
- end
22
+ }
23
+ }
24
+ }
27
25
  ```
28
26
 
29
- Install with Bundler:
27
+ #### Why? So you can customize preload scopes
30
28
 
31
- ```bash
32
- bundle add uberloader
29
+ ```ruby
30
+ widgets = Widget
31
+ .where(category_id: category_ids)
32
+ .uberload(:category)
33
+ # specify scope using an argument
34
+ .uberload(:parts, scope: Part.order(:name)) { |u|
35
+ u.uberload(:manufacturer)
36
+ u.uberload(:subparts) {
37
+ # or using the #scope method
38
+ u.scope my_subparts_scope_helper
39
+ u.scope Subpart.where(kind: params[:sub_kinds]) if params[:sub_kinds]&.any?
40
+
41
+ u.uberload(:foo) {
42
+ u.uberload(:bar)
43
+ }
44
+ }
45
+ }
33
46
  ```
34
47
 
35
48
  ## Interaction with preload and includes
@@ -48,7 +61,7 @@ Regretably, none of this is possible without monkeypatching `ActiveRecord::Relat
48
61
 
49
62
  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
63
 
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...
64
+ I will keep these tests running regularly. [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
65
 
53
66
  ## Testing
54
67
 
@@ -88,5 +101,4 @@ bin/generate-version-test-table
88
101
  # Run tests for specific versions
89
102
  # Appraisal ActiveRecord Uberloader
90
103
  bin/test-compatibility 7.1 7.1.3.2 0.1.0
91
- bin/test-compatibility 7.1 7.1.3.2 HEAD
92
104
  ```
@@ -0,0 +1,9 @@
1
+ module Uberloader
2
+ module Preloader
3
+ def self.call(records, association, scope = nil)
4
+ ::ActiveRecord::Associations::Preloader
5
+ .new(records: records, associations: association, scope: scope)
6
+ .call
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Uberloader
2
- VERSION = "0.2.0".freeze
2
+ VERSION = "0.4.0".freeze
3
3
  end
data/lib/uberloader.rb CHANGED
@@ -9,6 +9,7 @@ module Uberloader
9
9
 
10
10
  autoload :Preloader,
11
11
  case ActiveRecord::VERSION::MAJOR
12
+ when 8 then 'uberloader/preloader/v8'
12
13
  when 7 then 'uberloader/preloader/v7'
13
14
  when 6 then 'uberloader/preloader/v6'
14
15
  else raise "Unsupported ActiveRecord version"
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.2.0
4
+ version: 0.4.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-08-31 00:00:00.000000000 Z
11
+ date: 2025-11-10 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.3'
22
+ version: '9.0'
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.3'
32
+ version: '9.0'
33
33
  description: Customizable SQL when preloading in ActiveRecord
34
34
  email: jordan.hollinger@gmail.com
35
35
  executables: []
@@ -42,6 +42,7 @@ files:
42
42
  - lib/uberloader/context.rb
43
43
  - lib/uberloader/preloader/v6.rb
44
44
  - lib/uberloader/preloader/v7.rb
45
+ - lib/uberloader/preloader/v8.rb
45
46
  - lib/uberloader/query_methods.rb
46
47
  - lib/uberloader/uberload.rb
47
48
  - lib/uberloader/version.rb
@@ -64,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
65
  - !ruby/object:Gem::Version
65
66
  version: '0'
66
67
  requirements: []
67
- rubygems_version: 3.4.19
68
+ rubygems_version: 3.5.22
68
69
  signing_key:
69
70
  specification_version: 4
70
71
  summary: Advanced preloading for ActiveRecord