Skip to content

Commit ddf776e

Browse files
committed
use PRISM_PARSER in rails/convert_mailers_2_3_to_3_0
1 parent 5703dcc commit ddf776e

File tree

1 file changed

+25
-30
lines changed

1 file changed

+25
-30
lines changed

lib/rails/convert_mailers_2_3_to_3_0.rb

+25-30
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: true
22

33
Synvert::Rewriter.new 'rails', 'convert_mailers_2_3_to_3_0' do
4-
configure(parser: Synvert::PARSER_PARSER)
4+
configure(parser: Synvert::PRISM_PARSER)
55

66
description <<~EOS
77
It converts rails mailers from 2.3 to 3.0.
@@ -75,40 +75,35 @@ def signup_notification(recipient)
7575
# mail(:to => recipient.email_address_with_name, :subject => "New account information", :from => "[email protected]", :date => Time.now)
7676
# end
7777
# end
78-
within_node node_type: 'class', parent_class: 'ActionMailer::Base' do
78+
within_node node_type: 'class_node', superclass: 'ActionMailer::Base' do
7979
class_name = node.name
80-
within_node node_type: 'def' do
80+
within_node node_type: 'def_node' do
8181
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
8484
remove
8585
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
9189
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
9492
remove
9593
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
9795
remove
9896
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")
106102
end
107103
if args.size > 0
108104
mailer_methods[class_name] ||= []
109105
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(', ')
112107
append "mail(#{args_str})"
113108
end
114109
end
@@ -119,28 +114,28 @@ def signup_notification(recipient)
119114
# Notifier.deliver_signup_notification(recipient)
120115
# =>
121116
# 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)
125120
replace_with "{{receiver}}.#{mailer_method}({{arguments}}).deliver"
126121
end
127122
end
128123

129124
# message = Notifier.create_signup_notification(recipient)
130125
# =>
131126
# 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)
135130
replace_with "{{receiver}}.#{mailer_method}({{arguments}})"
136131
end
137132
end
138133

139134
# Notifier.deliver(message)
140135
# =>
141136
# 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]
144139
replace_with '{{arguments}}.{{message}}'
145140
end
146141
end

0 commit comments

Comments
 (0)