{"id":16918929,"url":"https://github.com/rkh/sinatra-advanced-routes","last_synced_at":"2025-08-02T02:39:33.998Z","repository":{"id":56895903,"uuid":"514990","full_name":"rkh/sinatra-advanced-routes","owner":"rkh","description":"Make Sinatra routes first class objects (extracted from BigBand).","archived":false,"fork":false,"pushed_at":"2018-01-13T15:57:35.000Z","size":55,"stargazers_count":38,"open_issues_count":4,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-14T09:22:17.979Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rkh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-02-12T15:06:18.000Z","updated_at":"2022-09-14T09:01:10.000Z","dependencies_parsed_at":"2022-08-21T00:50:17.105Z","dependency_job_id":null,"html_url":"https://github.com/rkh/sinatra-advanced-routes","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkh%2Fsinatra-advanced-routes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkh%2Fsinatra-advanced-routes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkh%2Fsinatra-advanced-routes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkh%2Fsinatra-advanced-routes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rkh","download_url":"https://codeload.github.com/rkh/sinatra-advanced-routes/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234460599,"owners_count":18836843,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T19:42:24.699Z","updated_at":"2025-01-18T23:49:29.866Z","avatar_url":"https://github.com/rkh.png","language":"Ruby","funding_links":[],"categories":["Routers","Middlewares"],"sub_categories":[],"readme":"# sinatra-advanced-routes\n\n\u003e Makes routes first class objects in [Sinatra](http://sinatrarb.com).\n\n[![Build Status](https://travis-ci.org/rkh/sinatra-advanced-routes.png)](https://travis-ci.org/rkh/sinatra-advanced-routes)\n[![Gem Version](https://badge.fury.io/rb/sinatra-advanced-routes.png)](https://rubygems.org/gems/sinatra-advanced-routes)\n[![Code Climate](https://codeclimate.com/github/rkh/sinatra-advanced-routes.png)](https://codeclimate.com/github/rkh/sinatra-advanced-routes)\n\nCheck out [sinatra-contrib](https://github.com/sinatra/sinatra-contrib) you are looking for other fancy Sinatra extensions.\n\n## Installation\n\n```ruby\n# Gemfile\ngem 'sinatra-advanced-routes', :require =\u003e 'sinatra/advanced_routes'\n```\n\nIf you are serving a [modular application](https://github.com/sinatra/sinatra#modular-vs-classic-style), \nregister the extension manually :\n\n```ruby\nrequire 'sinatra/base'\nrequire 'sinatra/advanced_routes'\n\nclass Foo \u003c Sinatra::Base\n  register Sinatra::AdvancedRoutes\nend\n```\n\n## Examples\n\n### Route manipulation\n\n```ruby\nrequire 'sinatra'\nrequire 'sinatra/advanced_routes'\n\nadmin_route = get '/admin' do\n  administrate_stuff\nend\n\nbefore do\n  # Let's deactivate the route if we have no password file.\n  if File.exists? 'admin_password' then admin_route.activate\n  else admin_route.deactivate \n  end\nend\n\nfirst_route = get '/:name' do\n  # stuff\nend\n\nother_route = get '/foo_:name' do\n  # other stuff\nend\n\n# Unfortunatly first_route will catch all the requests other_route would\n# have gotten, since it has been defined first. But wait, we can fix this!\nother_route.promote\n```\n\n### Route inspection\n\n```ruby\nrequire 'some_sinatra_app'\n\nSomeSinatraApp.each_route do |route|\n  puts '-' * 20\n  puts route.app.name   # \"SomeSinatraApp\"\n  puts route.path       # that's the path given as argument to get and akin\n  puts route.verb       # get / head / post / put / delete\n  puts route.file       # \"some_sinatra_app.rb\" or something\n  puts route.line       # the line number of the get/post/... statement\n  puts route.pattern    # that's the pattern internally used by sinatra\n  puts route.keys       # keys given when route was defined\n  puts route.conditions # conditions given when route was defined\n  puts route.block      # the route's closure\nend\n```\n\nSome of that fields (like conditions or pattern) can be changed, which will take immediate effect on the routing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frkh%2Fsinatra-advanced-routes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frkh%2Fsinatra-advanced-routes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frkh%2Fsinatra-advanced-routes/lists"}