@@ -4,11 +4,11 @@ module Persistence
44 extend ActiveSupport ::Concern
55
66 class_methods do
7- def before_attributes ( method = nil , only : [ :create , :update ] , &blk )
7+ def before_attributes ( method = nil , only : [ :create , :update , :assign ] , &blk )
88 add_callback ( :attributes , :before , method , only , &blk )
99 end
1010
11- def after_attributes ( method = nil , only : [ :create , :update ] , &blk )
11+ def after_attributes ( method = nil , only : [ :create , :update , :assign ] , &blk )
1212 add_callback ( :attributes , :after , method , only , &blk )
1313 end
1414
@@ -69,13 +69,13 @@ def add_callback(kind, lifecycle, method, only, &blk)
6969 end
7070 end
7171
72- def assign ( assign_params , meta = nil )
72+ def assign ( assign_params , meta = nil , action_name = nil )
7373 id = assign_params [ :id ]
7474 assign_params = assign_params . except ( :id )
7575 model_instance = nil
7676
77- run_callbacks :attributes , :assign , assign_params , meta do |params |
78- model_instance = if meta [ :method ] == :update && id
77+ run_callbacks :attributes , action_name , assign_params , meta do |params |
78+ model_instance = if action_name != :create && id
7979 self . class . _find ( id : id ) . data
8080 else
8181 call_with_meta ( :build , model , meta )
@@ -91,11 +91,7 @@ def create(create_params, meta = nil)
9191 model_instance = nil
9292
9393 run_callbacks :persistence , :create , create_params , meta do
94- run_callbacks :attributes , :create , create_params , meta do |params |
95- model_instance = call_with_meta ( :build , model , meta )
96- call_with_meta ( :assign_attributes , model_instance , params , meta )
97- model_instance
98- end
94+ model_instance = assign ( create_params , meta , :create )
9995
10096 run_callbacks :save , :create , model_instance , meta do
10197 model_instance = call_with_meta ( :save , model_instance , meta )
@@ -107,15 +103,9 @@ def create(create_params, meta = nil)
107103
108104 def update ( update_params , meta = nil )
109105 model_instance = nil
110- id = update_params [ :id ]
111- update_params = update_params . except ( :id )
112106
113107 run_callbacks :persistence , :update , update_params , meta do
114- run_callbacks :attributes , :update , update_params , meta do |params |
115- model_instance = self . class . _find ( id : id ) . data
116- call_with_meta ( :assign_attributes , model_instance , params , meta )
117- model_instance
118- end
108+ model_instance = assign ( update_params , meta , :update )
119109
120110 run_callbacks :save , :update , model_instance , meta do
121111 model_instance = call_with_meta ( :save , model_instance , meta )
0 commit comments