lib/chusaku/routes.rb in chusaku-0.1.1 vs lib/chusaku/routes.rb in chusaku-0.1.2
- old
+ new
@@ -6,34 +6,60 @@
#
# Example output:
#
# {
# 'users' => {
- # 'edit' => { verb: 'GET', path: '/users/:id', name: 'edit_user' },
- # 'update' => { verb: 'PUT', path: '/users', name: nil }
+ # 'edit' => {
+ # verbs: ['GET'],
+ # path: '/users/:id',
+ # name: 'edit_user'
+ # },
+ # 'update' => {
+ # verbs: ['PUT', 'PATCH'],
+ # path: '/users',
+ # name: nil
+ # }
# },
# 'empanadas' => {
- # 'create' => { verb: 'POST', path: '/empanadas', name: nil }
+ # 'create' => {
+ # verbs: ['POST'],
+ # path: '/empanadas',
+ # name: nil
+ # }
# }
# }
#
# @return {Hash}
def self.call
routes = {}
Rails.application.routes.routes.each do |route|
defaults = route.defaults
+ controller = defaults[:controller]
action = defaults[:action]
- routes[defaults[:controller]] ||= {}
- routes[defaults[:controller]][action] =
- {
- verb: route.verb,
- path: route.path.spec.to_s.gsub('(.:format)', ''),
- name: route.name
- }
+ routes[controller] ||= {}
+ if routes[controller][action].nil?
+ routes[controller][action] = format_action(route)
+ else
+ routes[controller][action][:verbs].push(route.verb)
+ end
end
routes
end
+
+ private
+
+ # Extract information of a given route.
+ #
+ # @param {ActionDispatch::Journey::Route} route
+ # @return {Hash}
+ def self.format_action(route)
+ {
+ verbs: [route.verb],
+ path: route.path.spec.to_s.gsub('(.:format)', ''),
+ name: route.name
+ }
+ end
end
end