Module: Sinatra::Mapping
- Defined in:
- lib/sinatra/mapping.rb
Overview
Copyright © 2009 Hallison Batista
This extension is useful for any Web application written using Sinatra DSL. The main goal is help developers to write URL path methods.
Defined Under Namespace
Modules: Helpers
Instance Attribute Summary collapse
-
#locations ⇒ Object
readonly
All location paths mapped.
Class Method Summary collapse
-
.registered(app) ⇒ Object
Register automatically all helpers in base application.
Instance Method Summary collapse
-
#map(name, path = nil) ⇒ Object
Write URL path method for use in HTTP methods.
-
#mapping(hash) ⇒ Object
Auto mapping from a hash.
Instance Attribute Details
#locations ⇒ Object (readonly)
All location paths mapped.
15 16 17 |
# File 'lib/sinatra/mapping.rb', line 15 def locations @locations end |
Class Method Details
Instance Method Details
#map(name, path = nil) ⇒ Object
Write URL path method for use in HTTP methods.
The map method most be used by following syntax:
map <name>, <path>
If name is equal :root, then returns path ended by slash “/”.
map :root, "tasks" #=> /tasks/
map :changes, "last-changes #=> /tasks/last-changes
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/sinatra/mapping.rb', line 27 def map(name, path = nil) @locations ||= {} if name.to_sym == :root @locations[:root] = cleanup_paths("/#{path}/") "#{name}_path" do |*paths| cleanup_paths("/#{@locations[:root]}/?") end else @locations[name.to_sym] = cleanup_paths(path || name.to_s) "#{name}_path" do |*paths| map_path_to(@locations[name.to_sym], *paths << "/?") end end Delegator.delegate "#{name}_path" end |
#mapping(hash) ⇒ Object
Auto mapping from a hash. This method is very useful. Example:
In Web application:
class WebApp << Sinatra::Base
mapping :root => "tasks", # /tasks
:status => "changes" # /tasks/changes
end
Or, it’s possible use from configuration file.
# YAML file "mapping.yml".
root: tasks
status: changes
# In Sinatra application.
mapping YAML.load_file("mapping.yml")
#=> root_path # /tasks
#=> status_path # /tasks/changes
64 65 66 67 68 |
# File 'lib/sinatra/mapping.rb', line 64 def mapping(hash) hash.each do |name, path| map name, path end end |