Sinatraでrake routesその2
いま流行りっぽいYARDのSinatra用gem yard-sinatra | RubyGems.org | your community gem host を使うと
簡単にルーティングを出力できるみたい。
↓の"Other use cases"を見た。
Gemfile
source 'http://rubygems.org' gem 'rake' gem 'sinatra' group :development do gem 'yard' gem 'yard-sinatra' end
Rakefile
task "routes" do require "yard/sinatra" YARD::Registry.load ["./app.rb"], true YARD::Sinatra.routes.each do |route| puts route.http_verb, route.http_path, route.file, route.docstring end end
YARD::Registry.loadは1回読み込むとキャッシュが使われて2回め以降動かなくなるので
trueをつけて毎回parseするようにした。
app.rb
サンプルシナトラ
require "sinatra" get "/" do "foooooooooo!" end get "/bar" do "baaaaaaaaaaaar!" end post "/bar" do "POST baaaaaaaaaaaar!" end put "/bar" do "PUT baaaaaaaaaaaar!" end get "/baz/:id" do "baz: #{params[:id]}" end
rake routes
$ bundle exec rake routes GET / app.rb GET /bar app.rb POST /bar app.rb PUT /bar app.rb GET /baz/:id app.rb
もっとRailsっぽく
Rakefileをこうしてみる。
task "routes" do require "yard/sinatra" YARD::Registry.load ["./app.rb"], true routes = [] YARD::Sinatra.routes.each do |route| routes << [route.http_verb, route.http_path, route.file] end max_verb_len = routes.map{|r|r[0].length}.max max_path_len = routes.map{|r|r[1].length}.max routes.each do |r| puts "%-#{max_verb_len}s %-#{max_path_len}s %s" % r end end
$ bundle exec rake routes GET / app.rb GET /bar app.rb POST /bar app.rb PUT /bar app.rb GET /baz/:id app.rb
いいね!