Skip to content

Instantly share code, notes, and snippets.

@siman-man
Last active September 2, 2018 01:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save siman-man/b0b9914754567a45de52a47fede6b3e8 to your computer and use it in GitHub Desktop.
Save siman-man/b0b9914754567a45de52a47fede6b3e8 to your computer and use it in GitHub Desktop.
get sinatra routes.
require 'parser/current'
class SinatraRoutes
attr_reader :filepath
def initialize(filepath)
@filepath = filepath
end
def routes
@_routes = []
traverse(Parser::CurrentRuby.parse(File.read(filepath)))
@_routes.sort_by do |method, path|
[path, method]
end.each do |method, path|
puts "#{method}\t#{path}"
end
end
private
def traverse(parent)
return if parent.nil?
loc = parent.loc
if loc.instance_of?(Parser::Source::Map::Send)
if loc.selector.source =~ /^(get|post|put|head|delete|patch)$/
@_routes << [loc.node.children[1].upcase, loc.node.children[2].children[0]]
end
end
parent.children.select { |n| n.instance_of?(Parser::AST::Node) }.each do |child|
traverse(child)
end
end
end
SinatraRoutes.new('app.rb').routes
@siman-man
Copy link
Author

require parser gem

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment