+1

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

Ref: https://linuxtut.com/output-rails-routes-as-csv-defdf/


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí