lib/synvert/snippets/rails/convert_dynamic_finders.rb in synvert-0.0.12 vs lib/synvert/snippets/rails/convert_dynamic_finders.rb in synvert-0.0.13
- old
+ new
@@ -1,50 +1,82 @@
Synvert::Rewriter.new "convert_rails_dynamic_finders", "Convert rails dynamic finders" do
helper_method 'dynamic_finder_to_hash' do |prefix|
fields = node.message.to_s[prefix.length..-1].split("_and_")
- fields.length.times.map { |i|
- fields[i] + ": " + node.arguments[i].source(self)
- }.join(", ")
+ if fields.length == node.arguments.length && :hash != node.arguments.first.type
+ fields.length.times.map { |i|
+ fields[i] + ": " + node.arguments[i].source(self)
+ }.join(", ")
+ else
+ "{{arguments}}"
+ end
end
within_files '**/*.rb' do
# find_all_by_... => where(...)
with_node type: 'send', message: /find_all_by_/ do
hash_params = dynamic_finder_to_hash("find_all_by_")
- replace_with "{{receiver}}.where(#{hash_params})"
+ if node.receiver
+ replace_with "{{receiver}}.where(#{hash_params})"
+ else
+ replace_with "where(#{hash_params})"
+ end
end
# find_by_... => where(...).first
with_node type: 'send', message: /find_by_/ do
if :find_by_id == node.message
- replace_with "{{receiver}}.find({{arguments}})"
+ if node.receiver
+ replace_with "{{receiver}}.find({{arguments}})"
+ else
+ replace_with "find({{arguments}}"
+ end
elsif :find_by_sql != node.message
hash_params = dynamic_finder_to_hash("find_by_")
- replace_with "{{receiver}}.where(#{hash_params}).first"
+ if node.receiver
+ replace_with "{{receiver}}.where(#{hash_params}).first"
+ else
+ replace_with "where(#{hash_params}).first"
+ end
end
end
# find_last_by_... => where(...).last
with_node type: 'send', message: /find_last_by_/ do
hash_params = dynamic_finder_to_hash("find_last_by_")
- replace_with "{{receiver}}.where(#{hash_params}).last"
+ if node.receiver
+ replace_with "{{receiver}}.where(#{hash_params}).last"
+ else
+ replace_with "where(#{hash_params}).last"
+ end
end
# scoped_by_... => where(...)
with_node type: 'send', message: /scoped_by_/ do
hash_params = dynamic_finder_to_hash("scoped_by_")
- replace_with "{{receiver}}.where(#{hash_params})"
+ if node.receiver
+ replace_with "{{receiver}}.where(#{hash_params})"
+ else
+ replace_with "where(#{hash_params})"
+ end
end
# find_or_initialize_by_... => find_or_initialize_by(...)
with_node type: 'send', message: /find_or_initialize_by_/ do
hash_params = dynamic_finder_to_hash("find_or_initialize_by_")
- replace_with "{{receiver}}.find_or_initialize_by(#{hash_params})"
+ if node.receiver
+ replace_with "{{receiver}}.find_or_initialize_by(#{hash_params})"
+ else
+ replace_with "find_or_initialize_by(#{hash_params})"
+ end
end
# find_or_create_by_... => find_or_create_by(...)
with_node type: 'send', message: /find_or_create_by_/ do
hash_params = dynamic_finder_to_hash("find_or_create_by_")
- replace_with "{{receiver}}.find_or_create_by(#{hash_params})"
+ if node.receiver
+ replace_with "{{receiver}}.find_or_create_by(#{hash_params})"
+ else
+ replace_with "find_or_create_by(#{hash_params})"
+ end
end
end
end