browser 1.0.1 → 1.1.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.
- checksums.yaml +4 -4
- data/README.md +12 -4
- data/Rakefile +1 -1
- data/bots.yml +79 -22
- data/browser.gemspec +5 -0
- data/languages.yml +0 -1
- data/lib/browser.rb +37 -7
- data/lib/browser/meta/proxy.rb +9 -0
- data/lib/browser/methods/blackberry.rb +51 -0
- data/lib/browser/methods/ie.rb +14 -8
- data/lib/browser/methods/mobile.rb +5 -5
- data/lib/browser/methods/platform.rb +39 -33
- data/lib/browser/methods/proxy.rb +8 -0
- data/lib/browser/methods/tv.rb +1 -1
- data/lib/browser/version.rb +2 -2
- data/test/browser_test.rb +248 -0
- data/test/{middleware_spec.rb → middleware_test.rb} +8 -8
- data/test/sample_app.rb +3 -3
- data/test/test_helper.rb +20 -0
- data/test/ua.yml +35 -10
- data/test/unit/adobe_air_test.rb +17 -0
- data/test/unit/android_test.rb +97 -0
- data/test/unit/blackberry_test.rb +106 -0
- data/test/unit/bots_test.rb +121 -0
- data/test/unit/chrome_test.rb +60 -0
- data/test/unit/console_test.rb +71 -0
- data/test/unit/firefox_test.rb +41 -0
- data/test/unit/ie_test.rb +379 -0
- data/test/unit/ios_app_test.rb +17 -0
- data/test/unit/ios_test.rb +143 -0
- data/test/unit/kindle_test.rb +41 -0
- data/test/unit/nokia_test.rb +13 -0
- data/test/unit/opera_test.rb +46 -0
- data/test/unit/proxy_test.rb +18 -0
- data/test/unit/uc_browser_test.rb +13 -0
- data/test/unit/windows_phone_test.rb +54 -0
- data/test/unit/windows_test.rb +64 -0
- metadata +77 -9
- data/test/browser_spec.rb +0 -1141
- data/test/spec_helper.rb +0 -8
@@ -0,0 +1,51 @@
|
|
1
|
+
class Browser
|
2
|
+
module BlackBerry
|
3
|
+
# Return BlackBerry version.
|
4
|
+
def blackberry_version
|
5
|
+
ua[/BB(10)/, 1] ||
|
6
|
+
ua[/BlackBerry\d+\/(\d+)/, 1] ||
|
7
|
+
ua[/BlackBerry.*?Version\/(\d+)/, 1]
|
8
|
+
end
|
9
|
+
|
10
|
+
# Detect if browser is BlackBerry
|
11
|
+
def blackberry?(version = nil)
|
12
|
+
!!(ua =~ /(BlackBerry|BB10)/) && detect_version?(blackberry_version, version)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Detect if is BlackBerry 4.
|
16
|
+
def blackberry4?
|
17
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
18
|
+
blackberry?(4)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Detect if is BlackBerry 5.
|
22
|
+
def blackberry5?
|
23
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
24
|
+
blackberry?(5)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Detect if is BlackBerry 6.
|
28
|
+
def blackberry6?
|
29
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
30
|
+
blackberry?(6)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Detect if is BlackBerry 7.
|
34
|
+
def blackberry7?
|
35
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
36
|
+
blackberry?(7)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Detect if is BlackBerry 10.
|
40
|
+
def blackberry10?
|
41
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#blackberry?(version) instead"
|
42
|
+
blackberry?(10)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def blackberry_running_safari?
|
48
|
+
blackberry? && safari?
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/browser/methods/ie.rb
CHANGED
@@ -36,38 +36,44 @@ class Browser
|
|
36
36
|
end
|
37
37
|
|
38
38
|
# Detect if browser is Internet Explorer.
|
39
|
-
def ie?
|
40
|
-
msie? || modern_ie?
|
39
|
+
def ie?(version = nil)
|
40
|
+
(msie? || modern_ie?) && detect_version?(ie_version, version)
|
41
41
|
end
|
42
42
|
|
43
43
|
# Detect if browser is Internet Explorer 6.
|
44
44
|
def ie6?
|
45
|
-
ie?
|
45
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
46
|
+
ie?(6)
|
46
47
|
end
|
47
48
|
|
48
49
|
# Detect if browser is Internet Explorer 7.
|
49
50
|
def ie7?
|
50
|
-
ie?
|
51
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
52
|
+
ie?(7)
|
51
53
|
end
|
52
54
|
|
53
55
|
# Detect if browser is Internet Explorer 8.
|
54
56
|
def ie8?
|
55
|
-
ie?
|
57
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
58
|
+
ie?(8)
|
56
59
|
end
|
57
60
|
|
58
61
|
# Detect if browser is Internet Explorer 9.
|
59
62
|
def ie9?
|
60
|
-
ie?
|
63
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
64
|
+
ie?(9)
|
61
65
|
end
|
62
66
|
|
63
67
|
# Detect if browser is Internet Explorer 10.
|
64
68
|
def ie10?
|
65
|
-
ie?
|
69
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
70
|
+
ie?(10)
|
66
71
|
end
|
67
72
|
|
68
73
|
# Detect if browser is Internet Explorer 11.
|
69
74
|
def ie11?
|
70
|
-
ie?
|
75
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ie?(version) instead"
|
76
|
+
ie?(11)
|
71
77
|
end
|
72
78
|
|
73
79
|
# Detect if browser is Microsoft Edge.
|
@@ -10,16 +10,16 @@ class Browser
|
|
10
10
|
!!(ua =~ /Opera Mini/)
|
11
11
|
end
|
12
12
|
|
13
|
-
# Detect if browser is BlackBerry
|
14
|
-
def blackberry?
|
15
|
-
!!(ua =~ /(BlackBerry)/)
|
16
|
-
end
|
17
|
-
|
18
13
|
# Detect if browser is Adobe AIR.
|
19
14
|
def adobe_air?
|
20
15
|
!!(ua =~ /adobeair/i)
|
21
16
|
end
|
22
17
|
|
18
|
+
# Detect if browser is Nokia S40 Ovi Browser.
|
19
|
+
def nokia?
|
20
|
+
!!(ua =~ /S40OviBrowser/)
|
21
|
+
end
|
22
|
+
|
23
23
|
private
|
24
24
|
|
25
25
|
# Regex taken from http://detectmobilebrowsers.com
|
@@ -1,63 +1,69 @@
|
|
1
1
|
class Browser
|
2
2
|
module Platform
|
3
3
|
# Detect if browser is Android.
|
4
|
-
def android?
|
5
|
-
!!(ua =~ /Android/ && !opera?)
|
4
|
+
def android?(version = nil)
|
5
|
+
!!(ua =~ /Android/ && !opera?) && detect_version?(android_version, version)
|
6
|
+
end
|
7
|
+
|
8
|
+
# Detect Android version.
|
9
|
+
def android_version
|
10
|
+
ua[/Android ([\d.]+)/, 1]
|
11
|
+
end
|
12
|
+
|
13
|
+
# Return the iOS version.
|
14
|
+
def ios_version
|
15
|
+
ua[/OS (\d)/, 1]
|
16
|
+
end
|
17
|
+
|
18
|
+
# Detect if running on iOS app webview.
|
19
|
+
def ios_app?
|
20
|
+
ios? && !ua.include?("Safari")
|
21
|
+
end
|
22
|
+
|
23
|
+
# Detect if is iOS webview.
|
24
|
+
def ios_webview?
|
25
|
+
ios_app?
|
6
26
|
end
|
7
27
|
|
8
28
|
# Detect if browser is ios?.
|
9
|
-
def ios?
|
10
|
-
ipod? || ipad? || iphone?
|
29
|
+
def ios?(version = nil)
|
30
|
+
(ipod? || ipad? || iphone?) && detect_version?(ios_version, version)
|
11
31
|
end
|
12
32
|
|
13
33
|
# Detect if is iOS4.
|
14
34
|
def ios4?
|
15
|
-
|
35
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ios?(version) instead"
|
36
|
+
ios?(4)
|
16
37
|
end
|
17
38
|
|
18
39
|
# Detect if is iOS5.
|
19
40
|
def ios5?
|
20
|
-
|
41
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ios?(version) instead"
|
42
|
+
ios?(5)
|
21
43
|
end
|
22
44
|
|
23
45
|
# Detect if is iOS6.
|
24
46
|
def ios6?
|
25
|
-
|
47
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ios?(version) instead"
|
48
|
+
ios?(6)
|
26
49
|
end
|
27
50
|
|
28
51
|
# Detect if is iOS7.
|
29
52
|
def ios7?
|
30
|
-
|
53
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ios?(version) instead"
|
54
|
+
ios?(7)
|
31
55
|
end
|
32
56
|
|
33
57
|
# Detect if is iOS8.
|
34
58
|
def ios8?
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
# Detect if is BlackBerry 4.
|
39
|
-
def blackberry4?
|
40
|
-
blackberry? && !!(ua =~ %r[BlackBerry\d+/4])
|
41
|
-
end
|
42
|
-
|
43
|
-
# Detect if is BlackBerry 5.
|
44
|
-
def blackberry5?
|
45
|
-
blackberry? && !!(ua =~ %r[BlackBerry\d+/5])
|
46
|
-
end
|
47
|
-
|
48
|
-
# Detect if is BlackBerry 6.
|
49
|
-
def blackberry6?
|
50
|
-
blackberry? && !!(ua =~ %r[Version/6])
|
51
|
-
end
|
52
|
-
|
53
|
-
# Detect if is BlackBerry 7.
|
54
|
-
def blackberry7?
|
55
|
-
blackberry? && !!(ua =~ %r[Version/7])
|
59
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ios?(version) instead"
|
60
|
+
ios?(8)
|
56
61
|
end
|
57
62
|
|
58
|
-
# Detect if is
|
59
|
-
def
|
60
|
-
|
63
|
+
# Detect if is iOS9.
|
64
|
+
def ios9?
|
65
|
+
deprecate "Browser##{__method__} is deprecated; use Browser#ios?(version) instead"
|
66
|
+
ios?(9)
|
61
67
|
end
|
62
68
|
|
63
69
|
# Detect if current platform is Macintosh.
|
@@ -111,7 +117,7 @@ class Browser
|
|
111
117
|
|
112
118
|
# Detect if current platform is Windows in 64-bit architecture.
|
113
119
|
def windows_x64?
|
114
|
-
windows? &&
|
120
|
+
!!(windows? && ua =~ /(Win64|x64)/)
|
115
121
|
end
|
116
122
|
|
117
123
|
def windows_wow64?
|
data/lib/browser/methods/tv.rb
CHANGED
data/lib/browser/version.rb
CHANGED
@@ -0,0 +1,248 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class BrowserTest < Minitest::Test
|
4
|
+
setup do
|
5
|
+
@browser = Browser.new
|
6
|
+
end
|
7
|
+
|
8
|
+
test "yields self when block is given" do
|
9
|
+
browser = nil
|
10
|
+
Browser.new {|b| browser = b }
|
11
|
+
assert_kind_of Browser, browser
|
12
|
+
end
|
13
|
+
|
14
|
+
test "responds to ua methods" do
|
15
|
+
assert @browser.respond_to?(:ua)
|
16
|
+
assert @browser.respond_to?(:ua=)
|
17
|
+
end
|
18
|
+
|
19
|
+
test "delegates ua methods" do
|
20
|
+
@browser.user_agent = "Safari"
|
21
|
+
assert_equal "Safari", @browser.ua
|
22
|
+
|
23
|
+
@browser.ua = "Mozilla"
|
24
|
+
assert_equal "Mozilla", @browser.user_agent
|
25
|
+
end
|
26
|
+
|
27
|
+
test "sets accept language while instantiating object" do
|
28
|
+
@browser = Browser.new(:accept_language => "pt-br")
|
29
|
+
assert_equal ["pt-br"], @browser.accept_language
|
30
|
+
end
|
31
|
+
|
32
|
+
test "sets user agent while instantianting object" do
|
33
|
+
@browser = Browser.new(:ua => "Safari")
|
34
|
+
assert_equal "Safari", @browser.ua
|
35
|
+
|
36
|
+
@browser = Browser.new(:user_agent => "Chrome")
|
37
|
+
assert_equal "Chrome", @browser.ua
|
38
|
+
end
|
39
|
+
|
40
|
+
test "detects android" do
|
41
|
+
@browser.ua = $ua["ANDROID"]
|
42
|
+
|
43
|
+
assert_equal "Android", @browser.name
|
44
|
+
assert @browser.android?
|
45
|
+
refute @browser.safari?
|
46
|
+
assert @browser.webkit?
|
47
|
+
assert @browser.mobile?
|
48
|
+
refute @browser.tablet?
|
49
|
+
assert @browser.modern?
|
50
|
+
assert_equal "3.1.2", @browser.full_version
|
51
|
+
assert_equal "3", @browser.version
|
52
|
+
end
|
53
|
+
|
54
|
+
test "detects android tablet" do
|
55
|
+
@browser.ua = $ua["TABLOID"]
|
56
|
+
|
57
|
+
assert_equal "Android", @browser.name
|
58
|
+
assert @browser.android?
|
59
|
+
refute @browser.safari?
|
60
|
+
assert @browser.webkit?
|
61
|
+
refute @browser.mobile?
|
62
|
+
assert @browser.tablet?
|
63
|
+
assert @browser.modern?
|
64
|
+
assert_equal "4.0", @browser.full_version
|
65
|
+
assert_equal "4", @browser.version
|
66
|
+
end
|
67
|
+
|
68
|
+
test "detects surface tablet" do
|
69
|
+
@browser.ua = $ua["SURFACE"]
|
70
|
+
|
71
|
+
assert_equal "Internet Explorer", @browser.name
|
72
|
+
assert @browser.surface?
|
73
|
+
assert @browser.ie?
|
74
|
+
refute @browser.mobile?
|
75
|
+
assert @browser.tablet?
|
76
|
+
assert @browser.modern?
|
77
|
+
assert_equal "10.0", @browser.full_version
|
78
|
+
assert_equal "10", @browser.version
|
79
|
+
end
|
80
|
+
|
81
|
+
test "detects quicktime" do
|
82
|
+
@browser.ua = $ua["QUICKTIME"]
|
83
|
+
|
84
|
+
assert_equal "QuickTime", @browser.name
|
85
|
+
assert @browser.quicktime?
|
86
|
+
assert_equal "7.6.8", @browser.full_version
|
87
|
+
assert_equal "7", @browser.version
|
88
|
+
end
|
89
|
+
|
90
|
+
test "detects core media" do
|
91
|
+
@browser.ua = $ua["COREMEDIA"]
|
92
|
+
|
93
|
+
assert_equal "Apple CoreMedia", @browser.name
|
94
|
+
assert @browser.core_media?
|
95
|
+
assert_equal "1.0.0.10F569", @browser.full_version
|
96
|
+
assert_equal "1", @browser.version
|
97
|
+
end
|
98
|
+
|
99
|
+
test "detects phantom.js" do
|
100
|
+
@browser.ua = $ua["PHANTOM_JS"]
|
101
|
+
|
102
|
+
assert_equal "PhantomJS", @browser.name
|
103
|
+
assert @browser.phantom_js?
|
104
|
+
refute @browser.tablet?
|
105
|
+
refute @browser.mobile?
|
106
|
+
assert @browser.modern?
|
107
|
+
assert_equal "1.9.0", @browser.full_version
|
108
|
+
assert_equal "1", @browser.version
|
109
|
+
end
|
110
|
+
|
111
|
+
test "detects other mobiles" do
|
112
|
+
@browser.ua = "Symbian OS"
|
113
|
+
assert @browser.mobile?
|
114
|
+
refute @browser.tablet?
|
115
|
+
|
116
|
+
@browser.ua = "MIDP-2.0"
|
117
|
+
assert @browser.mobile?
|
118
|
+
refute @browser.tablet?
|
119
|
+
end
|
120
|
+
|
121
|
+
test "detects windows mobile" do
|
122
|
+
@browser.ua = $ua["WINDOWS_MOBILE"]
|
123
|
+
|
124
|
+
assert @browser.mobile?
|
125
|
+
assert @browser.windows?
|
126
|
+
assert @browser.windows_mobile?
|
127
|
+
refute @browser.windows_phone?
|
128
|
+
refute @browser.tablet?
|
129
|
+
end
|
130
|
+
|
131
|
+
test "returns a zero version" do
|
132
|
+
@browser.ua = "Bot"
|
133
|
+
assert_equal "0.0", @browser.full_version
|
134
|
+
assert_equal "0", @browser.version
|
135
|
+
end
|
136
|
+
|
137
|
+
test "sets meta" do
|
138
|
+
@browser.ua = $ua["CHROME"]
|
139
|
+
assert_kind_of Array, @browser.meta
|
140
|
+
end
|
141
|
+
|
142
|
+
test "returns string representation" do
|
143
|
+
@browser.ua = $ua["CHROME"]
|
144
|
+
meta = @browser.to_s
|
145
|
+
|
146
|
+
assert meta.include?("chrome")
|
147
|
+
assert meta.include?("webkit")
|
148
|
+
assert meta.include?("mac")
|
149
|
+
assert meta.include?("modern")
|
150
|
+
end
|
151
|
+
|
152
|
+
test "returns string representation for mobile" do
|
153
|
+
@browser.ua = $ua["BLACKBERRY"]
|
154
|
+
meta = @browser.to_s
|
155
|
+
|
156
|
+
assert meta.include?("blackberry")
|
157
|
+
assert meta.include?("blackberry4")
|
158
|
+
assert meta.include?("other")
|
159
|
+
assert meta.include?("mobile")
|
160
|
+
end
|
161
|
+
|
162
|
+
test "detects unknown id" do
|
163
|
+
@browser.ua = "Unknown"
|
164
|
+
assert_equal :other, @browser.id
|
165
|
+
end
|
166
|
+
|
167
|
+
test "detects unknown name" do
|
168
|
+
@browser.ua = "Unknown"
|
169
|
+
assert_equal "Other", @browser.name
|
170
|
+
end
|
171
|
+
|
172
|
+
test "detects mac platform" do
|
173
|
+
@browser.ua = "Mac OS X"
|
174
|
+
assert_equal :mac, @browser.platform
|
175
|
+
assert @browser.mac?
|
176
|
+
end
|
177
|
+
|
178
|
+
test "detects linux platform" do
|
179
|
+
@browser.ua = "Linux"
|
180
|
+
assert_equal :linux, @browser.platform
|
181
|
+
assert @browser.linux?
|
182
|
+
end
|
183
|
+
|
184
|
+
test "detects unknown platform" do
|
185
|
+
@browser.ua = "Unknown"
|
186
|
+
assert_equal :other, @browser.platform
|
187
|
+
end
|
188
|
+
|
189
|
+
test "returns all known languages" do
|
190
|
+
@browser.accept_language = "en-us,en;q=0.8,pt-br;q=0.5,pt;q=0.3"
|
191
|
+
assert_equal ["en-us", "en", "pt-br", "pt"], @browser.accept_language
|
192
|
+
end
|
193
|
+
|
194
|
+
test "detects xoom" do
|
195
|
+
@browser.ua = $ua["XOOM"]
|
196
|
+
|
197
|
+
assert @browser.android?
|
198
|
+
assert @browser.tablet?
|
199
|
+
refute @browser.mobile?
|
200
|
+
end
|
201
|
+
|
202
|
+
test "detects nexus tablet" do
|
203
|
+
@browser.ua = $ua["NEXUS_TABLET"]
|
204
|
+
|
205
|
+
assert @browser.android?
|
206
|
+
assert @browser.tablet?
|
207
|
+
refute @browser.mobile?
|
208
|
+
end
|
209
|
+
|
210
|
+
test "detects nook" do
|
211
|
+
@browser.ua = $ua["NOOK"]
|
212
|
+
|
213
|
+
assert @browser.tablet?
|
214
|
+
refute @browser.mobile?
|
215
|
+
end
|
216
|
+
|
217
|
+
test "detects samsung" do
|
218
|
+
@browser.ua = $ua["SAMSUNG"]
|
219
|
+
|
220
|
+
assert @browser.tablet?
|
221
|
+
refute @browser.mobile?
|
222
|
+
end
|
223
|
+
|
224
|
+
test "removes duplicate items" do
|
225
|
+
@browser.ua = $ua["SAFARI"]
|
226
|
+
assert_equal ["safari"], @browser.meta.select {|item| item == "safari" }
|
227
|
+
end
|
228
|
+
|
229
|
+
test "detects meta aliased as to_a" do
|
230
|
+
@browser.ua = $ua["SAFARI"]
|
231
|
+
assert_equal @browser.meta, @browser.to_a
|
232
|
+
end
|
233
|
+
|
234
|
+
test "detects tv" do
|
235
|
+
@browser.ua = $ua["SMART_TV"]
|
236
|
+
assert @browser.tv?
|
237
|
+
end
|
238
|
+
|
239
|
+
test "knows a supported browser" do
|
240
|
+
@browser.ua = "Chrome"
|
241
|
+
assert @browser.known?
|
242
|
+
end
|
243
|
+
|
244
|
+
test "does not know an unsupported browser" do
|
245
|
+
@browser.ua = "Fancy new browser"
|
246
|
+
refute @browser.known?
|
247
|
+
end
|
248
|
+
end
|