1
1
# frozen_string_literal: true
2
2
3
3
Synvert ::Rewriter . new 'rails' , 'convert_mailers_2_3_to_3_0' do
4
- configure ( parser : Synvert ::PARSER_PARSER )
4
+ configure ( parser : Synvert ::PRISM_PARSER )
5
5
6
6
description <<~EOS
7
7
It converts rails mailers from 2.3 to 3.0.
@@ -75,40 +75,35 @@ def signup_notification(recipient)
75
75
# mail(:to => recipient.email_address_with_name, :subject => "New account information", :from => "[email protected] ", :date => Time.now)
76
76
# end
77
77
# end
78
- within_node node_type : 'class ' , parent_class : 'ActionMailer::Base' do
78
+ within_node node_type : 'class_node ' , superclass : 'ActionMailer::Base' do
79
79
class_name = node . name
80
- within_node node_type : 'def ' do
80
+ within_node node_type : 'def_node ' do
81
81
args = { }
82
- with_node node_type : 'send ' , receiver : nil , message : 'recipients' do
83
- args [ :to ] = node . arguments . first . to_source
82
+ with_node node_type : 'call_node ' , receiver : nil , name : 'recipients' , arguments : { node_type : 'arguments_node' , arguments : { size : 1 } } do
83
+ args [ :to ] = node . arguments . arguments . first . to_source
84
84
remove
85
85
end
86
- %w[ subject from cc bcc ] . each do |message |
87
- with_node node_type : 'send' , receiver : nil , message : message do
88
- args [ message . to_sym ] = node . arguments . first . to_source
89
- remove
90
- end
86
+ with_node node_type : 'call_node' , receiver : nil , name : { in : %w[ subject from cc bcc ] } do
87
+ args [ node . name ] = node . arguments . arguments . first . to_source
88
+ remove
91
89
end
92
- with_node node_type : 'send ' , receiver : nil , message : 'sent_on' do
93
- args [ :date ] = node . arguments . first . to_source
90
+ with_node node_type : 'call_node ' , receiver : nil , name : 'sent_on' do
91
+ args [ :date ] = node . arguments . arguments . first . to_source
94
92
remove
95
93
end
96
- with_node node_type : 'send ' , receiver : nil , message : 'content_type' do
94
+ with_node node_type : 'call_node ' , receiver : nil , name : 'content_type' do
97
95
remove
98
96
end
99
- with_node node_type : 'send' , receiver : nil , message : 'body' , arguments : { size : 1 } do
100
- body_argument = node . arguments . first
101
- if :hash == body_argument . type
102
- replace_with body_argument . children . map { |pair_node |
103
- "@#{ pair_node . key . to_value } = #{ pair_node . value . to_source } "
104
- } . join ( "\n " )
105
- end
97
+ with_node node_type : 'call_node' ,
98
+ receiver : nil ,
99
+ name : 'body' ,
100
+ arguments : { node_type : 'arguments_node' , arguments : { size : 1 , first : { node_type : 'keyword_hash_node' } } } do
101
+ replace_with node . arguments . arguments . first . elements . map { |element | "@#{ element . key . to_value } = #{ element . value . to_source } " } . join ( "\n " )
106
102
end
107
103
if args . size > 0
108
104
mailer_methods [ class_name ] ||= [ ]
109
105
mailer_methods [ class_name ] << node . name
110
- args_str = args . map { |key , value | ":#{ key } => #{ value } " }
111
- . join ( ', ' )
106
+ args_str = args . map { |key , value | ":#{ key } => #{ value } " } . join ( ', ' )
112
107
append "mail(#{ args_str } )"
113
108
end
114
109
end
@@ -119,28 +114,28 @@ def signup_notification(recipient)
119
114
# Notifier.deliver_signup_notification(recipient)
120
115
# =>
121
116
# Notifier.signup_notification(recipient).deliver
122
- with_node node_type : 'send ' , message : /^deliver_/ do
123
- mailer_method = node . message . to_s . sub ( /^deliver_/ , '' ) . to_sym
124
- if mailer_methods [ node . receiver ] && mailer_methods [ node . receiver ] . include? ( mailer_method )
117
+ with_node node_type : 'call_node ' , name : /^deliver_/ do
118
+ mailer_method = node . name . to_s . sub ( /^deliver_/ , '' ) . to_sym
119
+ if mailer_methods [ node . receiver . name ] && mailer_methods [ node . receiver . name ] . include? ( mailer_method )
125
120
replace_with "{{receiver}}.#{ mailer_method } ({{arguments}}).deliver"
126
121
end
127
122
end
128
123
129
124
# message = Notifier.create_signup_notification(recipient)
130
125
# =>
131
126
# message = Notifier.signup_notification(recipient)
132
- with_node node_type : 'send ' , message : /^create_/ do
133
- mailer_method = node . message . to_s . sub ( /^create_/ , '' ) . to_sym
134
- if mailer_methods [ node . receiver ] && mailer_methods [ node . receiver ] . include? ( mailer_method )
127
+ with_node node_type : 'call_node ' , name : /^create_/ do
128
+ mailer_method = node . name . to_s . sub ( /^create_/ , '' ) . to_sym
129
+ if mailer_methods [ node . receiver . name ] && mailer_methods [ node . receiver . name ] . include? ( mailer_method )
135
130
replace_with "{{receiver}}.#{ mailer_method } ({{arguments}})"
136
131
end
137
132
end
138
133
139
134
# Notifier.deliver(message)
140
135
# =>
141
136
# message.deliver
142
- with_node node_type : 'send ' , message : 'deliver' do
143
- if mailer_methods [ node . receiver ]
137
+ with_node node_type : 'call_node ' , name : 'deliver' , arguments : { node_type : 'arguments_node' , arguments : { size : 1 } } do
138
+ if mailer_methods [ node . receiver . name ]
144
139
replace_with '{{arguments}}.{{message}}'
145
140
end
146
141
end
0 commit comments