browser 5.1.0 → 5.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.
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