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 +1 -1
- data/lib/rack/schmobile/filters.rb +7 -8
- data/lib/rack/schmobile/filters/is_mobile_param.rb +1 -1
- data/lib/rack/schmobile/filters/mobile_user_agent.rb +1 -1
- data/lib/rack/schmobile/request_extension.rb +4 -0
- data/schmobile.gemspec +3 -1
- data/test/test_filters.rb +62 -0
- metadata +5 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
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
|
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
|
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::
|
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
|
-
|
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
|
-
|
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
|
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.
|
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:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 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
|