schmobile 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,6 +1,26 @@
1
1
  = schmobile
2
2
 
3
- A mobile user agent detection Rack middleware.
3
+ A mobile user agent detection Rack middleware. It does this by providing +#is_mobile?+ to +Rack::Request+
4
+
5
+ == Forcing mobile mode
6
+
7
+ You can force toggle mobile mode by sending +is_mobile=true+ and +is_mobile=false+ as
8
+ parameters in the request URL. This setting will be stored in the session for subsequent requests.
9
+ This entirely overrides the user agent detection.
10
+
11
+ == User agent detection
12
+
13
+ You can add/remove user agents like so:
14
+
15
+ Rack::Schmobile::UserAgents.add_user_agent_pattern("wibble")
16
+ Rack::Schmobile::UserAgents.remove_user_agent_pattern("ipad")
17
+
18
+ == Filters
19
+
20
+ The outcome of the +request.is_mobile?+ call is the product of a series of filters getting evaluated
21
+ against the request. You can manipulate the Rack::Schmobile::Filters::CHAIN array to alter if a
22
+ request is deemed mobile or not. Add your own filter to bypass the check depending on e.g. location
23
+ or request format.
4
24
 
5
25
  == Redirecting
6
26
 
@@ -16,23 +36,10 @@ Finally the middleware provides a request level method to determine if the clien
16
36
 
17
37
  Rack::Request#is_mobile?
18
38
 
19
- == Forcing mobile mode
20
-
21
- You can force toggle mobile mode by sending +is_mobile=true+ and +is_mobile=false+ as
22
- parameters in the request URL - note that these require session access. This entirely
23
- overrides the user agent detection.
24
-
25
39
  == Rolling out
26
40
 
27
41
  use Rack::Schmobile, :redirect_to => "/mobile", :if => Proc.new { |request| request.host =~ /staging/ }
28
42
 
29
- == User agent detection
30
-
31
- You can add/remove user agents like so:
32
-
33
- Rack::Schmobile::UserAgents.add_user_agent_pattern("wibble")
34
- Rack::Schmobile::UserAgents.remove_user_agent_pattern("ipad")
35
-
36
43
  == Thanks
37
44
 
38
45
  Not quite what we were looking for, but good inspiration and may work for you:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -1,2 +1,16 @@
1
1
  require 'rack/schmobile/filters/is_mobile_param'
2
2
  require 'rack/schmobile/filters/mobile_user_agent'
3
+
4
+ module Rack
5
+ module Schmobile
6
+ # Filters are tests that get run against a request to detrmine if it's a mobile request or not.
7
+ # A filter can return true, false or nil. The first non-nil value of the filter chain is the
8
+ # one that gets used.
9
+ #
10
+ # You can modify the chain to add new conditions that check on e.g. request format.
11
+ module Filters
12
+ CHAIN = [ Rack::Schmobile::Filters::IsMobileParam, Rack::Schmobile::Filters::MobileUserAgent ]
13
+ end
14
+ end
15
+ end
16
+
@@ -1,6 +1,6 @@
1
1
  Rack::Request.class_eval do
2
2
  def is_mobile?
3
- Rack::Schmobile::FILTERS.each do |filter|
3
+ Rack::Schmobile::Filters::CHAIN.each do |filter|
4
4
  result = filter.call(self)
5
5
  return result unless result.nil?
6
6
  end
@@ -5,7 +5,6 @@ require 'rack/schmobile/filters'
5
5
 
6
6
  module Rack
7
7
  module Schmobile
8
- FILTERS = [ Rack::Schmobile::Filters::IsMobileParam, Rack::Schmobile::Filters::MobileUserAgent ]
9
8
  IS_MOBILE = "is_mobile"
10
9
  end
11
10
  end
data/schmobile.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{schmobile}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Morten Primdahl"]
@@ -21,17 +21,14 @@ class TestRackRequest < Test::Unit::TestCase
21
21
  end
22
22
  end
23
23
 
24
- should "return true for a mobile browser" do
25
- assert request("HTTP_USER_AGENT" => iphone).is_mobile?
26
- end
27
-
28
24
  should "return false when forced in the session" do
29
25
  Rack::Request.any_instance.stubs(:session).returns({ Rack::Schmobile::IS_MOBILE => false })
30
26
  assert !request("HTTP_USER_AGENT" => iphone).is_mobile?
31
27
  end
32
28
 
33
29
  should "return true when forced in the session" do
34
- assert request("rack.session" => { Rack::Schmobile::IS_MOBILE => "true" }).is_mobile?
30
+ Rack::Request.any_instance.stubs(:session).returns({ Rack::Schmobile::IS_MOBILE => true })
31
+ assert request.is_mobile?
35
32
  end
36
33
  end
37
34
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schmobile
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Morten Primdahl