browser 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/gemfiles/rails3.gemfile.lock +1 -1
- data/lib/browser.rb +21 -4
- data/lib/browser/middleware.rb +14 -2
- data/lib/browser/version.rb +1 -1
- data/test/middleware_test.rb +10 -4
- data/test/sample_app.rb +4 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0373ece943efe30b86eea58744eaa628c2a682c9
|
4
|
+
data.tar.gz: 29276aa59fd5d2a8f7ef066fcd14ed911d8bbea2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 470c3d3f2e2f521adf0734c6f4e9ee28da7ff29ceb946d0d513c0c818eab4d04b6c85758078d246b5a9c9d47923f6d71fc60e96a797d329b0e6edacf99ddd5a4
|
7
|
+
data.tar.gz: 48bf2e3967f5304d090c017b74732eba63fcc1e5bbd4796e7a1ede411f38f0d315e64d700f923fe2040374b8ea731f666ee692e1db50ba3b3c35980c629382c1
|
data/Gemfile.lock
CHANGED
data/lib/browser.rb
CHANGED
@@ -106,10 +106,10 @@ class Browser
|
|
106
106
|
# Return true if browser is modern (Webkit, Firefox 17+, IE9+, Opera 12+).
|
107
107
|
def modern?
|
108
108
|
webkit? ||
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
109
|
+
newer_firefox? ||
|
110
|
+
newer_ie? ||
|
111
|
+
newer_opera? ||
|
112
|
+
newer_firefox_tablet?
|
113
113
|
end
|
114
114
|
|
115
115
|
# Detect if browser is WebKit-based.
|
@@ -171,4 +171,21 @@ class Browser
|
|
171
171
|
def to_s
|
172
172
|
meta.to_a.join(" ")
|
173
173
|
end
|
174
|
+
|
175
|
+
private
|
176
|
+
def newer_firefox?
|
177
|
+
firefox? && version.to_i >= 17
|
178
|
+
end
|
179
|
+
|
180
|
+
def newer_ie?
|
181
|
+
ie? && version.to_i >= 9
|
182
|
+
end
|
183
|
+
|
184
|
+
def newer_opera?
|
185
|
+
opera? && version.to_i >= 12
|
186
|
+
end
|
187
|
+
|
188
|
+
def newer_firefox_tablet?
|
189
|
+
firefox? && tablet? && android? && version.to_i >= 14
|
190
|
+
end
|
174
191
|
end
|
data/lib/browser/middleware.rb
CHANGED
@@ -12,14 +12,22 @@ class Browser
|
|
12
12
|
def call(env)
|
13
13
|
request = Rack::Request.new(env)
|
14
14
|
|
15
|
+
# Only apply verification on HTML requests.
|
16
|
+
# This ensures that images, CSS and JavaScript
|
17
|
+
# will be rendered.
|
18
|
+
return run_app(env) unless html?(request)
|
19
|
+
|
15
20
|
path = catch(:redirected) do
|
16
21
|
Context.new(request).instance_eval(&@block)
|
17
22
|
end
|
18
23
|
|
19
|
-
|
24
|
+
# No path, no match.
|
25
|
+
return run_app(env) unless path
|
26
|
+
|
27
|
+
resolve_redirection(env, request.path, path)
|
20
28
|
end
|
21
29
|
|
22
|
-
def resolve_redirection(current_path, path)
|
30
|
+
def resolve_redirection(env, current_path, path)
|
23
31
|
uri = URI.parse(path)
|
24
32
|
|
25
33
|
if uri.path == current_path
|
@@ -36,5 +44,9 @@ class Browser
|
|
36
44
|
def run_app(env)
|
37
45
|
@app.call(env)
|
38
46
|
end
|
47
|
+
|
48
|
+
def html?(request)
|
49
|
+
request.env["HTTP_ACCEPT"].to_s.include?("text/html")
|
50
|
+
end
|
39
51
|
end
|
40
52
|
end
|
data/lib/browser/version.rb
CHANGED
data/test/middleware_test.rb
CHANGED
@@ -10,28 +10,34 @@ class MiddlewareTest < Test::Unit::TestCase
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_redirect_uses_302
|
13
|
-
get "/", {}, {"HTTP_USER_AGENT" => "MSIE 6"}
|
13
|
+
get "/", {}, {"HTTP_USER_AGENT" => "MSIE 6", "HTTP_ACCEPT" => "text/html"}
|
14
14
|
assert_equal 302, last_response.status
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_redirect_ie6_to_upgrade_path
|
18
|
-
get "/", {}, {"HTTP_USER_AGENT" => "MSIE 6"}
|
18
|
+
get "/", {}, {"HTTP_USER_AGENT" => "MSIE 6", "HTTP_ACCEPT" => "text/html"}
|
19
19
|
follow_redirect!
|
20
20
|
|
21
21
|
assert_equal "UPGRADE: ie6", last_response.body
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_redirect_ie7_to_upgrade_path
|
25
|
-
get "/", {}, {"HTTP_USER_AGENT" => "MSIE 7"}
|
25
|
+
get "/", {}, {"HTTP_USER_AGENT" => "MSIE 7", "HTTP_ACCEPT" => "text/html"}
|
26
26
|
follow_redirect!
|
27
27
|
|
28
28
|
assert_equal "UPGRADE: ie7", last_response.body
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_redirect_ie8_and_404
|
32
|
-
get "/", {}, {"HTTP_USER_AGENT" => "MSIE 8"}
|
32
|
+
get "/", {}, {"HTTP_USER_AGENT" => "MSIE 8", "HTTP_ACCEPT" => "text/html"}
|
33
33
|
follow_redirect!
|
34
34
|
|
35
35
|
assert_equal 404, last_response.status
|
36
36
|
end
|
37
|
+
|
38
|
+
def test_ignores_non_html_requests
|
39
|
+
get "/", {}, {"HTTP_USER_AGENT" => "MSIE 6", "HTTP_ACCEPT" => "image/png"}
|
40
|
+
|
41
|
+
assert_equal 200, last_response.status
|
42
|
+
end
|
37
43
|
end
|
data/test/sample_app.rb
CHANGED
@@ -15,6 +15,10 @@ class SampleApp < Rails::Application
|
|
15
15
|
browser = Rack::Request.new(env).params["browser"]
|
16
16
|
[200, default_headers, ["UPGRADE: #{browser}"]]
|
17
17
|
}, as: "upgrade"
|
18
|
+
|
19
|
+
get "/asset", to: -> env {
|
20
|
+
[200, {"Content-Type" => "image/png"}, []]
|
21
|
+
}
|
18
22
|
end
|
19
23
|
|
20
24
|
config.middleware.use Browser::Middleware do
|