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