Ruby on Rails の Routes を Controller スペックで使える感じに内部で取得する。

Ruby on Rails の Routes を Controller スペックで使える感じに内部で取得する。

ログイン時、非ログイン時の振り分けなんかは全自動総当たりテストしたいので。

routes = Rails.application.routes.routes.map do |route|
  path = route.path.spec.to_s.gsub(/\(\.:format\)/, "")
  params = path.scan(/:([a-zA-Z_]+)/).flatten.collect(&:to_sym)
  verb = %W{ GET POST PUT PATCH DELETE }.grep(route.verb).first.downcase.to_sym
  action = route.defaults[:action]
  controller = route.defaults[:controller]
  {
      #path: path,
      verb: verb,
      action: action && action.to_sym,
      controller: controller,
      params: params
  }
end

あとはパスなりコントローラーの名前なり適当に振って status code とかみてアレしてゴー。

RouteInspector ってやつを使う感じのはうまくいかなかった。