sinatra-mapping icon indicating copy to clipboard operation
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)}
end_content end

/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 end

get 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 end

Run:

$ ruby weblog.rb -p 3000

Open Web browser http://localhost:3000/blog/ and look ... it works!

== Copyright

:include:LICENSE