README.markdown in divining_rod-0.4.0 vs README.markdown in divining_rod-0.5.0
- old
+ new
@@ -1,40 +1,60 @@
# Divining Rod
+<img src='http://public.mpercival.com.s3.amazonaws.com/images/divining_rod.jpg' />
-A tool to help format your sites mobile pages.
+A tool to profile web requests. Especially useful for mobile site development
## Installation
gem install divining_rod
## Example
- Using the example configuration (found in [example_config.rb](http://github.com/markpercival/divining_rod/blob/master/example_config.rb)])
+ Using the example configuration (found in [example_config.rb](http://github.com/markpercival/divining_rod/blob/master/example_config.rb))
# For a request with the user agent
# "Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11 Safari/525.20"
profile = DiviningRod::Profile.new(request)
profile.iphone? #=> true
profile.name #=> 'iPhone'
profile.youtube_capable? #=> true
profile.format #=> :webkit
+
+## Mappings
+
+Matches happen in the order they are defined, and then proceed down to the subsequent block. So for example:
+
+ DiviningRod::Mappings.define do |map|
+ map.ua /Apple/, :format => :webkit, :tags => [:apple, :iphone_os] do
+ iphone.ua /iPad/, :tags => :ipad, :name => 'iPad', :format => nil
+ iphone.ua /iPod/, :tags => :ipod, :name => 'iPod Touch'
+ iphone.ua /iPhone/, :tags => :iphone, :name => 'iPhone'
+ end
+ end
+Will match "Apple iPad" first with the /Apple/ matcher, then with the /iPad/ matcher, and the tags will be
+ [:apple, :iphone_os, :ipad] # Notice tags get appended, *not* overridden.
+
+And _:format_ will be set to _nil_
+
+Why _nil_? Because when :format is set to _nil_ and you ask for it, DiviningRod will return the original _request_ objects format.
+
## Usage
_initializers/divining\_rod.rb_
-
+
DiviningRod::Mappings.define do |map|
# Android based phones
map.ua /Android/, :format => :webkit, :name => 'Android', :tags => [:android, :youtube_capable, :google_gears]
# Apple iPhone OS
map.ua /Apple.*Mobile.*Safari/, :format => :webkit, :tags => [:apple, :iphone_os, :youtube_capable] do |iphone|
- iphone.ua /iPad/, :tags => :ipad, :name => 'iPad'
+ iphone.ua /iPad/, :tags => :ipad, :name => 'iPad', :format => nil
iphone.ua /iPod/, :tags => :ipod, :name => 'iPod Touch'
- iphone.ua /iPhone/, :tags => [:iphone], :name => 'iPhone'
+ iphone.ua /iPhone/, :tags => :iphone, :name => 'iPhone'
end
#Blackberry, needs more detail here
map.ua /BlackBerry/, :tags => :blackberry, :name => 'BlackBerry'
map.subdomain /wap/, :format => :wap, :tags => [:crappy_old_phone]
@@ -74,13 +94,11 @@
<% end %>
## Note on the development
-Tags always merge, while all other hash keys get overridden. Tags also will always allow you to call them as
-booleans. Ex @profile.iphone?
-
-If the :format key isn't available we default to request.format.
+In version 0.3.* it was assumed you always passed in _format_. In 0.4 on, we require _format_ to
+be passed in explicitly with the rest of the options hash.
## Todo
### Copyright