browsernizer 0.2.2 → 0.2.3
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 +7 -0
- data/CHANGELOG +3 -0
- data/README.md +11 -0
- data/lib/browsernizer/router.rb +3 -2
- data/lib/browsernizer/version.rb +1 -1
- data/spec/browsernizer/browser_spec.rb +5 -5
- data/spec/browsernizer/browser_version_spec.rb +8 -8
- data/spec/browsernizer/config_spec.rb +8 -8
- data/spec/browsernizer/router_spec.rb +33 -15
- metadata +29 -28
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7dd10a5602dbe925a6e861a29820259986292e83
|
4
|
+
data.tar.gz: 1a2602a4e5bda131e7f72a0d20a168e3bac2d079
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 94f21d35f5197a663cf05a7b402f23bc8e596a65fe2df01b0bfe40f16756f272b8a281322250c2cd31b6554fe2f3af17ff477d4be77f1f19c7580e5ff8d7058d
|
7
|
+
data.tar.gz: cb828676b75e87b317ce6b8d57c66961d6b1af7364cba1f865c67fe3f964b11fc6fda780bc97cbab4bb21eb4a5e5fdf01d853445a3aa81ed6837a4b964efcf9a
|
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -57,6 +57,17 @@ can declare it like this:
|
|
57
57
|
!(browser.name == "Safari" && browser.mobile?)
|
58
58
|
end
|
59
59
|
|
60
|
+
The block should return false to block the browser, true to allow it, and nil if it
|
61
|
+
cannot decide. This way you can make any arbitrary User-Agent explicitly allowed,
|
62
|
+
even if its version would have been blocked otherwise:
|
63
|
+
|
64
|
+
config.supported do |browser|
|
65
|
+
true if browser.user_agent.include?('Linux')
|
66
|
+
end
|
67
|
+
|
68
|
+
Please note, that the order is important, thus the first block or requirement returning
|
69
|
+
a boolean wins.
|
70
|
+
|
60
71
|
Specifying location is optional. If you prefer handling unsupported browsers on
|
61
72
|
your own, you can access browsernizer info from `request.env['browsernizer']`
|
62
73
|
within your controller.
|
data/lib/browsernizer/router.rb
CHANGED
@@ -54,13 +54,14 @@ module Browsernizer
|
|
54
54
|
|
55
55
|
# supported by default
|
56
56
|
def supported?(raw_browser, browser)
|
57
|
-
|
57
|
+
@config.get_supported.inject(true) do |default, requirement|
|
58
58
|
supported = if requirement.respond_to?(:call)
|
59
59
|
requirement.call(raw_browser)
|
60
60
|
else
|
61
61
|
browser.meets?(requirement)
|
62
62
|
end
|
63
|
-
supported
|
63
|
+
break supported unless supported.nil?
|
64
|
+
default
|
64
65
|
end
|
65
66
|
end
|
66
67
|
end
|
data/lib/browsernizer/version.rb
CHANGED
@@ -5,18 +5,18 @@ describe Browsernizer::Browser do
|
|
5
5
|
describe "#meets?(requirement)" do
|
6
6
|
context "same vendor" do
|
7
7
|
it "returns true if version is >= to requirement" do
|
8
|
-
browser("Chrome", "10.0").meets?(browser("Chrome", "10" )).
|
9
|
-
browser("Chrome", "10.0").meets?(browser("Chrome", "10.1")).
|
10
|
-
browser("Chrome", "10" ).meets?(browser("Chrome", " 9.1")).
|
8
|
+
expect(browser("Chrome", "10.0").meets?(browser("Chrome", "10" ))).to be_true
|
9
|
+
expect(browser("Chrome", "10.0").meets?(browser("Chrome", "10.1"))).to be_false
|
10
|
+
expect(browser("Chrome", "10" ).meets?(browser("Chrome", " 9.1"))).to be_true
|
11
11
|
end
|
12
12
|
it "returns false if requirement version is set to false" do
|
13
|
-
browser("Chrome", "10" ).meets?(browser("Chrome", false )).
|
13
|
+
expect(browser("Chrome", "10" ).meets?(browser("Chrome", false ))).to be_false
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
context "different vendors" do
|
18
18
|
it "returns nil" do
|
19
|
-
browser("Chrome", "10").meets?(browser("Firefox", "10")).
|
19
|
+
expect(browser("Chrome", "10").meets?(browser("Firefox", "10"))).to be_nil
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -5,20 +5,20 @@ describe Browsernizer::BrowserVersion do
|
|
5
5
|
describe "Comparable" do
|
6
6
|
|
7
7
|
it "is greater" do
|
8
|
-
version("2").
|
9
|
-
version("1.1").
|
10
|
-
version("1.1").
|
11
|
-
version("2").
|
8
|
+
expect(version("2")).to be > version("1")
|
9
|
+
expect(version("1.1")).to be > version("1")
|
10
|
+
expect(version("1.1")).to be > version("1.0")
|
11
|
+
expect(version("2")).to be > version("1.9")
|
12
12
|
end
|
13
13
|
|
14
14
|
it "is equal" do
|
15
|
-
version("1").
|
16
|
-
version("1").
|
17
|
-
version("1.0").
|
15
|
+
expect(version("1")).to eq(version("1"))
|
16
|
+
expect(version("1")).to eq(version("1.0"))
|
17
|
+
expect(version("1.0")).to eq(version("1"))
|
18
18
|
end
|
19
19
|
|
20
20
|
it "handles strings" do
|
21
|
-
version("1.0").
|
21
|
+
expect(version("1.0")).to eq(version("1.0.alpha"))
|
22
22
|
end
|
23
23
|
|
24
24
|
end
|
@@ -8,19 +8,19 @@ describe Browsernizer::Config do
|
|
8
8
|
it "defines new supported browser" do
|
9
9
|
subject.supported "Chrome", "16.0"
|
10
10
|
subject.supported "Firefox", "10.0"
|
11
|
-
subject.get_supported.
|
11
|
+
expect(subject.get_supported.size).to eq(2)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "allows to unsupport browser by using false as version number" do
|
15
15
|
subject.supported "Chrome", false
|
16
|
-
subject.get_supported[0].version.
|
16
|
+
expect(subject.get_supported[0].version).to be_false
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
describe "location(path)" do
|
21
21
|
it "sets the redirection path for unsupported browsers" do
|
22
22
|
subject.location "foo.html"
|
23
|
-
subject.get_location.
|
23
|
+
expect(subject.get_location).to eq("foo.html")
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -29,11 +29,11 @@ describe Browsernizer::Config do
|
|
29
29
|
subject.exclude %r{^/assets}
|
30
30
|
subject.exclude "/foo/bar.html"
|
31
31
|
|
32
|
-
subject.excluded?("/assets/foo.jpg").
|
33
|
-
subject.excluded?("/Assets/foo.jpg").
|
34
|
-
subject.excluded?("/prefix/assets/foo.jpg").
|
35
|
-
subject.excluded?("/foo/bar.html").
|
36
|
-
subject.excluded?("/foo/bar2.html").
|
32
|
+
expect(subject.excluded?("/assets/foo.jpg")).to be_true
|
33
|
+
expect(subject.excluded?("/Assets/foo.jpg")).to be_false
|
34
|
+
expect(subject.excluded?("/prefix/assets/foo.jpg")).to be_false
|
35
|
+
expect(subject.excluded?("/foo/bar.html")).to be_true
|
36
|
+
expect(subject.excluded?("/foo/bar2.html")).to be_false
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -6,6 +6,9 @@ describe Browsernizer::Router do
|
|
6
6
|
|
7
7
|
subject do
|
8
8
|
Browsernizer::Router.new(app) do |config|
|
9
|
+
config.supported do |browser|
|
10
|
+
true if browser.user_agent.include?('Spec')
|
11
|
+
end
|
9
12
|
config.supported "Firefox", false
|
10
13
|
config.supported "Chrome", "7.1"
|
11
14
|
config.supported do |browser|
|
@@ -22,11 +25,11 @@ describe Browsernizer::Router do
|
|
22
25
|
end
|
23
26
|
|
24
27
|
context "All Good" do
|
25
|
-
it "propagates
|
26
|
-
app.
|
27
|
-
env['browsernizer']['supported'].
|
28
|
-
env['browsernizer']['browser'].
|
29
|
-
env['browsernizer']['version'].
|
28
|
+
it "propagates request with updated env" do
|
29
|
+
expect(app).to receive(:call) do |env|
|
30
|
+
expect(env['browsernizer']['supported']).to be_true
|
31
|
+
expect(env['browsernizer']['browser']).to eq("Chrome")
|
32
|
+
expect(env['browsernizer']['version']).to eq("7.1.1")
|
30
33
|
end
|
31
34
|
subject.call(default_env)
|
32
35
|
end
|
@@ -35,9 +38,9 @@ describe Browsernizer::Router do
|
|
35
38
|
|
36
39
|
shared_examples "unsupported browser" do
|
37
40
|
context "location not set" do
|
38
|
-
it "propagates
|
39
|
-
app.
|
40
|
-
env['browsernizer']['supported'].
|
41
|
+
it "propagates request with updated env" do
|
42
|
+
expect(app).to receive(:call) do |env|
|
43
|
+
expect(env['browsernizer']['supported']).to be_false
|
41
44
|
end
|
42
45
|
subject.call(@env)
|
43
46
|
end
|
@@ -49,14 +52,14 @@ describe Browsernizer::Router do
|
|
49
52
|
end
|
50
53
|
|
51
54
|
it "prevents propagation" do
|
52
|
-
app.
|
55
|
+
expect(app).not_to receive(:call)
|
53
56
|
subject.call(@env)
|
54
57
|
end
|
55
58
|
|
56
59
|
it "redirects to proper location" do
|
57
60
|
response = subject.call(@env)
|
58
|
-
response[0].
|
59
|
-
response[1]["Location"].
|
61
|
+
expect(response[0]).to eq(307)
|
62
|
+
expect(response[1]["Location"]).to eq("/browser.html")
|
60
63
|
end
|
61
64
|
|
62
65
|
context "Excluded path" do
|
@@ -67,7 +70,7 @@ describe Browsernizer::Router do
|
|
67
70
|
})
|
68
71
|
end
|
69
72
|
it "propagates request" do
|
70
|
-
app.
|
73
|
+
expect(app).to receive(:call).with(@env)
|
71
74
|
subject.call(@env)
|
72
75
|
end
|
73
76
|
end
|
@@ -78,9 +81,9 @@ describe Browsernizer::Router do
|
|
78
81
|
"PATH_INFO" => "/browser.html"
|
79
82
|
})
|
80
83
|
end
|
81
|
-
it "propagates
|
82
|
-
app.
|
83
|
-
env['browsernizer']['supported'].
|
84
|
+
it "propagates request with updated env" do
|
85
|
+
expect(app).to receive(:call) do |env|
|
86
|
+
expect(env['browsernizer']['supported']).to be_false
|
84
87
|
end
|
85
88
|
subject.call(@env)
|
86
89
|
end
|
@@ -115,6 +118,21 @@ describe Browsernizer::Router do
|
|
115
118
|
it_behaves_like "unsupported browser"
|
116
119
|
end
|
117
120
|
|
121
|
+
context "Supported by proc" do
|
122
|
+
before do
|
123
|
+
@env = default_env.merge({
|
124
|
+
"HTTP_USER_AGENT" => firefox_agent("10.0.1") + ' Spec'
|
125
|
+
})
|
126
|
+
end
|
127
|
+
|
128
|
+
it "propagates request" do
|
129
|
+
expect(app).to receive(:call) do |env|
|
130
|
+
expect(env['browsernizer']['supported']).to be_true
|
131
|
+
end
|
132
|
+
subject.call(@env)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
118
136
|
def chrome_agent(version)
|
119
137
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/#{version} Safari/535.7"
|
120
138
|
end
|
metadata
CHANGED
@@ -1,49 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browsernizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Milovan Zogovic
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-12-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: rspec
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- -
|
31
|
+
- - ">="
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '0'
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: browser
|
38
|
-
requirement:
|
39
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
|
-
- -
|
45
|
+
- - ">"
|
42
46
|
- !ruby/object:Gem::Version
|
43
47
|
version: 0.1.4
|
44
48
|
type: :runtime
|
45
49
|
prerelease: false
|
46
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.1.4
|
47
55
|
description: Rack middleware for redirecting unsupported user agents to "please upgrade"
|
48
56
|
page
|
49
57
|
email:
|
@@ -52,7 +60,7 @@ executables: []
|
|
52
60
|
extensions: []
|
53
61
|
extra_rdoc_files: []
|
54
62
|
files:
|
55
|
-
- .gitignore
|
63
|
+
- ".gitignore"
|
56
64
|
- CHANGELOG
|
57
65
|
- Gemfile
|
58
66
|
- LICENSE
|
@@ -74,33 +82,26 @@ files:
|
|
74
82
|
- spec/spec_helper.rb
|
75
83
|
homepage: ''
|
76
84
|
licenses: []
|
85
|
+
metadata: {}
|
77
86
|
post_install_message:
|
78
87
|
rdoc_options: []
|
79
88
|
require_paths:
|
80
89
|
- lib
|
81
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
91
|
requirements:
|
84
|
-
- -
|
92
|
+
- - ">="
|
85
93
|
- !ruby/object:Gem::Version
|
86
94
|
version: '0'
|
87
|
-
segments:
|
88
|
-
- 0
|
89
|
-
hash: 2510847936117129641
|
90
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
96
|
requirements:
|
93
|
-
- -
|
97
|
+
- - ">="
|
94
98
|
- !ruby/object:Gem::Version
|
95
99
|
version: '0'
|
96
|
-
segments:
|
97
|
-
- 0
|
98
|
-
hash: 2510847936117129641
|
99
100
|
requirements: []
|
100
101
|
rubyforge_project: browsernizer
|
101
|
-
rubygems_version:
|
102
|
+
rubygems_version: 2.4.2
|
102
103
|
signing_key:
|
103
|
-
specification_version:
|
104
|
+
specification_version: 4
|
104
105
|
summary: Want friendly "please upgrade your browser" page? This gem is for you.
|
105
106
|
test_files:
|
106
107
|
- spec/browsernizer/browser_spec.rb
|