active_record_compose 0.6.3 → 0.7.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/CHANGELOG.md +10 -1
- data/README.md +68 -4
- data/lib/active_record_compose/{inner_model_collection.rb → composed_collection.rb} +14 -19
- data/lib/active_record_compose/model.rb +80 -13
- data/lib/active_record_compose/version.rb +1 -1
- data/lib/active_record_compose/{inner_model.rb → wrapped_model.rb} +3 -3
- data/sig/_internal/package_private.rbs +36 -36
- data/sig/active_record_compose.rbs +8 -4
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab0bb2d4ff8813ad8fb9a4830c2b1d3887aaa29702f11561c9c8624719a5082f
|
4
|
+
data.tar.gz: a3fcfb870aaf5a0825a218556423cc1af16644b41ec22f0b4d656cb42cd33790
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5a1ea42bd83a986437faac38b2543ee48aff7f2003afa6267a7adcd325db1bbb0506f4f1f25e2aaa13b733df7956ebd820627821f19101fc36dd4f046a51c43
|
7
|
+
data.tar.gz: 4a9cc98fddbcf1068720387207469cb527b96e536a9f109a6174b5a439daa383f54a1625e916c731d01883cf360c6e01281858a238796b5cb64b92665c2405c3
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
-
## [0.
|
3
|
+
## [0.7.0] - 2025-02-12
|
4
|
+
|
5
|
+
- rename ActiveRecordCompose::InnerModel to ActiveRecordCompose::WrappedModel
|
6
|
+
- rename ActiveRecordCompose::InnerModelCollection to ActiveRecordCompose::ComposedCollection
|
7
|
+
- A new callback control flag, `persisted_flag_callback_control`, has been defined.
|
8
|
+
Currently, the default value is false, which does not change the existing behavior, but it will be deprecated in the future.
|
9
|
+
When the flag is set to true, the behavior will be almost the same as the callback sequence in ActiveRecord.
|
10
|
+
(https://github.com/hamajyotan/active_record_compose/issues/11)
|
11
|
+
|
12
|
+
## [0.6.3] - 2025-01-31
|
4
13
|
|
5
14
|
- fix: type error in `ActiveRecordCompose::Model` subclass definitions.
|
6
15
|
- fixed type errors in subclass callback definitions, etc.
|
data/README.md
CHANGED
@@ -286,13 +286,17 @@ end
|
|
286
286
|
|
287
287
|
### Callback ordering by `#save`, `#create` and `#update`.
|
288
288
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
289
|
+
The behavior of `(before|after|around)_create` and `(before|after|around)_update` hooks depends on
|
290
|
+
the state of the `persisted_flag_callback_control` setting.
|
291
|
+
|
292
|
+
When `persisted_flag_callback_control` is set to false,
|
293
|
+
the execution of `#create`, `#update`, or `#save` determines which callbacks will be triggered.
|
294
|
+
Currently, the default value is `false`, but it will no longer be supported in the future.
|
293
295
|
|
294
296
|
```ruby
|
295
297
|
class ComposedModel < ActiveRecordCompose::Model
|
298
|
+
self.persisted_flag_callback_control = false # Currently defaults to false, but will no longer be supported in the future.
|
299
|
+
|
296
300
|
# ...
|
297
301
|
|
298
302
|
before_save { puts 'before_save called!' }
|
@@ -324,6 +328,66 @@ model.update
|
|
324
328
|
# after_save called!
|
325
329
|
```
|
326
330
|
|
331
|
+
When `persisted_flag_callback_control` is set to `true`, it behaves almost like callback control in ActiveRecord.
|
332
|
+
This behavior will be the default in the future.
|
333
|
+
|
334
|
+
```ruby
|
335
|
+
class ComposedModel < ActiveRecordCompose::Model
|
336
|
+
self.persisted_flag_callback_control = true # In the future, true will be the default and false will no longer be supported.
|
337
|
+
|
338
|
+
# ...
|
339
|
+
|
340
|
+
before_save { puts 'before_save called!' }
|
341
|
+
before_create { puts 'before_create called!' }
|
342
|
+
before_update { puts 'before_update called!' }
|
343
|
+
after_save { puts 'after_save called!' }
|
344
|
+
after_create { puts 'after_create called!' }
|
345
|
+
after_update { puts 'after_update called!' }
|
346
|
+
|
347
|
+
def persisted?
|
348
|
+
# Override and return a boolish value depending on the state of the inner model.
|
349
|
+
# For example, it could be transferred to the primary model to be manipulated.
|
350
|
+
#
|
351
|
+
# # ex.)
|
352
|
+
# def persisted? = the_model.persisted?
|
353
|
+
#
|
354
|
+
true
|
355
|
+
end
|
356
|
+
end
|
357
|
+
```
|
358
|
+
|
359
|
+
```ruby
|
360
|
+
# when `model.persisted?` returns `true`
|
361
|
+
|
362
|
+
model = ComposedModel.new
|
363
|
+
|
364
|
+
model.save # or `model.update` (the same callbacks will be triggered in all cases).
|
365
|
+
|
366
|
+
# before_save called!
|
367
|
+
# before_update called! # when persisted? is false, before_create hook is fired here instead.
|
368
|
+
# after_update called! # when persisted? is false, after_create hook is fired here instead.
|
369
|
+
# after_save called!
|
370
|
+
```
|
371
|
+
|
372
|
+
```ruby
|
373
|
+
# when `model.persisted?` returns `false`
|
374
|
+
|
375
|
+
model = ComposedModel.new
|
376
|
+
|
377
|
+
model.save # or `model.update` (the same callbacks will be triggered in all cases).
|
378
|
+
|
379
|
+
# before_save called!
|
380
|
+
# before_create called!
|
381
|
+
# after_create called!
|
382
|
+
# after_save called!
|
383
|
+
```
|
384
|
+
|
385
|
+
When `persisted_flag_callback_control` is `true`, `#create` is not supported.
|
386
|
+
|
387
|
+
```ruby
|
388
|
+
model.create # => raises RuntimeError
|
389
|
+
```
|
390
|
+
|
327
391
|
## Links
|
328
392
|
|
329
393
|
- [Smart way to update multiple models simultaneously in Rails](https://dev.to/hamajyotan/smart-way-to-update-multiple-models-simultaneously-in-rails-51b6)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'active_record_compose/
|
3
|
+
require 'active_record_compose/wrapped_model'
|
4
4
|
|
5
5
|
module ActiveRecordCompose
|
6
|
-
using
|
6
|
+
using WrappedModel::PackagePrivate
|
7
7
|
|
8
|
-
class
|
8
|
+
class ComposedCollection
|
9
9
|
include Enumerable
|
10
10
|
|
11
11
|
def initialize(owner)
|
@@ -79,30 +79,25 @@ module ActiveRecordCompose
|
|
79
79
|
attr_reader :owner, :models
|
80
80
|
|
81
81
|
def wrap(model, destroy: false, if: nil)
|
82
|
-
if
|
83
|
-
|
84
|
-
|
85
|
-
else
|
86
|
-
if destroy.is_a?(Symbol)
|
87
|
-
method = destroy
|
88
|
-
destroy = -> { owner.__send__(method) }
|
89
|
-
end
|
90
|
-
if_option = binding.local_variable_get(:if)
|
91
|
-
if if_option.is_a?(Symbol)
|
92
|
-
method = if_option
|
93
|
-
if_option = -> { owner.__send__(method) }
|
94
|
-
end
|
95
|
-
ActiveRecordCompose::InnerModel.new(model, destroy:, if: if_option)
|
82
|
+
if destroy.is_a?(Symbol)
|
83
|
+
method = destroy
|
84
|
+
destroy = -> { owner.__send__(method) }
|
96
85
|
end
|
86
|
+
if_option = binding.local_variable_get(:if)
|
87
|
+
if if_option.is_a?(Symbol)
|
88
|
+
method = if_option
|
89
|
+
if_option = -> { owner.__send__(method) }
|
90
|
+
end
|
91
|
+
ActiveRecordCompose::WrappedModel.new(model, destroy:, if: if_option)
|
97
92
|
end
|
98
93
|
|
99
94
|
# @private
|
100
95
|
module PackagePrivate
|
101
|
-
refine
|
96
|
+
refine ComposedCollection do
|
102
97
|
# Returns array of wrapped model instance.
|
103
98
|
#
|
104
99
|
# @private
|
105
|
-
# @return [Array[
|
100
|
+
# @return [Array[WrappedModel]] array of wrapped model instance.
|
106
101
|
def __wrapped_models = models.reject { _1.ignore? }.select { _1.__raw_model }
|
107
102
|
end
|
108
103
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'active_record_compose/composed_collection'
|
3
4
|
require 'active_record_compose/delegate_attribute'
|
4
|
-
require 'active_record_compose/inner_model_collection'
|
5
5
|
require 'active_record_compose/transaction_support'
|
6
6
|
|
7
7
|
module ActiveRecordCompose
|
8
|
-
using
|
8
|
+
using ComposedCollection::PackagePrivate
|
9
9
|
|
10
10
|
class Model
|
11
11
|
include ActiveModel::Model
|
@@ -15,6 +15,46 @@ module ActiveRecordCompose
|
|
15
15
|
include ActiveRecordCompose::DelegateAttribute
|
16
16
|
include ActiveRecordCompose::TransactionSupport
|
17
17
|
|
18
|
+
# This flag controls the callback sequence for models.
|
19
|
+
# The current default value is `false`, but support for `false` is planned to be discontinued in the future.
|
20
|
+
#
|
21
|
+
# When `persisted_flag_callback_control` is set to `true`,
|
22
|
+
# the occurrence of callbacks depends on the evaluation result of `#persisted?`.
|
23
|
+
# Additionally, the definition of `#persisted?` itself can be appropriately overridden in subclasses.
|
24
|
+
#
|
25
|
+
# if `#persisted?` returns `false`:
|
26
|
+
# * before_save
|
27
|
+
# * before_create
|
28
|
+
# * after_create
|
29
|
+
# * after_save
|
30
|
+
#
|
31
|
+
# if `#persisted?` returns `true`:
|
32
|
+
# * before_save
|
33
|
+
# * before_update
|
34
|
+
# * after_update
|
35
|
+
# * after_save
|
36
|
+
#
|
37
|
+
# On the other hand, when `persisted_flag_callback_control` is set to `false`,
|
38
|
+
# the invoked methods during saving operations vary depending on the method used.
|
39
|
+
#
|
40
|
+
# when performing `#save` or `#save!`:
|
41
|
+
# * before_save
|
42
|
+
# * after_save
|
43
|
+
#
|
44
|
+
# when performing `#update` or `#update!`:
|
45
|
+
# * before_save
|
46
|
+
# * before_update
|
47
|
+
# * after_update
|
48
|
+
# * after_save
|
49
|
+
#
|
50
|
+
# when performing `#create` or `#create!`:
|
51
|
+
# * before_save
|
52
|
+
# * before_create
|
53
|
+
# * after_create
|
54
|
+
# * after_save
|
55
|
+
#
|
56
|
+
class_attribute :persisted_flag_callback_control, instance_accessor: false, default: false
|
57
|
+
|
18
58
|
define_model_callbacks :save
|
19
59
|
define_model_callbacks :create
|
20
60
|
define_model_callbacks :update
|
@@ -35,7 +75,11 @@ module ActiveRecordCompose
|
|
35
75
|
return false if invalid?
|
36
76
|
|
37
77
|
with_transaction_returning_status do
|
38
|
-
|
78
|
+
if self.class.persisted_flag_callback_control
|
79
|
+
with_callbacks { save_models(bang: false) }
|
80
|
+
else
|
81
|
+
run_callbacks(:save) { save_models(bang: false) }
|
82
|
+
end
|
39
83
|
rescue ActiveRecord::RecordInvalid
|
40
84
|
false
|
41
85
|
end
|
@@ -50,7 +94,11 @@ module ActiveRecordCompose
|
|
50
94
|
valid? || raise_validation_error
|
51
95
|
|
52
96
|
with_transaction_returning_status do
|
53
|
-
|
97
|
+
if self.class.persisted_flag_callback_control
|
98
|
+
with_callbacks { save_models(bang: true) }
|
99
|
+
else
|
100
|
+
run_callbacks(:save) { save_models(bang: true) }
|
101
|
+
end
|
54
102
|
end || raise_on_save_error
|
55
103
|
end
|
56
104
|
|
@@ -80,11 +128,15 @@ module ActiveRecordCompose
|
|
80
128
|
# # after_save called!
|
81
129
|
#
|
82
130
|
def create(attributes = {})
|
131
|
+
if self.class.persisted_flag_callback_control
|
132
|
+
raise '`#create` cannot be called. The context for creation or update is determined by the `#persisted` flag.'
|
133
|
+
end
|
134
|
+
|
83
135
|
assign_attributes(attributes)
|
84
136
|
return false if invalid?
|
85
137
|
|
86
138
|
with_transaction_returning_status do
|
87
|
-
|
139
|
+
with_callbacks(context: :create) { save_models(bang: false) }
|
88
140
|
rescue ActiveRecord::RecordInvalid
|
89
141
|
false
|
90
142
|
end
|
@@ -93,11 +145,15 @@ module ActiveRecordCompose
|
|
93
145
|
# Behavior is same to `#create`, but raises an exception prematurely on failure.
|
94
146
|
#
|
95
147
|
def create!(attributes = {})
|
148
|
+
if self.class.persisted_flag_callback_control
|
149
|
+
raise '`#create` cannot be called. The context for creation or update is determined by the `#persisted` flag.'
|
150
|
+
end
|
151
|
+
|
96
152
|
assign_attributes(attributes)
|
97
153
|
valid? || raise_validation_error
|
98
154
|
|
99
155
|
with_transaction_returning_status do
|
100
|
-
|
156
|
+
with_callbacks(context: :create) { save_models(bang: true) }
|
101
157
|
end || raise_on_save_error
|
102
158
|
end
|
103
159
|
|
@@ -131,7 +187,11 @@ module ActiveRecordCompose
|
|
131
187
|
return false if invalid?
|
132
188
|
|
133
189
|
with_transaction_returning_status do
|
134
|
-
|
190
|
+
if self.class.persisted_flag_callback_control
|
191
|
+
with_callbacks { save_models(bang: false) }
|
192
|
+
else
|
193
|
+
with_callbacks(context: :update) { save_models(bang: false) }
|
194
|
+
end
|
135
195
|
rescue ActiveRecord::RecordInvalid
|
136
196
|
false
|
137
197
|
end
|
@@ -144,22 +204,29 @@ module ActiveRecordCompose
|
|
144
204
|
valid? || raise_validation_error
|
145
205
|
|
146
206
|
with_transaction_returning_status do
|
147
|
-
|
207
|
+
if self.class.persisted_flag_callback_control
|
208
|
+
with_callbacks { save_models(bang: true) }
|
209
|
+
else
|
210
|
+
with_callbacks(context: :update) { save_models(bang: true) }
|
211
|
+
end
|
148
212
|
end || raise_on_save_error
|
149
213
|
end
|
150
214
|
|
151
215
|
private
|
152
216
|
|
153
|
-
def models = @__models ||= ActiveRecordCompose::
|
217
|
+
def models = @__models ||= ActiveRecordCompose::ComposedCollection.new(self)
|
154
218
|
|
155
219
|
def validate_models
|
156
|
-
|
157
|
-
|
220
|
+
models.__wrapped_models.select { _1.invalid? }.each { errors.merge!(_1) }
|
221
|
+
end
|
222
|
+
|
223
|
+
def with_callbacks(context: nil, &block)
|
224
|
+
context ||= persisted? ? :update : :create
|
225
|
+
run_callbacks(:save) { run_callbacks(context, &block) }
|
158
226
|
end
|
159
227
|
|
160
228
|
def save_models(bang:)
|
161
|
-
|
162
|
-
wms.all? { bang ? _1.save! : _1.save }
|
229
|
+
models.__wrapped_models.all? { bang ? _1.save! : _1.save }
|
163
230
|
end
|
164
231
|
|
165
232
|
def raise_validation_error = raise ActiveRecord::RecordInvalid, self
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'active_support/core_ext/object'
|
4
4
|
|
5
5
|
module ActiveRecordCompose
|
6
|
-
class
|
6
|
+
class WrappedModel
|
7
7
|
# @param model [Object] the model instance.
|
8
8
|
# @param destroy [Boolean] given true, destroy model.
|
9
9
|
# @param destroy [Proc] when proc returning true, destroy model.
|
@@ -17,7 +17,7 @@ module ActiveRecordCompose
|
|
17
17
|
delegate :errors, to: :model
|
18
18
|
|
19
19
|
# Determines whether to save or delete the target object.
|
20
|
-
# Depends on the `destroy` value of the
|
20
|
+
# Depends on the `destroy` value of the WrappedModel object initialization option.
|
21
21
|
#
|
22
22
|
# On the other hand, there are values `mark_for_destruction` and `marked_for_destruction?` in ActiveRecord.
|
23
23
|
# However, these values are not substituted here.
|
@@ -118,7 +118,7 @@ module ActiveRecordCompose
|
|
118
118
|
|
119
119
|
# @private
|
120
120
|
module PackagePrivate
|
121
|
-
refine
|
121
|
+
refine WrappedModel do
|
122
122
|
# @private
|
123
123
|
# Returns a model instance of raw, but it should
|
124
124
|
# be noted that application developers are not expected to use this interface.
|
@@ -1,4 +1,22 @@
|
|
1
1
|
module ActiveRecordCompose
|
2
|
+
class ComposedCollection
|
3
|
+
def initialize: (Model) -> void
|
4
|
+
|
5
|
+
private
|
6
|
+
attr_reader owner: Model
|
7
|
+
attr_reader models: Array[WrappedModel]
|
8
|
+
def wrap: (ar_like, ?destroy: (bool | Symbol | destroy_context_type), ?if: (nil | Symbol | condition_type)) -> WrappedModel
|
9
|
+
|
10
|
+
module PackagePrivate
|
11
|
+
def __wrapped_models: () -> Array[WrappedModel]
|
12
|
+
|
13
|
+
private
|
14
|
+
def models: () -> Array[WrappedModel]
|
15
|
+
end
|
16
|
+
|
17
|
+
include PackagePrivate
|
18
|
+
end
|
19
|
+
|
2
20
|
module DelegateAttribute : ActiveModel::Attributes
|
3
21
|
extend ActiveSupport::Concern
|
4
22
|
|
@@ -12,25 +30,31 @@ module ActiveRecordCompose
|
|
12
30
|
end
|
13
31
|
end
|
14
32
|
|
15
|
-
class
|
16
|
-
|
33
|
+
class Model
|
34
|
+
include DelegateAttribute
|
35
|
+
extend DelegateAttribute::ClassMethods
|
36
|
+
include TransactionSupport
|
37
|
+
extend TransactionSupport::ClassMethods
|
17
38
|
|
18
|
-
|
19
|
-
|
20
|
-
attr_reader models: Array[InnerModel]
|
21
|
-
def wrap: (ar_like | InnerModel, ?destroy: (bool | Symbol | destroy_context_type), ?if: (nil | Symbol | condition_type)) -> InnerModel
|
39
|
+
@__models: ComposedCollection
|
40
|
+
end
|
22
41
|
|
23
|
-
|
24
|
-
|
42
|
+
module TransactionSupport
|
43
|
+
include ActiveRecord::Transactions
|
44
|
+
|
45
|
+
def id: -> untyped
|
46
|
+
|
47
|
+
module ClassMethods
|
48
|
+
def connection: -> ActiveRecord::ConnectionAdapters::AbstractAdapter
|
49
|
+
def lease_connection: -> ActiveRecord::ConnectionAdapters::AbstractAdapter
|
50
|
+
def with_connection: [T] () { () -> T } -> T
|
25
51
|
|
26
52
|
private
|
27
|
-
def
|
53
|
+
def ar_class: -> singleton(ActiveRecord::Base)
|
28
54
|
end
|
29
|
-
|
30
|
-
include PackagePrivate
|
31
55
|
end
|
32
56
|
|
33
|
-
class
|
57
|
+
class WrappedModel
|
34
58
|
def initialize: (ar_like, ?destroy: (bool | destroy_context_type), ?if: (nil | condition_type)) -> void
|
35
59
|
def destroy_context?: -> bool
|
36
60
|
def ignore?: -> bool
|
@@ -55,28 +79,4 @@ module ActiveRecordCompose
|
|
55
79
|
|
56
80
|
include PackagePrivate
|
57
81
|
end
|
58
|
-
|
59
|
-
class Model
|
60
|
-
include DelegateAttribute
|
61
|
-
extend DelegateAttribute::ClassMethods
|
62
|
-
include TransactionSupport
|
63
|
-
extend TransactionSupport::ClassMethods
|
64
|
-
|
65
|
-
@__models: InnerModelCollection
|
66
|
-
end
|
67
|
-
|
68
|
-
module TransactionSupport
|
69
|
-
include ActiveRecord::Transactions
|
70
|
-
|
71
|
-
def id: -> untyped
|
72
|
-
|
73
|
-
module ClassMethods
|
74
|
-
def connection: -> ActiveRecord::ConnectionAdapters::AbstractAdapter
|
75
|
-
def lease_connection: -> ActiveRecord::ConnectionAdapters::AbstractAdapter
|
76
|
-
def with_connection: [T] () { () -> T } -> T
|
77
|
-
|
78
|
-
private
|
79
|
-
def ar_class: -> singleton(ActiveRecord::Base)
|
80
|
-
end
|
81
|
-
end
|
82
82
|
end
|
@@ -34,15 +34,15 @@ module ActiveRecordCompose
|
|
34
34
|
type destroy_context_type = ((^() -> boolish) | (^(ar_like) -> boolish))
|
35
35
|
type condition_type = ((^() -> boolish) | (^(ar_like) -> boolish))
|
36
36
|
|
37
|
-
class
|
37
|
+
class ComposedCollection
|
38
38
|
include ::Enumerable[ar_like]
|
39
39
|
|
40
|
-
def each: () { (ar_like) -> void } ->
|
40
|
+
def each: () { (ar_like) -> void } -> ComposedCollection | () -> Enumerator[ar_like, self]
|
41
41
|
def <<: (ar_like) -> self
|
42
42
|
def push: (ar_like, ?destroy: (bool | Symbol | destroy_context_type), ?if: (nil | Symbol | condition_type)) -> self
|
43
43
|
def empty?: -> bool
|
44
44
|
def clear: -> self
|
45
|
-
def delete: (ar_like) ->
|
45
|
+
def delete: (ar_like) -> ComposedCollection?
|
46
46
|
end
|
47
47
|
|
48
48
|
class Model
|
@@ -69,6 +69,9 @@ module ActiveRecordCompose
|
|
69
69
|
def self.after_commit: (*callback[instance], ?if: condition[instance], ?unless: condition[instance], **untyped) ?{ () [self: instance] -> void } -> void
|
70
70
|
def self.after_rollback: (*callback[instance], ?if: condition[instance], ?unless: condition[instance], **untyped) ?{ () [self: instance] -> void } -> void
|
71
71
|
|
72
|
+
def self.persisted_flag_callback_control: () -> boolish
|
73
|
+
def self.persisted_flag_callback_control=: (boolish) -> untyped
|
74
|
+
|
72
75
|
def self.delegate_attribute: (*untyped methods, to: untyped, ?allow_nil: untyped?, ?private: untyped?) -> untyped
|
73
76
|
def self.connection: -> ActiveRecord::ConnectionAdapters::AbstractAdapter
|
74
77
|
def self.lease_connection: -> ActiveRecord::ConnectionAdapters::AbstractAdapter
|
@@ -84,7 +87,8 @@ module ActiveRecordCompose
|
|
84
87
|
def id: -> untyped
|
85
88
|
|
86
89
|
private
|
87
|
-
def models: ->
|
90
|
+
def models: -> ComposedCollection
|
91
|
+
def with_callbacks: (?context: (nil | :create | :update)) { () -> bool } -> bool
|
88
92
|
def validate_models: -> void
|
89
93
|
def save_models: (bang: bool) -> bool
|
90
94
|
def raise_validation_error: -> bot
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record_compose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hamajyotan
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-02-12 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: activerecord
|
@@ -37,12 +37,12 @@ files:
|
|
37
37
|
- LICENSE.txt
|
38
38
|
- README.md
|
39
39
|
- lib/active_record_compose.rb
|
40
|
+
- lib/active_record_compose/composed_collection.rb
|
40
41
|
- lib/active_record_compose/delegate_attribute.rb
|
41
|
-
- lib/active_record_compose/inner_model.rb
|
42
|
-
- lib/active_record_compose/inner_model_collection.rb
|
43
42
|
- lib/active_record_compose/model.rb
|
44
43
|
- lib/active_record_compose/transaction_support.rb
|
45
44
|
- lib/active_record_compose/version.rb
|
45
|
+
- lib/active_record_compose/wrapped_model.rb
|
46
46
|
- sig/_internal/package_private.rbs
|
47
47
|
- sig/active_record_compose.rbs
|
48
48
|
homepage: https://github.com/hamajyotan/active_record_compose
|
@@ -52,7 +52,7 @@ metadata:
|
|
52
52
|
homepage_uri: https://github.com/hamajyotan/active_record_compose
|
53
53
|
source_code_uri: https://github.com/hamajyotan/active_record_compose
|
54
54
|
changelog_uri: https://github.com/hamajyotan/active_record_compose/blob/main/CHANGELOG.md
|
55
|
-
documentation_uri: https://www.rubydoc.info/gems/active_record_compose/0.
|
55
|
+
documentation_uri: https://www.rubydoc.info/gems/active_record_compose/0.7.0
|
56
56
|
rubygems_mfa_required: 'true'
|
57
57
|
rdoc_options: []
|
58
58
|
require_paths:
|