module RocketDocs::Router
Public Class Methods
api_controller_names()
click to toggle source
# File lib/rocket_docs/router.rb, line 26 def api_controller_names ar = routes.named_routes.select do |_k, route| route && route.path && route.path.requirements[:version] end ar.values.map { |r| r.defaults[:controller] }.uniq end
api_controller_paths(controllers = api_controllers)
click to toggle source
# File lib/rocket_docs/router.rb, line 11 def api_controller_paths(controllers = api_controllers) controllers.map do |controller| controller.action_methods.map do |action_method| controller.instance_method(action_method).source_location.first end end.flatten.uniq.compact end
api_controllers(names = api_controller_names)
click to toggle source
# File lib/rocket_docs/router.rb, line 19 def api_controllers(names = api_controller_names) names.map do |cn| cn += '_controller' cn.classify.constantize end end
api_full()
click to toggle source
# File lib/rocket_docs/router.rb, line 4 def api_full result = {} versions.each { |v| result[v] = {} } result.each { |k, v| fill_controllers_hash_for_version(k, v) } result end
app_routes()
click to toggle source
# File lib/rocket_docs/router.rb, line 49 def app_routes Rails.application.class.routes end
routes()
click to toggle source
# File lib/rocket_docs/router.rb, line 45 def routes app_routes.routes end
routes_for_version(version)
click to toggle source
# File lib/rocket_docs/router.rb, line 33 def routes_for_version(version) routes.to_a.select do |r| versions = extract_versions_from_route(r) versions && versions.include?(version) end end
versions()
click to toggle source
# File lib/rocket_docs/router.rb, line 40 def versions routes.to_a.map { |r| extract_versions_from_route(r) } .flatten.uniq.compact end
Private Class Methods
extract_versions_from_route(route)
click to toggle source
# File lib/rocket_docs/router.rb, line 55 def extract_versions_from_route(route) return unless route && route.path && route.path.requirements[:version] route.path.requirements[:version].to_s.split('|').map do |v| v.gsub!(/[^\?]*\?(?=\d+)/, '') v.gsub!(/[^\d]*/, '') v.to_i end end
fill_controllers_hash_for_version(version, hash)
click to toggle source
# File lib/rocket_docs/router.rb, line 64 def fill_controllers_hash_for_version(version, hash) routes = routes_for_version(version) routes.each do |r| route_controller(hash, r) end end
route_action(hash, r)
click to toggle source
# File lib/rocket_docs/router.rb, line 79 def route_action(hash, r) ah = hash[r.defaults[:action]] ||= {} ah[:params] = route_params(r) route_methods(ah, r) end
route_controller(ch, r)
click to toggle source
# File lib/rocket_docs/router.rb, line 71 def route_controller(ch, r) cn = r.defaults[:controller] ch[cn] ||= {} ch[cn][:path] ||= api_controller_paths(api_controllers([cn])).first ch[cn][:actions] ||= {} route_action(ch[cn][:actions], r) end
route_methods(hash, r)
click to toggle source
# File lib/rocket_docs/router.rb, line 94 def route_methods(hash, r) hash[:methods] ||= [] hash[:methods] << r.constraints[:request_method] end
route_params(r)
click to toggle source
# File lib/rocket_docs/router.rb, line 85 def route_params(r) Hash[ r.required_parts.map do |name| type = r.constraints[name.to_sym] || '???' [name, type] end ] end