sinatra-mapping
sinatra-mapping copied to clipboard
Sinatra::Mapping extension is a minimal module that is useful for create map names for Sinatra web application.
= Sinatra::Mapping
Map easily URLs in your Web applications.
- {Homepage}[http://sinatra-mapping.rubyforge.org/]
- {Repository}[http://github.com/hallison/sinatra-mapping]
- {Project}[http://rubyforge.org/projects/sinatra-mapping]
- {Issues}[http://github.com/hallison/sinatra-mapping/issues]
The extension Sinatra::Mapping is a minimal module that is useful for create map names for {Ruby}[http://www.ruby-lang.org] {Sinatra}[http://www.sinatrarb.com] web applications.
== Getting start
Install stable version gem from {RubyForge.org}[http://www.rubyforge.org/]:
gem install sinatra-mapping
Or, install development version gem from {GitHub.com}[http://github.com/]:
gem install hallison-sinatra-mapping --source http://gems.github.com
== How to use
Sinatra implements REST routes:
get '/' do .. show something .. end
post '/' do .. create something .. end
put '/' do .. update something .. end
delete '/' do .. annihilate something .. end
For improve this routes use extension by registered method in the main source of application. To better understand, copy and paste the following example in {Ruby}[http://www.ruby-lang.org] source file +weblog.rb+:
#!/usr/bin/env ruby require 'rubygems' require 'sinatra' require 'sinatra/mapping' # only this line for use mapping!
map :root, "blog" # /blog/ map :entries, "posts" # /blog/posts map :tags, "labels" # /blog/labels
mapping :entry => "posts/:entry_id", # /blog/posts/id-for-post :entry_comments => "posts/:entry_id/comments", # /blog/posts/id-for-post/comments :tagged_entries => "labels/:tag_id/entries" # /blog/labels/id-for-tag/entries
/blog/
get root_path do <<-end_content
Welcome to Foo Web Application
- #{link_to title_path(:entries), :entries, :title => title_path(:entries)}
- #{link_to title_path(:tags), :tags, :title => title_path(:tags)}
/blog/entries
get entries_path do <<-end_content
Welcome to Foo Web Application
#{title_path(:entries)}
- #{link_to "Testing new entry ...", :entries, "testing-new-entry"}
- #{link_to "Testing old entry ...", :entries, "testing-old-entry"}
#{link_to "Back", :root}
end_content end/blog/labels/tag-id-for-show-content
get tags_path do <<-end_content
Welcome to Foo Web Application
#{title_path(:tags)}
- #{link_to "Ruby", :tags, "ruby", "entries"}
- #{link_to "Sinatra", :tags, "sinatra", "entries"}
- #{link_to "Mapping", :tags, "mapping", "entries"}
#{link_to "Back", :root}
end_content end/blog/entries/entry-id-for-show-content
get entry_path do |entry_id| title = entry_id.gsub('-',' ').capitalize <<-end_content
Welcome to Foo Web Application
#{title}
It works!
#{link_to "Back", :root} | #{link_to "Comments", :entries, entry_id, 'comments'}
end_content end/blog/entries/entry-id-for-show-content/comments
get entry_comments_path do |entry_id| title = entry_id.gsub('-',' ').capitalize <<-end_content
Welcome to Foo Web Application
#{title}
It works and show comments for "#{title}".
#{link_to "Back", :root}
end_content endget tagged_entries_path do |tag_id| <<-end_content
Welcome to Foo Web Application
#{tag_id.capitalize}
It works and show all entries tagged with "#{tag_id}".
#{link_to "Back", :root}
end_content endRun:
$ ruby weblog.rb -p 3000
Open Web browser http://localhost:3000/blog/ and look ... it works!
== Copyright
:include:LICENSE