browsernizer 0.1.0 → 0.1.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.
- data/README.md +37 -2
- data/lib/browsernizer/config.rb +2 -1
- data/lib/browsernizer/router.rb +27 -3
- data/lib/browsernizer/version.rb +1 -1
- data/lib/browsernizer.rb +0 -6
- data/spec/browsernizer/config_spec.rb +0 -7
- data/spec/browsernizer/router_spec.rb +29 -9
- metadata +8 -8
data/README.md
CHANGED
@@ -18,7 +18,42 @@ Hook it up:
|
|
18
18
|
|
19
19
|
Configure browser support in `config/initializers/browsernizer.rb` file.
|
20
20
|
|
21
|
-
|
21
|
+
|
22
|
+
## Configuration
|
23
|
+
|
24
|
+
Initializer file is pretty self explanatory. Here is the default one:
|
25
|
+
|
26
|
+
Rails.application.config.middleware.use Browsernizer::Router do |config|
|
27
|
+
config.supported "Internet Explorer", "9"
|
28
|
+
config.supported "Firefox", "4"
|
29
|
+
config.supported "Opera", "11.1"
|
30
|
+
config.supported "Chrome", "7"
|
31
|
+
config.location "/browser.html"
|
32
|
+
end
|
33
|
+
|
34
|
+
It states that IE9+, FF4+, Opera 11.1+ and Chrome 7+ are supported.
|
35
|
+
Non listed browsers are considered to be supported regardless of their version.
|
36
|
+
Unsupported browsers will be redirected to `/browser.html` page.
|
37
|
+
|
38
|
+
If you wish to completely prevent some browsers from accessing website
|
39
|
+
(regardless of their version), for now you can specify some really high
|
40
|
+
version number (e.g. "666").
|
41
|
+
|
42
|
+
Specifying location is optional. If you prefer handling unsupported browsers on
|
43
|
+
your own, you can access browsernizer info from `request.env['browsernizer']`
|
44
|
+
within your controller.
|
45
|
+
|
46
|
+
For example, you can set before filter to display flash notice:
|
47
|
+
|
48
|
+
before_filter :check_browser_support
|
49
|
+
|
50
|
+
def check_browser_support
|
51
|
+
unless request.env['browsernizer']['supported']
|
52
|
+
flash.notice = "Your browser is not supported"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
You can also access `browser` and `version` variables from this env hash.
|
22
57
|
|
23
58
|
|
24
59
|
## Browsers
|
@@ -49,5 +84,5 @@ Browser detection is done using [useragent gem](https://github.com/josh/useragen
|
|
49
84
|
|
50
85
|
Developed by Milovan Zogovic.
|
51
86
|
|
52
|
-
I don't believe in licenses and other
|
87
|
+
I don't believe in licenses and other legal crap.
|
53
88
|
Do whatever you want with this :)
|
data/lib/browsernizer/config.rb
CHANGED
data/lib/browsernizer/router.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Browsernizer
|
2
2
|
|
3
3
|
class Router
|
4
|
+
attr_reader :config
|
5
|
+
|
4
6
|
def initialize(app, &block)
|
5
7
|
@app = app
|
6
8
|
@config = Config.new
|
@@ -9,17 +11,36 @@ module Browsernizer
|
|
9
11
|
|
10
12
|
def call(env)
|
11
13
|
@env = env
|
14
|
+
@env["browsernizer"] = {
|
15
|
+
"supported" => true,
|
16
|
+
"browser" => agent.browser.to_s,
|
17
|
+
"version" => agent.version.to_s
|
18
|
+
}
|
12
19
|
|
13
20
|
if html_request? && !on_redirection_path? && unsupported?
|
14
|
-
|
21
|
+
handle_unsupported
|
15
22
|
elsif html_request? && on_redirection_path? && !unsupported?
|
16
|
-
|
23
|
+
handle_visits_by_accident
|
17
24
|
else
|
18
25
|
@app.call(env)
|
19
26
|
end
|
20
27
|
end
|
21
28
|
|
22
29
|
private
|
30
|
+
def handle_unsupported
|
31
|
+
@env["browsernizer"]["supported"] = false
|
32
|
+
|
33
|
+
if @config.get_location
|
34
|
+
[307, {"Content-Type" => "text/plain", "Location" => @config.get_location}, []]
|
35
|
+
else
|
36
|
+
@app.call(@env)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def handle_visits_by_accident
|
41
|
+
[303, {"Content-Type" => "text/plain", "Location" => "/"}, []]
|
42
|
+
end
|
43
|
+
|
23
44
|
def html_request?
|
24
45
|
@env["HTTP_ACCEPT"] && @env["HTTP_ACCEPT"].include?("text/html")
|
25
46
|
end
|
@@ -28,9 +49,12 @@ module Browsernizer
|
|
28
49
|
@env["PATH_INFO"] && @env["PATH_INFO"] == @config.get_location
|
29
50
|
end
|
30
51
|
|
52
|
+
def agent
|
53
|
+
::UserAgent.parse @env["HTTP_USER_AGENT"]
|
54
|
+
end
|
55
|
+
|
31
56
|
# supported by default
|
32
57
|
def unsupported?
|
33
|
-
agent = ::UserAgent.parse @env["HTTP_USER_AGENT"]
|
34
58
|
@config.get_supported.detect do |supported_browser|
|
35
59
|
if agent.browser.to_s.downcase == supported_browser.browser.to_s.downcase
|
36
60
|
a = BrowserVersion.new agent.version.to_s
|
data/lib/browsernizer/version.rb
CHANGED
data/lib/browsernizer.rb
CHANGED
@@ -1,9 +1,3 @@
|
|
1
|
-
#TODO: remove when useragent gem is fixed
|
2
|
-
require 'rubygems'
|
3
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
4
|
-
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
|
5
|
-
|
6
|
-
|
7
1
|
require "browsernizer/browser"
|
8
2
|
require "browsernizer/browser_version"
|
9
3
|
require "browsernizer/config"
|
@@ -4,13 +4,6 @@ describe Browsernizer::Config do
|
|
4
4
|
|
5
5
|
subject { config = Browsernizer::Config.new }
|
6
6
|
|
7
|
-
describe "new" do
|
8
|
-
it "sets the defaults" do
|
9
|
-
subject.get_supported.should == []
|
10
|
-
subject.get_location.should == "/unsupported-browser.html"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
7
|
describe "supported(name, version)" do
|
15
8
|
it "defines new supported browser" do
|
16
9
|
subject.supported "Chrome", "16.0"
|
@@ -8,7 +8,6 @@ describe Browsernizer::Router do
|
|
8
8
|
Browsernizer::Router.new(app) do |config|
|
9
9
|
config.supported "Firefox", "4"
|
10
10
|
config.supported "Chrome", "7.1"
|
11
|
-
config.location "/browser.html"
|
12
11
|
end
|
13
12
|
end
|
14
13
|
|
@@ -21,8 +20,14 @@ describe Browsernizer::Router do
|
|
21
20
|
end
|
22
21
|
|
23
22
|
context "All Good" do
|
24
|
-
it "propagates request" do
|
25
|
-
|
23
|
+
it "sets browsernizer env and propagates request" do
|
24
|
+
response = default_env.dup
|
25
|
+
response['browsernizer'] = {
|
26
|
+
'supported' => true,
|
27
|
+
'browser' => "Chrome",
|
28
|
+
'version' => "7.1.1"
|
29
|
+
}
|
30
|
+
app.should_receive(:call).with(response)
|
26
31
|
subject.call(default_env)
|
27
32
|
end
|
28
33
|
end
|
@@ -34,15 +39,30 @@ describe Browsernizer::Router do
|
|
34
39
|
})
|
35
40
|
end
|
36
41
|
|
37
|
-
it "
|
38
|
-
|
42
|
+
it "updates 'browsernizer' env variable and propagates request" do
|
43
|
+
@response = @env.dup
|
44
|
+
@response['browsernizer'] = {
|
45
|
+
'supported' => false,
|
46
|
+
'browser' => "Chrome",
|
47
|
+
'version' => "7"
|
48
|
+
}
|
49
|
+
app.should_receive(:call).with(@response)
|
39
50
|
subject.call(@env)
|
40
51
|
end
|
41
52
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
53
|
+
context "location is set" do
|
54
|
+
before do
|
55
|
+
subject.config.location "/browser.html"
|
56
|
+
end
|
57
|
+
it "prevents propagation" do
|
58
|
+
app.should_not_receive(:call)
|
59
|
+
subject.call(@env)
|
60
|
+
end
|
61
|
+
it "redirects to proper location" do
|
62
|
+
response = subject.call(@env)
|
63
|
+
response[0].should == 307
|
64
|
+
response[1]["Location"].should == "/browser.html"
|
65
|
+
end
|
46
66
|
end
|
47
67
|
|
48
68
|
context "Non-html request" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browsernizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-08 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70317243772500 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70317243772500
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70317243772080 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70317243772080
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: useragent
|
38
|
-
requirement: &
|
38
|
+
requirement: &70317243771580 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: 0.4.6
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70317243771580
|
47
47
|
description: Rack middleware for redirecting unsupported user agents to "please upgrade"
|
48
48
|
page
|
49
49
|
email:
|