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