browser 5.1.0 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +57 -0
  3. data/.rubocop.yml +3 -0
  4. data/CHANGELOG.md +5 -0
  5. data/README.md +3 -3
  6. data/browser.gemspec +3 -3
  7. data/lib/browser/accept_language.rb +4 -4
  8. data/lib/browser/alipay.rb +1 -1
  9. data/lib/browser/base.rb +12 -8
  10. data/lib/browser/blackberry.rb +1 -1
  11. data/lib/browser/bot/keyword_matcher.rb +1 -1
  12. data/lib/browser/browser.rb +1 -2
  13. data/lib/browser/chrome.rb +2 -2
  14. data/lib/browser/device.rb +4 -4
  15. data/lib/browser/device/android.rb +1 -1
  16. data/lib/browser/device/blackberry_playbook.rb +1 -1
  17. data/lib/browser/device/ipad.rb +1 -1
  18. data/lib/browser/device/iphone.rb +1 -1
  19. data/lib/browser/device/ipod_touch.rb +1 -1
  20. data/lib/browser/device/kindle.rb +1 -1
  21. data/lib/browser/device/kindle_fire.rb +1 -1
  22. data/lib/browser/device/playstation3.rb +1 -1
  23. data/lib/browser/device/playstation4.rb +1 -1
  24. data/lib/browser/device/psp.rb +1 -1
  25. data/lib/browser/device/psvita.rb +1 -1
  26. data/lib/browser/device/surface.rb +1 -1
  27. data/lib/browser/device/switch.rb +1 -1
  28. data/lib/browser/device/tv.rb +1 -1
  29. data/lib/browser/device/wii.rb +1 -1
  30. data/lib/browser/device/wiiu.rb +1 -1
  31. data/lib/browser/device/xbox_360.rb +1 -1
  32. data/lib/browser/device/xbox_one.rb +1 -1
  33. data/lib/browser/duck_duck_go.rb +1 -1
  34. data/lib/browser/edge.rb +2 -2
  35. data/lib/browser/electron.rb +1 -1
  36. data/lib/browser/facebook.rb +1 -1
  37. data/lib/browser/firefox.rb +1 -1
  38. data/lib/browser/google_search_app.rb +1 -1
  39. data/lib/browser/huawei_browser.rb +1 -1
  40. data/lib/browser/instagram.rb +1 -1
  41. data/lib/browser/internet_explorer.rb +2 -2
  42. data/lib/browser/maxthon.rb +1 -1
  43. data/lib/browser/micro_messenger.rb +1 -1
  44. data/lib/browser/miui_browser.rb +1 -1
  45. data/lib/browser/nokia.rb +1 -1
  46. data/lib/browser/opera.rb +1 -1
  47. data/lib/browser/otter.rb +1 -1
  48. data/lib/browser/phantom_js.rb +1 -1
  49. data/lib/browser/platform.rb +17 -11
  50. data/lib/browser/platform/adobe_air.rb +1 -1
  51. data/lib/browser/platform/android.rb +1 -1
  52. data/lib/browser/platform/blackberry.rb +1 -1
  53. data/lib/browser/platform/chrome_os.rb +1 -1
  54. data/lib/browser/platform/firefox_os.rb +1 -1
  55. data/lib/browser/platform/ios.rb +1 -1
  56. data/lib/browser/platform/kai_os.rb +23 -0
  57. data/lib/browser/platform/linux.rb +1 -1
  58. data/lib/browser/platform/mac.rb +1 -1
  59. data/lib/browser/platform/windows.rb +1 -1
  60. data/lib/browser/platform/windows_mobile.rb +1 -1
  61. data/lib/browser/platform/windows_phone.rb +1 -1
  62. data/lib/browser/qq.rb +1 -1
  63. data/lib/browser/safari.rb +2 -2
  64. data/lib/browser/samsung_browser.rb +1 -1
  65. data/lib/browser/snapchat.rb +1 -1
  66. data/lib/browser/sougou_browser.rb +1 -1
  67. data/lib/browser/sputnik.rb +1 -1
  68. data/lib/browser/uc_browser.rb +1 -1
  69. data/lib/browser/version.rb +1 -1
  70. data/lib/browser/weibo.rb +1 -1
  71. data/lib/browser/yandex.rb +1 -1
  72. data/test/ua.yml +2 -0
  73. data/test/unit/bots_test.rb +1 -1
  74. data/test/unit/device_test.rb +1 -1
  75. data/test/unit/kai_os_test.rb +31 -0
  76. data/test/unit/meta_test.rb +1 -1
  77. data/test/unit/platform_test.rb +1 -1
  78. metadata +12 -9
  79. data/.travis.yml +0 -23
@@ -12,7 +12,7 @@ module Browser
12
12
  end
13
13
 
14
14
  def match?
15
- ua =~ /Nintendo WiiU/i
15
+ ua.match?(/Nintendo WiiU/i)
16
16
  end
17
17
  end
18
18
  end
@@ -12,7 +12,7 @@ module Browser
12
12
  end
13
13
 
14
14
  def match?
15
- ua =~ /Xbox/i
15
+ ua.match?(/Xbox/i)
16
16
  end
17
17
  end
18
18
  end
@@ -12,7 +12,7 @@ module Browser
12
12
  end
13
13
 
14
14
  def match?
15
- ua =~ /Xbox One/i
15
+ ua.match?(/Xbox One/i)
16
16
  end
17
17
  end
18
18
  end
@@ -16,7 +16,7 @@ module Browser
16
16
  end
17
17
 
18
18
  def match?
19
- ua =~ /DuckDuckGo/
19
+ ua.include?("DuckDuckGo")
20
20
  end
21
21
  end
22
22
  end
@@ -15,11 +15,11 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ %r{((?:Edge|Edg|EdgiOS|EdgA)/[\d.]+|Trident/8)}
18
+ ua.match?(%r{((?:Edge|Edg|EdgiOS|EdgA)/[\d.]+|Trident/8)})
19
19
  end
20
20
 
21
21
  def chrome_based?
22
- match? && ua =~ /\bEdg\b/
22
+ match? && ua.match?(/\bEdg\b/)
23
23
  end
24
24
  end
25
25
  end
@@ -16,7 +16,7 @@ module Browser
16
16
  end
17
17
 
18
18
  def match?
19
- ua =~ /Electron/
19
+ ua.include?("Electron")
20
20
  end
21
21
  end
22
22
  end
@@ -17,7 +17,7 @@ module Browser
17
17
  end
18
18
 
19
19
  def match?
20
- ua =~ /FBAV|FBAN/
20
+ ua.match?(/FBAV|FBAN/)
21
21
  end
22
22
  end
23
23
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /Firefox|FxiOS/
18
+ ua.match?(/Firefox|FxiOS/)
19
19
  end
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /GSA/
18
+ ua.include?("GSA")
19
19
  end
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /HuaweiBrowser/i
18
+ ua.match?(/HuaweiBrowser/i)
19
19
  end
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /Instagram/
18
+ ua.include?("Instagram")
19
19
  end
20
20
  end
21
21
  end
@@ -52,11 +52,11 @@ module Browser
52
52
  end
53
53
 
54
54
  private def msie?
55
- ua =~ /MSIE/ && ua !~ /Opera/
55
+ ua.include?("MSIE") && !ua.include?("Opera")
56
56
  end
57
57
 
58
58
  private def modern_ie?
59
- ua =~ %r{Trident/.*?; rv:(.*?)}
59
+ ua.match?(%r{Trident/.*?; rv:(.*?)})
60
60
  end
61
61
  end
62
62
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /Maxthon/i
18
+ ua.match?(/Maxthon/i)
19
19
  end
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /MicroMessenger/i
18
+ ua.match?(/MicroMessenger/i)
19
19
  end
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /MiuiBrowser/
18
+ ua.include?("MiuiBrowser")
19
19
  end
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /S40OviBrowser/
18
+ ua.include?("S40OviBrowser")
19
19
  end
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ %r{(Opera|OPR/)}
18
+ ua.match?(%r{(Opera|OPR/)})
19
19
  end
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /Otter/
18
+ ua.include?("Otter")
19
19
  end
20
20
  end
21
21
  end
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /PhantomJS/
18
+ ua.include?("PhantomJS")
19
19
  end
20
20
  end
21
21
  end
@@ -13,6 +13,7 @@ require_relative "platform/android"
13
13
  require_relative "platform/unknown"
14
14
  require_relative "platform/chrome_os"
15
15
  require_relative "platform/adobe_air"
16
+ require_relative "platform/kai_os"
16
17
 
17
18
  module Browser
18
19
  class Platform
@@ -32,6 +33,7 @@ module Browser
32
33
  BlackBerry,
33
34
  IOS,
34
35
  Mac,
36
+ KaiOS,
35
37
  FirefoxOS,
36
38
  Windows,
37
39
  Linux,
@@ -81,6 +83,10 @@ module Browser
81
83
  id == :firefox_os
82
84
  end
83
85
 
86
+ def kai_os?
87
+ id == :kai_os
88
+ end
89
+
84
90
  def ios?(expected_version = nil)
85
91
  id == :ios && detect_version?(version, expected_version)
86
92
  end
@@ -130,46 +136,46 @@ module Browser
130
136
  # Detect if in an Android app webview (Lollipop and newer)
131
137
  # https://developer.chrome.com/multidevice/user-agent#webview_user_agent
132
138
  def android_app?
133
- android? && ua =~ /\bwv\b/
139
+ android? && ua.match?(/\bwv\b/)
134
140
  end
135
141
  alias_method :android_webview?, :android_app?
136
142
 
137
143
  # http://msdn.microsoft.com/fr-FR/library/ms537503.aspx#PltToken
138
144
  def windows_xp?
139
- windows? && ua =~ /Windows NT 5\.[12]/
145
+ windows? && ua.match?(/Windows NT 5\.[12]/)
140
146
  end
141
147
 
142
148
  def windows_vista?
143
- windows? && ua =~ /Windows NT 6\.0/
149
+ windows? && ua.include?("Windows NT 6.0")
144
150
  end
145
151
 
146
152
  def windows7?
147
- windows? && ua =~ /Windows NT 6\.1/
153
+ windows? && ua.include?("Windows NT 6.1")
148
154
  end
149
155
 
150
156
  def windows8?
151
- windows? && ua =~ /Windows NT 6\.[2-3]/
157
+ windows? && ua.match?(/Windows NT 6\.[2-3]/)
152
158
  end
153
159
 
154
160
  def windows8_1?
155
- windows? && ua =~ /Windows NT 6\.3/
161
+ windows? && ua.include?("Windows NT 6.3")
156
162
  end
157
163
 
158
164
  def windows10?
159
- windows? && ua =~ /Windows NT 10/
165
+ windows? && ua.include?("Windows NT 10")
160
166
  end
161
167
 
162
168
  def windows_rt?
163
- windows8? && ua =~ /ARM/
169
+ windows8? && ua.include?("ARM")
164
170
  end
165
171
 
166
172
  # Detect if current platform is Windows in 64-bit architecture.
167
173
  def windows_x64?
168
- windows? && ua =~ /(Win64|x64|Windows NT 5\.2)/
174
+ windows? && ua.match?(/(Win64|x64|Windows NT 5\.2)/)
169
175
  end
170
176
 
171
177
  def windows_wow64?
172
- windows? && ua =~ /WOW64/i
178
+ windows? && ua.match?(/WOW64/i)
173
179
  end
174
180
 
175
181
  def windows_x64_inclusive?
@@ -177,7 +183,7 @@ module Browser
177
183
  end
178
184
 
179
185
  def windows_touchscreen_desktop?
180
- windows? && ua =~ /Touch/
186
+ windows? && ua.include?("Touch")
181
187
  end
182
188
 
183
189
  private :subject
@@ -4,7 +4,7 @@ module Browser
4
4
  class Platform
5
5
  class AdobeAir < Base
6
6
  def match?
7
- ua =~ /AdobeAIR/
7
+ ua.include?("AdobeAIR")
8
8
  end
9
9
 
10
10
  def version
@@ -4,7 +4,7 @@ module Browser
4
4
  class Platform
5
5
  class Android < Base
6
6
  def match?
7
- ua =~ /Android/
7
+ ua.include?("Android") && !ua.include?("KAIOS")
8
8
  end
9
9
 
10
10
  def name
@@ -4,7 +4,7 @@ module Browser
4
4
  class Platform
5
5
  class BlackBerry < Base
6
6
  def match?
7
- ua =~ /BB10|BlackBerry/
7
+ ua.match?(/BB10|BlackBerry/)
8
8
  end
9
9
 
10
10
  def name
@@ -4,7 +4,7 @@ module Browser
4
4
  class Platform
5
5
  class ChromeOS < Base
6
6
  def match?
7
- ua =~ /CrOS/
7
+ ua.include?("CrOS")
8
8
  end
9
9
 
10
10
  def name
@@ -16,7 +16,7 @@ module Browser
16
16
  end
17
17
 
18
18
  def match?
19
- ua !~ /(Android|Linux|BlackBerry|Windows|Mac)/ && ua =~ /Firefox/
19
+ ua !~ /(Android|Linux|BlackBerry|Windows|Mac)/ && ua.include?("Firefox")
20
20
  end
21
21
  end
22
22
  end
@@ -32,7 +32,7 @@ module Browser
32
32
  end
33
33
 
34
34
  def match?
35
- ua =~ MATCHER
35
+ ua.match?(MATCHER)
36
36
  end
37
37
 
38
38
  def device
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class Platform
5
+ class KaiOS < Base
6
+ def version
7
+ ua[%r{KAIOS/([\d.]+)}, 1]
8
+ end
9
+
10
+ def name
11
+ "KaiOS"
12
+ end
13
+
14
+ def id
15
+ :kai_os
16
+ end
17
+
18
+ def match?
19
+ ua.include?("KAIOS")
20
+ end
21
+ end
22
+ end
23
+ end
@@ -16,7 +16,7 @@ module Browser
16
16
  end
17
17
 
18
18
  def match?
19
- ua =~ /Linux/
19
+ ua.include?("Linux")
20
20
  end
21
21
  end
22
22
  end
@@ -18,7 +18,7 @@ module Browser
18
18
  end
19
19
 
20
20
  def match?
21
- ua =~ /Mac/
21
+ ua.include?("Mac")
22
22
  end
23
23
  end
24
24
  end
@@ -16,7 +16,7 @@ module Browser
16
16
  end
17
17
 
18
18
  def match?
19
- ua =~ /Windows/
19
+ ua.include?("Windows")
20
20
  end
21
21
  end
22
22
  end
@@ -16,7 +16,7 @@ module Browser
16
16
  end
17
17
 
18
18
  def match?
19
- ua =~ /Windows CE/
19
+ ua.include?("Windows CE")
20
20
  end
21
21
  end
22
22
  end
@@ -16,7 +16,7 @@ module Browser
16
16
  end
17
17
 
18
18
  def match?
19
- ua =~ /Windows Phone/
19
+ ua.include?("Windows Phone")
20
20
  end
21
21
  end
22
22
  end
@@ -19,7 +19,7 @@ module Browser
19
19
  end
20
20
 
21
21
  def match?
22
- ua =~ %r{QQ/|QQBrowser}i
22
+ ua.match?(%r{QQ/|QQBrowser}i)
23
23
  end
24
24
  end
25
25
  end
@@ -18,8 +18,8 @@ module Browser
18
18
  end
19
19
 
20
20
  def match?
21
- ua =~ /Safari/ &&
22
- ua !~ /PhantomJS|FxiOS/ &&
21
+ ua.include?("Safari") &&
22
+ !ua.match?(/PhantomJS|FxiOS/) &&
23
23
  !edge? &&
24
24
  !chrome? &&
25
25
  !opera? &&
@@ -15,7 +15,7 @@ module Browser
15
15
  end
16
16
 
17
17
  def match?
18
- ua =~ /SamsungBrowser/
18
+ ua.include?("SamsungBrowser")
19
19
  end
20
20
  end
21
21
  end