Cách export routes sang CSV sử dụng rake
Introduction
Khi thực hiện upgrade dự án Ruby on Rails, mình phải list các route, URI để khi có sự thay đổi ảnh hưởng đến source code, team dev có thể note lại các route ảnh hưởng đó cho QA và từ route đó QA có thể check ảnh hưởng đó thuộc màn nào. Ban đầu mình sử dụng lệnh rails routes
có sẵn của Rails, tuy nhiên nhưng nó xuất các route trên shell. Sau đó mình phải thực hiện copy, update, format vào spreadsheet. Bài toán đặt ra là có cách nào tiện lợi hơn không và mình tìm thấy cách này, mình note lại đây hy vọng có thể giúp cho bạn tiết kiệm thời gian. Bạn có cách nào cùng chia sẻ với mình nha 💘
Steps
1. Create a new rails app
rails new export_routes_to_csv_demo
2. Create a rake file
Create task:
bundle exec rails g task routes_csv csv
# routes_csv.rake
namespace :routes do
desc 'Print out all defined routes in CSV format.'
task :csv => :environment do
class CSVFormatter
def initialize
@buffer = []
end
def result
@buffer.join("\n")
end
def section_title(title)
@buffer << "\n#{title}:"
end
def section(routes)
routes.map do |r|
@buffer << "#{r[:name]},#{r[:verb]},#{r[:path]},#{r[:reqs]}"
# @buffer << "#{r[:verb]} #{r[:path]}"
end
end
def header(routes)
@buffer << 'Prefix,Verb,URI Pattern,Controller#Action'
end
def no_routes
@buffer << <<-MESSAGE.strip_heredoc
You don't have any routes defined!
Please add some routes in config/routes.rb.
For more information about routes, see the Rails guide: http://guides.rubyonrails.org/routing.html.
MESSAGE
end
end
all_routes = Rails.application.routes.routes
require 'action_dispatch/routing/inspector'
inspector = ActionDispatch::Routing::RoutesInspector.new(all_routes)
# puts inspector.format(ActionDispatch::Routing::ConsoleFormatter.new, ENV['CONTROLLER'])
# puts inspector.format(CSVFormatter.new, ENV['CONTROLLER'])
puts inspector.format(CSVFormatter.new)
end
end
3. Run command
# show output in console
bundle exec rake routes_csv:csv
# export output in file.csv
# ubuntu
bundle exec rake routes_csv:csv | tr " " "," > file.csv
# mac
bin/rails routes_csv:csv | pbcopy
pbpaste > file.csv
All rights reserved