@@ -38,18 +38,32 @@ def send_notification
38
38
within_files Synvert ::RAILS_MODEL_FILES do
39
39
find_node '.class_node' do
40
40
callback_names_with_actions = { }
41
+ job_performed_def_names = [ ]
41
42
42
43
find_node node_type : 'call_node' , receiver : nil , name : { in : %i[ after_create after_update after_save ] } do
43
44
callback_names_with_actions [ node . arguments . arguments . first . to_value . to_s ] =
44
45
NodeMutation ::ReplaceAction . new ( node , :name , with : '{{name}}_commit' , adapter : mutation_adapter )
45
46
end
46
47
47
- find_node node_type : 'def_node' , name : { in : callback_names_with_actions . keys } do
48
+ find_node node_type : 'def_node' do
48
49
if_exist_node ".call_node[receiver=~/\\ A(#{ job_classes . join ( '|' ) } )/][name IN (perform_later perform_async perform_in perform_at)]" do
49
- add_action ( callback_names_with_actions [ node . name . to_s ] )
50
+ job_performed_def_names << node . name . to_s
50
51
end
51
52
if_exist_node ".call_node[receiver=~/\\ A(#{ mailer_classes . join ( '|' ) } )/][name=deliver_later]" do
52
- add_action ( callback_names_with_actions [ node . name . to_s ] )
53
+ job_performed_def_names << node . name . to_s
54
+ end
55
+ end
56
+
57
+ class_definition = definitions . find_class_by_full_name ( node . full_name )
58
+ callback_names_with_actions . each do |callback_name , action |
59
+ if job_performed_def_names . include? ( callback_name )
60
+ add_action ( action )
61
+ next
62
+ end
63
+
64
+ method_definition = class_definition . find_method_by_name ( callback_name )
65
+ if method_definition && method_definition . call_any_method? ( job_performed_def_names )
66
+ add_action ( action )
53
67
end
54
68
end
55
69
end
0 commit comments