Giới thiệu
Trong quá trình nâng cấp dự án Ruby on Rails, việc theo dõi và liệt kê các route cùng với URI là rất quan trọng. Điều này giúp đội ngũ phát triển dễ dàng nhận biết những route nào bị ảnh hưởng trong quá trình thay đổi mã nguồn, từ đó giúp bộ phận QA kiểm tra và xác định các phần mềm ảnh hưởng. Ban đầu, tôi đã sử dụng lệnh rails routes
có sẵn trong Rails để lấy danh sách các route. Tuy nhiên, nó chỉ in ra kết quả trên shell, và tôi phải sao chép, định dạng lại vào bảng tính, mất rất nhiều thời gian. Vậy có cách nào để thực hiện việc này một cách hiệu quả hơn không? Tôi đã tìm ra một cách đơn giản và tiện lợi hơn, và tôi muốn chia sẻ với bạn để tiết kiệm thời gian.
Các bước thực hiện
1. Tạo một ứng dụng Rails mới
Đầu tiên, bạn cần tạo một ứng dụng Rails mẫu:
rails new export_routes_to_csv_demo
2. Tạo một file Rake
Tiếp theo, bạn cần tạo một tập tin rake để thực hiện xuất CSV:
bundle exec rails g task routes_csv csv
Tạo file routes_csv.rake
và thêm mã sau:
namespace :routes do
desc 'Xuất tất cả các route đã định nghĩa dưới dạng file CSV.'
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]}"
end
end
def header(routes)
@buffer << 'Prefix,Verb,URI Pattern,Controller#Action'
end
def no_routes
@buffer << <<-MESSAGE.strip_heredoc
Bạn không có bất kỳ route nào được định nghĩa!
Vui lòng thêm một số route vào tệp config/routes.rb.
Để biết thêm thông tin về các route, bạn có thể xem hướng dẫn Rails ở đây: 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(CSVFormatter.new)
end
end
3. Chạy lệnh xuất
Để xem kết quả trên console, bạn chạy lệnh sau:
bundle exec rake routes_csv:csv
Để xuất kết quả vào file file.csv
, bạn có thể sử dụng các lệnh sau, tùy thuộc vào hệ điều hành:
- Trên Ubuntu:
bundle exec rake routes_csv:csv | tr " " "," > file.csv
- Trên Mac:
bin/rails routes_csv:csv | pbcopy
pbpaste > file.csv
Hy vọng rằng hướng dẫn này sẽ giúp ích cho bạn trong quá trình làm việc với các route trong Ruby on Rails!
source: viblo