active_record_compose 0.1.4 → 0.1.6

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: 6f0306635ed35d2888c6a8f5ddc3d0ac5b04ba6aee2a2f6eaba304e57bc05ebc
4
- data.tar.gz: 3fdd952bc0c2b93a448f2be8b8d9a441afb20d635eab9a32ed05b6a837978d7e
3
+ metadata.gz: dd2ae31a400b17c7ab14c90bd1440060676590c23f91a61f7f54e9a7decf0294
4
+ data.tar.gz: 4a599ee2da8a5dcc3b0d9279a360b611b2e38f72304e8a837271f01e2b9821b2
5
5
  SHA512:
6
- metadata.gz: cd5b513cfe39716ea5caf87be10e5fa9e514d134bed93b54456ce8bdf071a9ec5d336efbef8f609c4d3857e3763e4ed75b757db3145ca3cf4c7e79b6c98d6826
7
- data.tar.gz: 5e92989ed498e4e244692031231ad2f3c738025a1d066f2146f4ac36b37107143c46d131a30d7fb84df22ac703d230c9062446b5049a60012dd3209fdabe5e88
6
+ metadata.gz: 18f3632810ffc48ed4bd10f78c4e54ff3c383d34231289f9639e488f270bbfd623a5f002b9f4afc653762611621c6f96b85b52498c2ba34e942d0c7c7288bfe4
7
+ data.tar.gz: 45fc861a9d223da11b841800dbc0ab689160cabdfdfda3a69433cb1d98884f76f30c742319ffc1ad3601527e9464b322456e44b73c6f098355f898909b5e340c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.6] - 2024-01-14
4
+
5
+ - add doc for `#save` and `#save!`.
6
+ - implement `#save` for symmetry with `#save!`
7
+ - add `InnerModel#initialize` doc.
8
+
9
+ ## [0.1.5] - 2024-01-11
10
+
11
+ - when invalid, raises ActiveRecord::RecordInvalid on #save!
12
+
3
13
  ## [0.1.4] - 2024-01-10
4
14
 
5
15
  - remove uniquely defined exception class.
@@ -6,6 +6,7 @@ module ActiveRecordCompose
6
6
  class InnerModel
7
7
  # @param model [Object] the model instance.
8
8
  # @param context [Symbol] :save or :destroy
9
+ # @param context [Proc] proc returning either :save or :destroy
9
10
  def initialize(model, context: :save)
10
11
  @model = model
11
12
  @context = context
@@ -19,6 +20,22 @@ module ActiveRecordCompose
19
20
  ret.presence_in(%i[save destroy]) || :save
20
21
  end
21
22
 
23
+ # Execute save or destroy. Returns true on success, false on failure.
24
+ # Whether save or destroy is executed depends on the value of context.
25
+ #
26
+ # @return [Boolean] returns true on success, false on failure.
27
+ def save
28
+ case context
29
+ when :destroy
30
+ model.destroy
31
+ else
32
+ model.save
33
+ end
34
+ end
35
+
36
+ # Execute save or destroy. Unlike #save, an exception is raises on failure.
37
+ # Whether save or destroy is executed depends on the value of context.
38
+ #
22
39
  # @return [InnerModel] self
23
40
  def save!
24
41
  case context
@@ -22,13 +22,28 @@ module ActiveRecordCompose
22
22
  super(attributes)
23
23
  end
24
24
 
25
+ # Save the models that exist in models.
26
+ # Returns false if any of the targets fail, true if all succeed.
27
+ #
28
+ # The save is performed within a single transaction.
29
+ #
30
+ # @return [Boolean] returns true on success, false on failure.
25
31
  def save
26
32
  return false if invalid?
27
33
 
28
34
  save_in_transaction { run_callbacks(:save) { save_models } }
29
35
  end
30
36
 
31
- def save! = save || raise_on_save_error
37
+ # Save the models that exist in models.
38
+ # Unlike #save, an exception is raises on failure.
39
+ #
40
+ # Saving, like `#save`, is performed within a single transaction.
41
+ #
42
+ def save!
43
+ valid? || raise_validation_error
44
+
45
+ save_in_transaction { run_callbacks(:save) { save_models } } || raise_on_save_error
46
+ end
32
47
 
33
48
  # Behavior is same to `#save`, but `before_create` and `after_create` hooks fires.
34
49
  #
@@ -65,7 +80,10 @@ module ActiveRecordCompose
65
80
  # Behavior is same to `#create`, but raises an exception prematurely on failure.
66
81
  #
67
82
  def create!(attributes = {})
68
- create(attributes) || raise_on_save_error
83
+ assign_attributes(attributes)
84
+ valid? || raise_validation_error
85
+
86
+ save_in_transaction { run_callbacks(:save) { run_callbacks(:create) { save_models } } } || raise_on_save_error
69
87
  end
70
88
 
71
89
  # Behavior is same to `#save`, but `before_update` and `after_update` hooks fires.
@@ -103,7 +121,10 @@ module ActiveRecordCompose
103
121
  # Behavior is same to `#update`, but raises an exception prematurely on failure.
104
122
  #
105
123
  def update!(attributes = {})
106
- update(attributes) || raise_on_save_error
124
+ assign_attributes(attributes)
125
+ valid? || raise_validation_error
126
+
127
+ save_in_transaction { run_callbacks(:save) { run_callbacks(:update) { save_models } } } || raise_on_save_error
107
128
  end
108
129
 
109
130
  private
@@ -130,6 +151,8 @@ module ActiveRecordCompose
130
151
 
131
152
  def save_models = wrapped_models.all? { _1.save! }
132
153
 
154
+ def raise_validation_error = raise ActiveRecord::RecordInvalid, self
155
+
133
156
  def raise_on_save_error = raise ActiveRecord::RecordNotSaved.new('Failed to save the model.', self)
134
157
  end
135
158
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecordCompose
4
- VERSION = '0.1.4'
4
+ VERSION = '0.1.6'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_compose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - hamajyotan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-09 00:00:00.000000000 Z
11
+ date: 2024-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -65,7 +65,7 @@ metadata:
65
65
  homepage_uri: https://github.com/hamajyotan/active_record_compose
66
66
  source_code_uri: https://github.com/hamajyotan/active_record_compose
67
67
  changelog_uri: https://github.com/hamajyotan/active_record_compose/blob/main/CHANGELOG.md
68
- documentation_uri: https://www.rubydoc.info/gems/active_record_compose/0.1.4
68
+ documentation_uri: https://www.rubydoc.info/gems/active_record_compose/0.1.6
69
69
  rubygems_mfa_required: 'true'
70
70
  post_install_message:
71
71
  rdoc_options: []