Class: Ramaze::AddressableRoute
- Defined in:
- lib/ramaze/contrib/addressable_route.rb
Overview
This is a simple prototype-implementation of how we could do routing supported by URI templates.
Please see the spec for example usage as it’s not integrated yet in any way.
What it does is basically that you can give it any URI template and a final mapping, and it will extract the variables from the URI and merge them into the QUERY_STRING, which is parsed again in Ramaze if you issue Request#params.
I haven’t explored the full capabilities of the templates yet, but the specs of Addressable::Template suggest that there is a lot to be discovered.
Constant Summary collapse
- ROUTES =
{}
Class Method Summary collapse
Instance Method Summary collapse
- #call(env) ⇒ Object
- #dispatch(env, target, extracted) ⇒ Object
-
#initialize(app) ⇒ AddressableRoute
constructor
A new instance of AddressableRoute.
Constructor Details
#initialize(app) ⇒ AddressableRoute
Returns a new instance of AddressableRoute.
32 33 34 |
# File 'lib/ramaze/contrib/addressable_route.rb', line 32 def initialize(app) @app = app end |
Class Method Details
Instance Method Details
#call(env) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/ramaze/contrib/addressable_route.rb', line 36 def call(env) path_info = env['PATH_INFO'] ROUTES.each do |template, target| extracted = template.extract(path_info) return dispatch(env, target, extracted) if extracted end @app.call(env) end |
#dispatch(env, target, extracted) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/ramaze/contrib/addressable_route.rb', line 47 def dispatch(env, target, extracted) env['PATH_INFO'] = target original = Rack::Utils.parse_query(env['QUERY_STRING']) env['QUERY_STRING'] = Rack::Utils.build_query(original.merge(extracted)) @app.call(env) end |