Merb Tips II

* this content is now outdated and only applied to Merb 0.9*

I the previous post I covered few useful tips for Merb 0.9. The good news is that Merb should get its wiki setup over the week end!

Here is another batch of hopefully useful tips:

  • In init.rb, you can define a dependency and specify a version number: dependency “merb_fu”, “>= 1.0”

  • If you want to run your application from a subdirectory, once again, in your init.rb file, add: c[:path_prefix] = “/your_prefix” (note, that you can also do that in a specific environment file.)

  • You feel like limiting a route to a specific request such as a DELETE? In your router.rb file add the following:

    1 2

    r.match(/:bucket_id, :method => :delete).to(:controller => buckets, :action => destroy)

  • Since we are talking about routes, what about an iPhone only route?

    1 2

    r.match(%r[/(.+)<span class=”dl”>], :user_agent => /iPhone/).to(:controller => mobile, :title => Welcome Apple FanBoy, :action => show)

  • what about an admin section for my blogposts?

    1 2 3 4

    r.match(/admin) do |admin| admin.resources :blogposts end

  • To finish with the routes, look at the following merb-core spec

    1 2 3 4 5 6 7 8 9

    it should allow you to restrict routes based on protocol do Merb::Router.prepare do |r| r.match(:protocol => http://).to(:controller => foo, :action => bar) r.default_routes end route_to(/foo/bar).should have_route(:controller => foo, :action => bar) route_to(/boo/hoo, :protocol => https://).should have_route(:controller => boo, :action => hoo) end

You can set custom routes to only work when connected via SSL, that’s just really nice!

  • Other quick tip. Last time we saw how to install locally all the required gems. Well, you can also freeze merb by doing:

    1 2

    merb-gen frozen-merb

  • Another common IRC question, how do I use Merb’s logger. It’s really easy:

    1 2

    Merb.logger.info(our stuff)

Where info is the debugging level you want to send your message to.

  • Finally, today in IRC a Rails user asked how reset a session in Merb. Rails has a reset_session method that resets the session by clearing out all the objects stored within and initializing a new session object. Merb simply uses a hash to store sessions, so session.clear will do it ;)

Feel free to add a comment with your Merb tips or leave a question regarding something you can’t seem to be able to do with Merb.

By Matt Aimonetti