Skip to content

danielhz/uagent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

uagent

Helps you to develop web applications for desktop or mobile user agents.

Install

$ gem install uagent

Usage

When a browser sends a request to your web application the request has an HTTP_USER_AGENT attribute that identifies the device an browser. For example, the next string identifies an particular model of iPhone, that uses an specific mobile version for Safari.

Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) 
AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11
Safari/528.16

Each mobile phone model will send you a particular user agent string, thus is a good idea classify the devices in groups an develop a specific interface for each group. For each group we define a key, so the user agent parser receive the user agent string and returns that key. For example, the answer for the string above could be :mobile or :iphone, depending on the parser configuration.

If you are developing web applications on top of rack, I recommend you to look the uagent_rack gem.

Code example

require 'rubygmes'
require 'uagent'

# A parser distinguishes between disjoin user agent sets

parser = UAgent::Parser.new

env = {
  ...
  "HTTP_USER_AGENT" => "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) " +
      "AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16",
  ...
}

parser.call(env)    # gets :mobile

env = {
  ...
  "HTTP_USER_AGENT" => "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) " +
      "Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10"
  ...
}

parser.call({ 'HTTP_USER_AGENT' => 'ua })    # gets :desktop

Using specific user agent groups.

The basic user agent groups are :desktop and :mobile. You can add more groups adding keys in the constructor function.

parser = UAgent::Parser.new(:iphone)

ua = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) " +
     "AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16"

parser.call({ 'HTTP_USER_AGENT' => 'ua })    # gets :iphone

The keys order in the constructor is relevant. Put the most specific keys first to indicate the parser to start for them.

Using a custom device database.

The parser uses a hash that associates terms to the user agent group keyword. That terms are searched in the HTTP_USER_AGENT string to analyze if a user agent is into a group. Now we support only the keywords :iphone and :blackberry, thus change the database if you need a more accurate parser.

parser.set_database my_custom_database

Install from code

First download the code from the repository:

$ git clone git://github.com/danielhz/uagent.git

This project uses jeweler to build the gem, so you can use this commands:

$ rake build            # to build the gem
$ rake install          # to build and install the gem in one step

Also, if you want test the gem you can use the spec task:

$ rake spec

This project uses rcov so you can check the coverage opening the HTML file in the coverage directory after running the spec.

Other Stuff

Author

Daniel Hernández, daniel@degu.cl

License

GPL V3

Warranty

This software is provided “as is” and without any express or implied warranties, including, without limitation, the implied warranties of merchantability and fitness for a particular purpose.

About

Helps you to develop for diferent http user agents.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages