rack-useragent-filter 0.1.9 → 0.2.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/README.rdoc +16 -5
- data/VERSION +1 -1
- data/lib/rack/useragent/filter.rb +15 -1
- data/rack-useragent-filter.gemspec +15 -18
- data/test/test_helper.rb +1 -0
- data/test/user_agent_filter_test.rb +52 -0
- metadata +9 -10
- data/.gitignore +0 -2
data/README.rdoc
CHANGED
@@ -13,10 +13,23 @@ Let's say you don't support IE6 and want to prevent IE6 users from accessing to
|
|
13
13
|
|
14
14
|
use Rack::UserAgent::Filter, [
|
15
15
|
["Internet Explorer", "7.0"]
|
16
|
-
]
|
16
|
+
]
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
Done! From now on users with IE version lower than 7.0 will get a nice error message saying that their browsers need to be updated... Ok, ok, not so nice message, you can personalize it by passing custom message, as shown below:
|
19
|
+
|
20
|
+
use Rack::UserAgent::Filter, [
|
21
|
+
["Internet Explorer", "7.0"]
|
22
|
+
], :custom_message => "You are using old browser..."
|
23
|
+
|
24
|
+
<em> What about not just one sentence message ? </em>
|
25
|
+
|
26
|
+
You can specify source url of template
|
27
|
+
|
28
|
+
use Rack::UserAgent::Filter, [
|
29
|
+
["Internet Explorer", "7.0"]
|
30
|
+
], :template => "http://www.example.com/not_supported.html"
|
31
|
+
|
32
|
+
<em> url should be valid http||https </em>
|
20
33
|
|
21
34
|
<em>- Cool!, what about something more dynamic... like ERB or HAML?</em>
|
22
35
|
|
@@ -31,8 +44,6 @@ Then you could show the browser version as part of your message:
|
|
31
44
|
Sorry but <%= "#{@browser.browser} #{@browser.version}" %> is not supported
|
32
45
|
|
33
46
|
|
34
|
-
|
35
|
-
|
36
47
|
<em>- But... what if IE6 user do wants to see how page looks like in his favourite browser?</em>
|
37
48
|
|
38
49
|
You can show button "I take full responsibility of using IE6. Let me in!". User clicks button and with some little help
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -2,6 +2,8 @@ require 'user_agent'
|
|
2
2
|
require 'erb'
|
3
3
|
require 'tilt'
|
4
4
|
require 'ostruct'
|
5
|
+
require 'net/http'
|
6
|
+
require 'uri'
|
5
7
|
|
6
8
|
module Rack
|
7
9
|
module UserAgent
|
@@ -12,6 +14,7 @@ module Rack
|
|
12
14
|
@browsers = required_browsers.map{ |b| OpenStruct.new(:browser => b[0], :version => b[1]) }
|
13
15
|
@template = options[:template]
|
14
16
|
@force_with_cookie = options[:force_with_cookie]
|
17
|
+
@custom_message = options[:custom_message]
|
15
18
|
end
|
16
19
|
|
17
20
|
def call(env)
|
@@ -31,16 +34,27 @@ module Rack
|
|
31
34
|
useragent && @browsers.detect { |browser| useragent < browser }
|
32
35
|
end
|
33
36
|
|
37
|
+
def template_is_url?
|
38
|
+
(@template =~ URI::regexp(%w(http https))).nil? ? false : true
|
39
|
+
end
|
40
|
+
|
34
41
|
def detection_disabled_by_cookie?(cookies)
|
35
42
|
@force_with_cookie && cookies.keys.include?(@force_with_cookie)
|
36
43
|
end
|
37
44
|
|
45
|
+
def render_default_message
|
46
|
+
@custom_message ? @custom_message : "Sorry, your browser is not supported. Please upgrade"
|
47
|
+
end
|
48
|
+
|
38
49
|
def render_page(useragent)
|
39
50
|
if @template && ::File.exists?(@template)
|
40
51
|
@browser = useragent # for the template
|
41
52
|
Tilt.new(@template).render(self)
|
53
|
+
elsif @template && template_is_url?
|
54
|
+
@browser = useragent
|
55
|
+
Net::HTTP.get(URI.parse(@template))
|
42
56
|
else
|
43
|
-
|
57
|
+
render_default_message
|
44
58
|
end
|
45
59
|
end
|
46
60
|
end
|
@@ -1,44 +1,41 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rack-useragent-filter}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tomasz Mazur", "Sergio Gil", "Luismi Cavall\303\251"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-03-23}
|
13
13
|
s.email = %q{defkode@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.rdoc"
|
16
16
|
]
|
17
17
|
s.files = [
|
18
|
-
".
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
"test/user_agent_filter_test.rb"
|
18
|
+
"README.rdoc",
|
19
|
+
"Rakefile",
|
20
|
+
"VERSION",
|
21
|
+
"examples/upgrade.html",
|
22
|
+
"lib/rack/useragent/filter.rb",
|
23
|
+
"rack-useragent-filter.gemspec",
|
24
|
+
"test/fixtures/upgrade.erb",
|
25
|
+
"test/fixtures/upgrade.haml",
|
26
|
+
"test/test_helper.rb",
|
27
|
+
"test/user_agent_filter_test.rb"
|
29
28
|
]
|
30
29
|
s.homepage = %q{http://github.com/defkode/rack-useragent}
|
31
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
32
30
|
s.require_paths = ["lib"]
|
33
|
-
s.rubygems_version = %q{1.
|
31
|
+
s.rubygems_version = %q{1.6.0}
|
34
32
|
s.summary = %q{Rack Middleware for filtering by user agent}
|
35
33
|
s.test_files = [
|
36
34
|
"test/test_helper.rb",
|
37
|
-
|
35
|
+
"test/user_agent_filter_test.rb"
|
38
36
|
]
|
39
37
|
|
40
38
|
if s.respond_to? :specification_version then
|
41
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
42
39
|
s.specification_version = 3
|
43
40
|
|
44
41
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
data/test/test_helper.rb
CHANGED
@@ -71,6 +71,58 @@ class UserAgentFilterTest < Test::Unit::TestCase
|
|
71
71
|
end
|
72
72
|
|
73
73
|
end
|
74
|
+
|
75
|
+
context "custom message" do
|
76
|
+
setup do
|
77
|
+
def app
|
78
|
+
Rack::Builder.new do
|
79
|
+
use Rack::UserAgent::Filter, [["Internet Explorer", "7.0"]], :custom_message => "I'm custom"
|
80
|
+
run SampleApp.new
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
should "not work" do
|
86
|
+
header "User-Agent", @outdated_browser
|
87
|
+
get '/'
|
88
|
+
assert_equal "I'm custom", last_response.body
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "custom page (url as a template)" do
|
93
|
+
setup do
|
94
|
+
def app
|
95
|
+
Rack::Builder.new do
|
96
|
+
use Rack::UserAgent::Filter, [["Internet Explorer", "7.0"]], :template => "http://www.example.com"
|
97
|
+
run SampleApp.new
|
98
|
+
end
|
99
|
+
end
|
100
|
+
stub_request(:any, "http://www.example.com").to_return(:body => "test", :status => 200)
|
101
|
+
end
|
102
|
+
|
103
|
+
should "work" do
|
104
|
+
header "User-Agent", @outdated_browser
|
105
|
+
get '/'
|
106
|
+
assert_equal "test", last_response.body
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context "custom page (with bad url)" do
|
111
|
+
setup do
|
112
|
+
def app
|
113
|
+
Rack::Builder.new do
|
114
|
+
use Rack::UserAgent::Filter, [["Internet Explorer", "7.0"]], :template => "ppp"
|
115
|
+
run SampleApp.new
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
should "not work" do
|
121
|
+
header "User-Agent", @outdated_browser
|
122
|
+
get '/'
|
123
|
+
assert_equal "Sorry, your browser is not supported. Please upgrade", last_response.body
|
124
|
+
end
|
125
|
+
end
|
74
126
|
|
75
127
|
context "cookie" do
|
76
128
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-useragent-filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tomasz Mazur
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date:
|
20
|
+
date: 2011-03-23 00:00:00 +01:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -77,7 +77,6 @@ extensions: []
|
|
77
77
|
extra_rdoc_files:
|
78
78
|
- README.rdoc
|
79
79
|
files:
|
80
|
-
- .gitignore
|
81
80
|
- README.rdoc
|
82
81
|
- Rakefile
|
83
82
|
- VERSION
|
@@ -93,8 +92,8 @@ homepage: http://github.com/defkode/rack-useragent
|
|
93
92
|
licenses: []
|
94
93
|
|
95
94
|
post_install_message:
|
96
|
-
rdoc_options:
|
97
|
-
|
95
|
+
rdoc_options: []
|
96
|
+
|
98
97
|
require_paths:
|
99
98
|
- lib
|
100
99
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -118,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
117
|
requirements: []
|
119
118
|
|
120
119
|
rubyforge_project:
|
121
|
-
rubygems_version: 1.
|
120
|
+
rubygems_version: 1.6.0
|
122
121
|
signing_key:
|
123
122
|
specification_version: 3
|
124
123
|
summary: Rack Middleware for filtering by user agent
|
data/.gitignore
DELETED