browser 2.7.1 → 5.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +1 -1
  3. data/.github/workflows/tests.yml +57 -0
  4. data/.gitignore +1 -0
  5. data/.prettierignore +1 -0
  6. data/.rubocop.yml +13 -1
  7. data/CHANGELOG.md +122 -13
  8. data/FUNDING.yml +3 -0
  9. data/README.md +134 -88
  10. data/Rakefile +8 -1
  11. data/bot_exceptions.yml +1 -0
  12. data/bots.yml +300 -293
  13. data/browser.gemspec +4 -1
  14. data/gemfiles/{rails5.gemfile → rails6_1.gemfile} +1 -1
  15. data/lib/browser/accept_language.rb +4 -4
  16. data/lib/browser/aliases.rb +1 -1
  17. data/lib/browser/alipay.rb +1 -1
  18. data/lib/browser/base.rb +82 -18
  19. data/lib/browser/blackberry.rb +1 -1
  20. data/lib/browser/bot/empty_user_agent_matcher.rb +11 -0
  21. data/lib/browser/bot/keyword_matcher.rb +11 -0
  22. data/lib/browser/bot/known_bots_matcher.rb +11 -0
  23. data/lib/browser/bot.rb +34 -26
  24. data/lib/browser/browser.rb +59 -56
  25. data/lib/browser/chrome.rb +13 -3
  26. data/lib/browser/device/android.rb +1 -1
  27. data/lib/browser/device/blackberry_playbook.rb +1 -1
  28. data/lib/browser/device/ipad.rb +1 -1
  29. data/lib/browser/device/iphone.rb +1 -1
  30. data/lib/browser/device/ipod_touch.rb +1 -1
  31. data/lib/browser/device/kindle.rb +1 -1
  32. data/lib/browser/device/kindle_fire.rb +1 -1
  33. data/lib/browser/device/playstation3.rb +1 -1
  34. data/lib/browser/device/playstation4.rb +1 -1
  35. data/lib/browser/device/psp.rb +1 -1
  36. data/lib/browser/device/psvita.rb +1 -1
  37. data/lib/browser/device/samsung.rb +33 -0
  38. data/lib/browser/device/surface.rb +1 -1
  39. data/lib/browser/device/switch.rb +1 -1
  40. data/lib/browser/device/tv.rb +1 -1
  41. data/lib/browser/device/unknown.rb +1 -1
  42. data/lib/browser/device/wii.rb +1 -1
  43. data/lib/browser/device/wiiu.rb +1 -1
  44. data/lib/browser/device/xbox_360.rb +1 -1
  45. data/lib/browser/device/xbox_one.rb +1 -1
  46. data/lib/browser/device.rb +37 -27
  47. data/lib/browser/duck_duck_go.rb +22 -0
  48. data/lib/browser/edge.rb +3 -3
  49. data/lib/browser/electron.rb +1 -1
  50. data/lib/browser/facebook.rb +1 -1
  51. data/lib/browser/firefox.rb +1 -1
  52. data/lib/browser/google_search_app.rb +21 -0
  53. data/lib/browser/huawei_browser.rb +21 -0
  54. data/lib/browser/instagram.rb +1 -1
  55. data/lib/browser/internet_explorer.rb +2 -2
  56. data/lib/browser/maxthon.rb +21 -0
  57. data/lib/browser/meta/base.rb +0 -1
  58. data/lib/browser/meta.rb +12 -13
  59. data/lib/browser/micro_messenger.rb +1 -1
  60. data/lib/browser/middleware/context/additions.rb +1 -1
  61. data/lib/browser/middleware.rb +1 -1
  62. data/lib/browser/miui_browser.rb +21 -0
  63. data/lib/browser/nokia.rb +1 -1
  64. data/lib/browser/opera.rb +1 -1
  65. data/lib/browser/otter.rb +1 -1
  66. data/lib/browser/phantom_js.rb +1 -1
  67. data/lib/browser/platform/adobe_air.rb +1 -1
  68. data/lib/browser/platform/android.rb +1 -1
  69. data/lib/browser/platform/base.rb +3 -2
  70. data/lib/browser/platform/blackberry.rb +1 -1
  71. data/lib/browser/platform/chrome_os.rb +1 -1
  72. data/lib/browser/platform/firefox_os.rb +1 -1
  73. data/lib/browser/platform/ios.rb +2 -2
  74. data/lib/browser/platform/kai_os.rb +23 -0
  75. data/lib/browser/platform/linux.rb +1 -1
  76. data/lib/browser/platform/mac.rb +5 -3
  77. data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
  78. data/lib/browser/platform/windows.rb +2 -2
  79. data/lib/browser/platform/windows_mobile.rb +1 -1
  80. data/lib/browser/platform/windows_phone.rb +1 -1
  81. data/lib/browser/platform.rb +37 -28
  82. data/lib/browser/qq.rb +1 -1
  83. data/lib/browser/rails.rb +3 -3
  84. data/lib/browser/safari.rb +16 -1
  85. data/lib/browser/samsung_browser.rb +21 -0
  86. data/lib/browser/snapchat.rb +1 -1
  87. data/lib/browser/sougou_browser.rb +24 -0
  88. data/lib/browser/sputnik.rb +2 -5
  89. data/lib/browser/uc_browser.rb +1 -1
  90. data/lib/browser/{generic.rb → unknown.rb} +3 -3
  91. data/lib/browser/version.rb +1 -1
  92. data/lib/browser/weibo.rb +1 -1
  93. data/lib/browser/yandex.rb +1 -1
  94. data/lib/browser.rb +2 -2
  95. data/samsung.yml +138 -0
  96. data/test/browser_test.rb +37 -10
  97. data/test/test_helper.rb +8 -0
  98. data/test/ua.yml +26 -3
  99. data/test/ua_bots.yml +9 -2
  100. data/test/ua_search_engines.yml +1 -0
  101. data/test/unit/accept_language_test.rb +6 -0
  102. data/test/unit/adobe_air_test.rb +1 -1
  103. data/test/unit/alipay_test.rb +6 -0
  104. data/test/unit/blackberry_test.rb +0 -6
  105. data/test/unit/bots_test.rb +26 -39
  106. data/test/unit/chrome_test.rb +8 -3
  107. data/test/unit/console_test.rb +2 -2
  108. data/test/unit/device_test.rb +30 -3
  109. data/test/unit/duck_duck_go_test.rb +37 -0
  110. data/test/unit/edge_test.rb +34 -6
  111. data/test/unit/firefox_test.rb +0 -3
  112. data/test/unit/google_search_app_test.rb +54 -0
  113. data/test/unit/huawei_browser_test.rb +25 -0
  114. data/test/unit/internet_explorer_test.rb +0 -12
  115. data/test/unit/ios_test.rb +0 -5
  116. data/test/unit/kai_os_test.rb +31 -0
  117. data/test/unit/kindle_test.rb +0 -2
  118. data/test/unit/maxthon_test.rb +25 -0
  119. data/test/unit/meta_test.rb +10 -2
  120. data/test/unit/micro_messenger_test.rb +21 -6
  121. data/test/unit/miui_browser_test.rb +25 -0
  122. data/test/unit/opera_test.rb +1 -2
  123. data/test/unit/platform_test.rb +13 -8
  124. data/test/unit/qq_test.rb +12 -0
  125. data/test/unit/safari_test.rb +12 -7
  126. data/test/unit/samsung_browser_test.rb +23 -0
  127. data/test/unit/sougou_browser_test.rb +41 -0
  128. data/test/unit/sputnik_test.rb +1 -0
  129. metadata +46 -16
  130. data/.bundle/config +0 -2
  131. data/.travis.yml +0 -23
  132. data/lib/browser/meta/modern.rb +0 -11
  133. /data/gemfiles/{rails6.gemfile → rails6_0.gemfile} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 17e665a446ca2a9578cae49ad272bbbc596c29bf8518643cbcec39f2654e4bc4
4
- data.tar.gz: 0dd132f6f496e0221417a5b474878823eed6b7e4eac51764f383cd2825cb1969
3
+ metadata.gz: 837e072e8544da56ee51cf187b35850444d17c931c535115cf50c679d2227a7c
4
+ data.tar.gz: b789e49dbd45164c42ff5a25c5bd5a5d0c54a32ac945bcbf97ee41682ca23693
5
5
  SHA512:
6
- metadata.gz: 2902444a66316eb79ccb9fd409d58d21ac764b6f22a86bb9a2af74791f3bd8c86301a7c7b8829fe17f14a24c0827b3584d0c0a7813f85c9a4022a179ea67db7a
7
- data.tar.gz: 1282a961f637a98449d6425272abcd3f005c003908ce37e0954052b3b5fd8bc6bf3d5d75e3104e6d3705823e3abe60f9eb9fca7046bf94f1c16f625cc6a09b07
6
+ metadata.gz: 4adb59b646efa17033f385ad0b935f067c9b67a8718a1362f0c5ef49a3c28decd064ec788739c4d38f9969a2189ffc7090ae5d62d3979c249e3237f6b547bfe1
7
+ data.tar.gz: c0712d54d08e48522b26ce1c162a238711f20bced68b578e300657ec25ff313d9637a2a881dd2797cd8295b90d100a60789364b17cb9b008e4e3da092e071d0a
@@ -27,4 +27,4 @@
27
27
 
28
28
  ## Report
29
29
 
30
- [Visit <http://user-agent.herokuapp.com> and paste the URL here]
30
+ [Visit <https://user-agent.herokuapp.com> and paste the URL here]
@@ -0,0 +1,57 @@
1
+ name: Tests
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - main
7
+ push:
8
+ branches:
9
+ - main
10
+
11
+ schedule:
12
+ - cron: "0 10 * * *"
13
+
14
+ jobs:
15
+ build:
16
+ name: Tests with Ruby ${{ matrix.ruby }} and ${{ matrix.gemfile }}
17
+ runs-on: "ubuntu-latest"
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ ruby: ["3.0.x", "2.7.x", "2.6.x", "2.5.x"]
22
+ gemfile:
23
+ - Gemfile
24
+ - gemfiles/rails6_1.gemfile
25
+ - gemfiles/rails6_0.gemfile
26
+
27
+ steps:
28
+ - uses: actions/checkout@v1
29
+
30
+ - uses: actions/cache@v2
31
+ with:
32
+ path: vendor/bundle
33
+ key: >
34
+ ${{ runner.os }}-${{ matrix.ruby }}-gems-${{ hashFiles(matrix.gemfile) }}
35
+ restore-keys: >
36
+ ${{ runner.os }}-${{ matrix.ruby }}-gems-${{ hashFiles(matrix.gemfile) }}
37
+
38
+ - name: Set up Ruby
39
+ uses: actions/setup-ruby@v1
40
+ with:
41
+ ruby-version: ${{ matrix.ruby }}
42
+
43
+ - name: Install gem dependencies
44
+ env:
45
+ RAILS_ENV: test
46
+ BUNDLE_GEMFILE: ${{ matrix.gemfile }}
47
+ run: |
48
+ gem install bundler
49
+ bundle config path vendor/bundle
50
+ bundle update --jobs 4 --retry 3
51
+
52
+ - name: Run Tests
53
+ env:
54
+ RAILS_ENV: test
55
+ BUNDLE_GEMFILE: ${{ matrix.gemfile }}
56
+ run: |
57
+ bundle exec rake
data/.gitignore CHANGED
@@ -4,3 +4,4 @@ doc
4
4
  log
5
5
  *.lock
6
6
  bin/
7
+ .bundle
data/.prettierignore ADDED
@@ -0,0 +1 @@
1
+ *.yml
data/.rubocop.yml CHANGED
@@ -16,7 +16,7 @@ AllCops:
16
16
  Metrics/ClassLength:
17
17
  Enabled: false
18
18
 
19
- Metrics/LineLength:
19
+ Layout/LineLength:
20
20
  Max: 80
21
21
 
22
22
  Metrics/MethodLength:
@@ -27,3 +27,15 @@ Style/Alias:
27
27
 
28
28
  Lint/RedundantCopDisableDirective:
29
29
  Enabled: false
30
+
31
+ Metrics/AbcSize:
32
+ Enabled: false
33
+
34
+ Metrics/CyclomaticComplexity:
35
+ Enabled: false
36
+
37
+ Metrics/PerceivedComplexity:
38
+ Enabled: false
39
+
40
+ Naming/VariableNumber:
41
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,16 +1,118 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 5.3.1
4
4
 
5
- - Handle Snapchat user agents that have a space or an empty string instead of a slash before the version.
5
+ - Remove Stripe webhooks from bot list.
6
+
7
+ ## 5.3.0
8
+
9
+ - Bump up minimum required ruby version to 2.5.0. We're now relying on
10
+ `String#match?`, which was introduced by ruby-2.4, but given that ruby's
11
+ stable version is >= 2.5, seems reasonable.
12
+
13
+ ## 5.2.0
14
+
15
+ - Add KaiOS detection.
16
+ - Replace `String#=~` with `String#match?` and other optimizations.
17
+
18
+ ## 5.1.0
19
+
20
+ - Add Samsung device detection.
21
+ - Delay parsing `Accept-Language` until `Browser::Base#accept_language` is
22
+ called for the first time.
23
+ - Bump up default size limit for `Accept-Language` and `User-Agent` to 2048
24
+ bytes.
25
+
26
+ ## 5.0.0
27
+
28
+ - Rename `Browser::Platform#other?` to `Browser::Platform#unknown?`.
29
+ - Unknown platforms now return `:unknown_platform` as the id.
30
+ - Unknown devices now return `:unknown_device` as the id.
31
+ - Unknown browsers now return `:unknown_browser` as the id.
32
+ - All the changes above affect how `browser.meta` is composed.
33
+ - Add method `Browser::Base#unknown?`.
34
+ - Fix issue with `Browser::Base#safari?` matching full version.
35
+ - Add Maxthon detection.
36
+ - Add Google Search App detection.
37
+ - Add Huawei Browser detection.
38
+ - Fix Duck Duck Go browser that was being recognized as a bot.
39
+ - Add Miui Browser detection.
40
+ - Add `Browser::Base#qq?`.
41
+ - Fix QQ detection.
42
+ - Fix Alipay detection.
43
+ - Add Sougou Browser detection.
44
+ - User agent has a size limit of 512 bytes. This can be customized through
45
+ `Browser.user_agent_size_limit`.
46
+ - Accept-Language has a size limit of 256 bytes. This can be customized through
47
+ `Browser.accept_language_size_limit`.
48
+
49
+ ## 4.2.0
50
+
51
+ - Fix Chrome Lighthouse detection.
52
+ - Add Skype to bot list.
53
+
54
+ ## 4.1.0
55
+
56
+ - Add Samsung browser.
57
+ - Add Google Image Proxy to the bot list.
58
+ - Add The Knowledge AI bot to the bot list.
59
+ - Add Go HttpClient to the bot list.
60
+ - Fix Microsoft Edge detection on Android and iOS.
61
+ - Fix MicroMessenger detection on Android
62
+
63
+ ## 4.0.0
64
+
65
+ - Add Chrome Lighthouse to bot list.
66
+ - Add SeobilityBot to the bot list.
67
+ - Detect Mac-based platforms differently, depending on the version; "Mac OS X"
68
+ will be returned for versions prior to 10.12, and "macOS" for newer versions.
69
+ - Remove `Browser.modern_rules` and `Browser::Base#modern?`.
70
+ - Add DuckDuckGo browser.
71
+
72
+ # 3.0.3
73
+
74
+ - Deprecate `Browser.modern_rules` and `Browser::Base#modern?`. Theses methods
75
+ will be removed on the next major released, or by June 1st 2020.
76
+
77
+ ## 3.0.2
78
+
79
+ - Remove .bundle directory from package.
80
+
81
+ ## 3.0.1
82
+
83
+ - Fix issue with MS Edge detection as a modern browser.
84
+
85
+ ## 3.0.0
86
+
87
+ - Add ArchiveTeam's ArchiveBot to the bot list.
88
+ - Fix QQ Browser detection.
89
+ - Update modern rules.
90
+ - You can now define new bot matchers by adding a callable object to
91
+ `Browser::Bot.matchers`.
92
+ - Fix `browser.yandex?` and `browser.sputnik?`.
93
+ - [BREAKING CHANGE] Removed methods to enable the bot's empty user agent
94
+ detection (`Browser::Bot.detect_empty_ua!` and
95
+ `Browser::Bot.detect_empty_ua?`).
96
+ - [BREAKING CHANGE] Bot detection is now more aggressive by default. It matches
97
+ empty user agents, anything that matches
98
+ `crawl|fetch|search|monitoring|spider|bot`, and anything listed under
99
+ https://github.com/fnando/browser/blob/master/bots.yml.
100
+ - Add Jaunt to the bot list.
101
+
102
+ ## 2.7.1
103
+
104
+ - Handle Snapchat user agents that have a space or an empty string instead of a
105
+ slash before the version.
6
106
  - Fix iOS 10+ version detection.
7
- - Add fallback versions for instagram and snapchat to avoid NoMethodErrors on unexpected user agents.
107
+ - Add fallback versions for instagram and snapchat to avoid NoMethodErrors on
108
+ unexpected user agents.
8
109
 
9
110
  ## 2.7.0
10
111
 
11
112
  - Add more Slack bots.
12
113
  - Handle instagram user agents that have a slash instead of a space.
13
- - Add `Browser::Bot.why?(ua)` to help debugging why a user agent is considered bot.
114
+ - Add `Browser::Bot.why?(ua)` to help debugging why a user agent is considered
115
+ bot.
14
116
  - Promote Snapchat to a browser (it was detected as a bot previously).
15
117
  - Detect Edge based on Chrome correctly.
16
118
  - Improve Yandex detection.
@@ -26,7 +128,8 @@
26
128
 
27
129
  - Add GarlikCrawler, ImplisenseBot and WikiDo bots.
28
130
  - Add Mastodon URL expander bot.
29
- - Add eZ Publish Link Validator, GermCrawler, Pu_iN Crawler, ZoomBot, and ZoominfoBot bots.
131
+ - Add eZ Publish Link Validator, GermCrawler, Pu_iN Crawler, ZoomBot, and
132
+ ZoominfoBot bots.
30
133
  - Add Datanyze bot.
31
134
  - Add support for Instagram in-app browser.
32
135
  - Add Updown.io monitor bot.
@@ -48,13 +151,13 @@
48
151
  - Add Jooble bot.
49
152
  - Add Fyre bot.
50
153
  - Drop Rails 4 official support.
51
- - Fix accept-language sorting (If HTTP-header has value `en,fr`—without qualities—the first language should be `en` instead of `fr`).
154
+ - Fix accept-language sorting (If HTTP-header has value `en,fr`—without
155
+ qualities—the first language should be `en` instead of `fr`).
52
156
  - Ignore malformed strings when comparing versions.
53
157
  - Fix Facebook detection on newer apps.
54
158
  - Change precedence for bot detection when common libs are used.
55
159
  - Add Yandex's search browser to the exception list.
56
160
 
57
-
58
161
  ## v2.5.3
59
162
 
60
163
  - Add Google Site Verification to the bot list.
@@ -95,8 +198,10 @@
95
198
  - Add Google Drive API, Proximic Spider, NewRelic pinger and SocialRank bots.
96
199
  - Add Pinboard in-app browser to the bot exception list.
97
200
  - All browser detection methods can now compare versions.
98
- - All platform detection methods can now compare versions (except `#linux?` and `#firefox_os?`).
99
- - Add `browser/aliases`, so you can have methods on the base object (e.g. `browser.mobile?`). See README for instructions.
201
+ - All platform detection methods can now compare versions (except `#linux?` and
202
+ `#firefox_os?`).
203
+ - Add `browser/aliases`, so you can have methods on the base object (e.g.
204
+ `browser.mobile?`). See README for instructions.
100
205
  - Remove official support for Rails 3 and Ruby 2.1.
101
206
 
102
207
  ## v2.3.0
@@ -127,7 +232,8 @@
127
232
 
128
233
  ## v2.0.3
129
234
 
130
- - Fix issue with version detection when no actual version is provided (i.e. the user agent doesn't have any version information).
235
+ - Fix issue with version detection when no actual version is provided (i.e. the
236
+ user agent doesn't have any version information).
131
237
 
132
238
  ## v2.0.2
133
239
 
@@ -140,9 +246,12 @@
140
246
 
141
247
  ## v2.0.0
142
248
 
143
- - `Browser#platform` now returns instance of `Browser::Platform`, instead of a `String`. It contains information about the platform (software).
144
- - `Browser#device` was added. It returns information about the device (hardware).
145
- - `Browser#accept_language` now returns a list of `Browser::AcceptLanguage` objects.
249
+ - `Browser#platform` now returns instance of `Browser::Platform`, instead of a
250
+ `String`. It contains information about the platform (software).
251
+ - `Browser#device` was added. It returns information about the device
252
+ (hardware).
253
+ - `Browser#accept_language` now returns a list of `Browser::AcceptLanguage`
254
+ objects.
146
255
  - `Browser#bot` now returns a `Browser::Bot` instance.
147
256
  - Safari running as web app mode is not recognized as Safari anymore.
148
257
  - ruby-2.3+ will always activate frozen strings.
data/FUNDING.yml ADDED
@@ -0,0 +1,3 @@
1
+ # These are supported funding model platforms
2
+
3
+ github: [fnando]