schmobile 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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