schmobile 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
@@ -4,29 +4,28 @@ require 'rack/schmobile/filters/mobile_user_agent'
4
4
 
5
5
  module Rack
6
6
  module Schmobile
7
- # Filters are tests that get run against a request to detrmine if it's a mobile request or not.
7
+ # Filters are tests that get run against a request to determine if it's a mobile request or not.
8
8
  # A filter can return true, false or nil. The first non-nil value of the filter chain is the
9
- # one that gets used.
9
+ # one that gets used and this also gets used to mark the session as a "mobile session"
10
10
  #
11
- # You can modify the chain to add new conditions that check on e.g. request format.
11
+ # You can manipulate the chain to add new conditions that check on e.g. request format.
12
12
  module Filters
13
13
  CHAIN = [
14
+ Rack::Schmobile::Filters::IsMobileParam, # Must come before session check
14
15
  Rack::Schmobile::Filters::MobileSession,
15
- Rack::Schmobile::Filters::IsMobileParam,
16
- Rack::Schmobile::Filters::MobileUserAgent
16
+ Rack::Schmobile::Filters::MobileUserAgent # Always returns either true or false
17
17
  ]
18
18
 
19
19
  def self.apply(request)
20
20
  Rack::Schmobile::Filters::CHAIN.each do |filter|
21
21
  result = filter.call(request)
22
-
23
22
  unless result.nil?
24
23
  request.session[Rack::Schmobile::IS_MOBILE] = result
25
- return result
24
+ break
26
25
  end
27
26
  end
28
27
 
29
- false
28
+ request.session[Rack::Schmobile::IS_MOBILE] ||= false
30
29
  end
31
30
  end
32
31
  end
@@ -4,7 +4,7 @@ module Rack
4
4
  module IsMobileParam
5
5
  def self.call(request)
6
6
  if request.params.key?(Rack::Schmobile::IS_MOBILE)
7
- return request.params[Rack::Schmobile::IS_MOBILE] == "true"
7
+ request.session[Rack::Schmobile::IS_MOBILE] = (request.params[Rack::Schmobile::IS_MOBILE] == "true")
8
8
  end
9
9
 
10
10
  nil
@@ -5,7 +5,7 @@ module Rack
5
5
  module Filters
6
6
  module MobileUserAgent
7
7
  def self.call(request)
8
- Rack::Schmobile::UserAgents.is_mobile_agent?(request.user_agent)
8
+ request.session[Rack::Schmobile::IS_MOBILE] = Rack::Schmobile::UserAgents.is_mobile_agent?(request.user_agent)
9
9
  end
10
10
  end
11
11
  end
@@ -9,6 +9,10 @@ module Rack
9
9
  @is_mobile
10
10
  end
11
11
 
12
+ def toggle_mobile_session!
13
+ session[Rack::Schmobile::IS_MOBILE] = !is_mobile?
14
+ end
15
+
12
16
  def is_device?(identifier)
13
17
  user_agent =~ /#{identifier}/i
14
18
  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.2.0"
8
+ s.version = "0.3.0"
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"]
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
35
35
  "lib/schmobile.rb",
36
36
  "schmobile.gemspec",
37
37
  "test/helper.rb",
38
+ "test/test_filters.rb",
38
39
  "test/test_middleware.rb",
39
40
  "test/test_rack_request.rb",
40
41
  "test/test_user_agents.rb"
@@ -46,6 +47,7 @@ Gem::Specification.new do |s|
46
47
  s.summary = %q{A Rack middleware for detecting mobile user agents}
47
48
  s.test_files = [
48
49
  "test/helper.rb",
50
+ "test/test_filters.rb",
49
51
  "test/test_middleware.rb",
50
52
  "test/test_rack_request.rb",
51
53
  "test/test_user_agents.rb"
@@ -0,0 +1,62 @@
1
+ require 'helper'
2
+
3
+ class TestFukters < Test::Unit::TestCase
4
+
5
+ context "Rack::Schmobile::Filters" do
6
+ context "#apply" do
7
+ setup do
8
+ @request = stub(:user_agent => msie8)
9
+ @request.stubs(:params).returns({})
10
+ @session = {}
11
+ @request.stubs(:session).returns(@session)
12
+ end
13
+
14
+ context "on a pristine request" do
15
+ should "return true if the session is already mobile" do
16
+ Rack::Schmobile::UserAgents.expects(:is_mobile_agent?).never
17
+ @session[Rack::Schmobile::IS_MOBILE] = true
18
+ assert Rack::Schmobile::Filters.apply(@request)
19
+ end
20
+
21
+ should "return true if there's an is_mobile parameter with value true" do
22
+ Rack::Schmobile::UserAgents.expects(:is_mobile_agent?).never
23
+ @request.stubs(:params).returns({ "is_mobile" => "true" })
24
+ assert Rack::Schmobile::Filters.apply(@request)
25
+ end
26
+
27
+ should "return false if there's an is_mobile parameter with value false" do
28
+ Rack::Schmobile::UserAgents.expects(:is_mobile_agent?).never
29
+ @request.stubs(:params).returns({ "is_mobile" => "false" })
30
+ assert !Rack::Schmobile::Filters.apply(@request)
31
+ end
32
+
33
+ should "defer to user agent check if there's no session or parameter" do
34
+ Rack::Schmobile::UserAgents.expects(:is_mobile_agent?).once
35
+ assert !Rack::Schmobile::Filters.apply(@request)
36
+ end
37
+ end
38
+
39
+ context "on a request with mobile session set to false" do
40
+ should "allow to change the session value with a parameter" do
41
+ Rack::Schmobile::UserAgents.expects(:is_mobile_agent?).never
42
+ @request.session[Rack::Schmobile::IS_MOBILE] = false
43
+ assert !Rack::Schmobile::Filters.apply(@request)
44
+ @request.stubs(:params).returns({ "is_mobile" => "true" })
45
+ assert Rack::Schmobile::Filters.apply(@request)
46
+ assert @request.session[Rack::Schmobile::IS_MOBILE]
47
+ end
48
+ end
49
+
50
+ context "on a request with mobile session set to true" do
51
+ should "allow to change the session value with a parameter" do
52
+ Rack::Schmobile::UserAgents.expects(:is_mobile_agent?).never
53
+ @request.session[Rack::Schmobile::IS_MOBILE] = true
54
+ assert Rack::Schmobile::Filters.apply(@request)
55
+ @request.stubs(:params).returns({ "is_mobile" => "false" })
56
+ assert !Rack::Schmobile::Filters.apply(@request)
57
+ assert !@request.session[Rack::Schmobile::IS_MOBILE]
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
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: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Morten Primdahl
@@ -124,6 +124,7 @@ files:
124
124
  - lib/schmobile.rb
125
125
  - schmobile.gemspec
126
126
  - test/helper.rb
127
+ - test/test_filters.rb
127
128
  - test/test_middleware.rb
128
129
  - test/test_rack_request.rb
129
130
  - test/test_user_agents.rb
@@ -163,6 +164,7 @@ specification_version: 3
163
164
  summary: A Rack middleware for detecting mobile user agents
164
165
  test_files:
165
166
  - test/helper.rb
167
+ - test/test_filters.rb
166
168
  - test/test_middleware.rb
167
169
  - test/test_rack_request.rb
168
170
  - test/test_user_agents.rb