Operation hooks improvements #486
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a combined PR - because of the expected conflicts/overlap of changes.
It implements the following improvements:
To maintain 'state' between
before
andafter
hooks, ahookState
(object) property was introduced tocontext
.For consistency, all instance-level operations (
prototype.updateAttributes
andprototype.delete
) will now have access to the current instance as part of the hook'scontext
:prototype.save
+before save
: the instance will be available asinstance
(unchanged behavior).prototype.save
+after save
: the instance will be available asinstance
(unchanged behavior).prototype.updateAttributes
+before save
: because the instance should not be manipulated directly, the instance will be available as currentInstance to distinguish between theinstance
that can be directly modified (it is omitted now). In other words,currentInstance
provides the current 'state' of the instance, and it should be regarded as immutable. Any modifications should be applied tocontext.data
, which incorporates the partial nature of theupdateAttributes
operation.prototype.updateAttributes
+after save
: in after hooks, this difference is not important, and thus, the instance will be simply be available asinstance
.prototype.remove/destroy/delete
+before save
: again, the difference is irrelevant, so the instance will be available asinstance
.prototype.remove/destroy/delete
+after save
: the instance will be available asinstance
.