88
99 routes . draw do
1010 post "create" => "anonymous#create"
11+ put "update" => "anonymous#update"
1112 delete "destroy" => "anonymous#destroy"
1213 end
1314
@@ -34,6 +35,7 @@ class ApplicationResource < Graphiti::Resource
3435
3536 class EmployeeResource < ApplicationResource
3637 self . model = Employee
38+ self . type = "employees"
3739
3840 before_attributes :one
3941 before_attributes :two
@@ -168,6 +170,18 @@ def create
168170 end
169171 end
170172
173+ def update
174+ employee = IntegrationCallbacks ::EmployeeResource . _find ( params )
175+ Thread . current [ :proxy ] = employee
176+ employee . assign_attributes
177+
178+ if employee . update_attributes
179+ render jsonapi : employee
180+ else
181+ raise "whoops"
182+ end
183+ end
184+
171185 def destroy
172186 employee = IntegrationCallbacks ::EmployeeResource . _find ( params )
173187 Thread . current [ :proxy ] = employee
@@ -194,7 +208,7 @@ def params
194208 {
195209 data : {
196210 type : "employees" ,
197- attributes : { first_name : "Jane" }
211+ attributes : { first_name : "Jane" }
198212 }
199213 }
200214 end
@@ -227,6 +241,41 @@ def params
227241 end
228242 end
229243
244+ describe "update callbacks" do
245+ let! ( :employee ) { Employee . create! ( first_name : "asdf" ) }
246+ let ( :payload ) {
247+ { id : employee . id ,
248+ data : {
249+ id : employee . id ,
250+ type : 'employees' ,
251+ attributes : { first_name : "Jane" }
252+ }
253+ }
254+ }
255+
256+
257+ it "fires hooks in order" do
258+ expect {
259+ put :update , params : payload
260+ } . to change { Employee . find ( employee . id ) . first_name }
261+ employee = proxy . data
262+ expect ( employee . first_name )
263+ . to eq ( "Jane5a6a7a12347b6b5b_12a_13a_14a89_10_11_14b_13b_12b" )
264+ end
265+
266+ context "when an error is raised" do
267+ before do
268+ $raise = true
269+ end
270+
271+ it "rolls back the transaction" do
272+ expect {
273+ expect { put :update , params : payload } . to raise_error ( "test" )
274+ } . to_not ( change { Employee . count } )
275+ end
276+ end
277+ end
278+
230279 describe "destroy callbacks" do
231280 let! ( :employee ) { Employee . create! ( first_name : "Jane" ) }
232281
0 commit comments