Skip to content

Automatically detect mobile requests from mobile devices in your Rails application. This fork adds the ability to ignore curtain request formats from being mobilized.

License

Notifications You must be signed in to change notification settings

refaelos/mobile-fu

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mobile Fu

This fork adds the ability to ignore curtain request formats from being mobilized. You might want to return JSON for :json or :iphone mime types and not let mobile_fu convert your format to :mobile.

Usage example at the end of this file.

Want to automatically detect mobile devices that access your Rails application?

Mobile Fu allows you to do just that. People can access your site from a Palm, Blackberry, iPhone, iPad, Nokia, etc. and it will automatically adjust the format of the request from :html to :mobile.

Rails 3 Compatibility

The master branch of this plugin is Rails 3 compatible.

To use the Rails 3 compatible version of this plugin, please install it like so:

rails plugin install git://github.com/brendanlim/mobile-fu.git

Rails 2 Compatibility

You will need to install this plugin from the 2.x branch.

To use the Rails 2 compatible version of this plugin, please install it like so:

script/plugin install git://github.com/brendanlim/mobile-fu.git -r 2.x

Usage

Add this this one line to the controller.

class ApplicationController < ActionController::Base
  has_mobile_fu
end

Once this is in place, any request that comes from a mobile device will be be set as :mobile format. It is up to you to determine how you want to handle these requests. It is also up to you to create the .mobile.erb versions of your views that are to be requested.

Then add the line below to config/initializers/mime_types.rb

Mime::Type.register_alias "text/html", :mobile

I recommend that you setup a before_filter that will redirect to a specific page depending on whether or not it is a mobile request. How can you check this?

is_mobile_device? # => Returns true or false depending on the device

You can also determine which format is currently set in by calling the following:

is_mobile_view? # => Returns true or false depending on current req. format

Also, if you want the ability to allow a user to switch between ‘mobile’ and ‘standard’ format (:html), you can just adjust the mobile_view session variable in a custom controller action.

session[:mobile_view] # => Set to true if request format is :mobile and false
                           if set to :html

So, different devices need different styling. Don’t worry, we’ve got this baked in to Mobile Fu.

If you are including a css or sass file via stylesheet_link_tag, all you have to do is add _device to the name of one of your files to override your styling for a certain device. The stylesheet that is loaded is dependant on which device is making the request.

e.g., Accessing a page from a Blackberry.

...  stylesheet_link_tag 'mobile.css' ...

This loads mobile.css, and mobile_blackberry.css if the file exists.

Supported stylesheet override device extensions at the moment are:

blackberry
iphone (iphone,ipod)
ipad
android
mobileexplorer
nokia
palm

The stylesheet awesomeness was derived from Michael Bleigh’s browserized styles: www.intridea.com/2007/12/9/announcing-browserized-styles

Inspiration for Mobile Fu came from Noel Rappin’s rails_iui: blogs.pathf.com/agileajax/2008/05/rails-developme.html

Hopefully this should help you create some awesome mobile applications.

Ignoring specific request formats

If you want to ignore specific request formats you can just pass ‘:ignore_formats => [<array of your formats>]’ as second argument to has_mobile_fu. NOTE: If you want to pass :ignore_formats you’ll have to pass the 1st argument (test_mode). If you don’t know what to put in just pass “false”.

example:

class ApplicationController < ActionController::Base
  has_mobile_fu false, :ignore_formats => [:iphone, :json] 
end

Testing Mobile Interface

If you want to force the mobile interface for testing, you can either use a mobile device emulator, or you can pass ‘true’ as first argument to has_mobile_fu.

example:

class ApplicationController < ActionController::Base
  has_mobile_fu true 
end

Copyright © 2008 Brendan G. Lim, Intridea, Inc., released under the MIT license

About

Automatically detect mobile requests from mobile devices in your Rails application. This fork adds the ability to ignore curtain request formats from being mobilized.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 100.0%