browser 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -8
  3. data/CHANGELOG.md +9 -0
  4. data/README.md +12 -1
  5. data/Rakefile +1 -1
  6. data/bot_exceptions.yml +2 -0
  7. data/bots.yml +6 -2
  8. data/lib/browser.rb +1 -0
  9. data/lib/browser/accept_language.rb +5 -1
  10. data/lib/browser/action_controller.rb +1 -0
  11. data/lib/browser/aliases.rb +32 -0
  12. data/lib/browser/alipay.rb +1 -0
  13. data/lib/browser/base.rb +37 -31
  14. data/lib/browser/blackberry.rb +1 -0
  15. data/lib/browser/bot.rb +1 -0
  16. data/lib/browser/browser.rb +1 -0
  17. data/lib/browser/chrome.rb +1 -0
  18. data/lib/browser/detect_version.rb +1 -0
  19. data/lib/browser/device.rb +2 -1
  20. data/lib/browser/device/base.rb +1 -0
  21. data/lib/browser/device/blackberry_playbook.rb +1 -0
  22. data/lib/browser/device/ipad.rb +1 -0
  23. data/lib/browser/device/iphone.rb +1 -0
  24. data/lib/browser/device/ipod_touch.rb +1 -0
  25. data/lib/browser/device/kindle.rb +1 -0
  26. data/lib/browser/device/kindle_fire.rb +1 -0
  27. data/lib/browser/device/playstation3.rb +1 -0
  28. data/lib/browser/device/playstation4.rb +1 -0
  29. data/lib/browser/device/psp.rb +1 -0
  30. data/lib/browser/device/psvita.rb +1 -0
  31. data/lib/browser/device/surface.rb +1 -0
  32. data/lib/browser/device/tv.rb +1 -0
  33. data/lib/browser/device/unknown.rb +1 -0
  34. data/lib/browser/device/wii.rb +1 -0
  35. data/lib/browser/device/wiiu.rb +1 -0
  36. data/lib/browser/device/xbox_360.rb +1 -0
  37. data/lib/browser/device/xbox_one.rb +1 -0
  38. data/lib/browser/edge.rb +1 -0
  39. data/lib/browser/firefox.rb +1 -0
  40. data/lib/browser/generic.rb +1 -0
  41. data/lib/browser/internet_explorer.rb +1 -0
  42. data/lib/browser/meta.rb +1 -0
  43. data/lib/browser/meta/base.rb +1 -0
  44. data/lib/browser/meta/device.rb +1 -0
  45. data/lib/browser/meta/generic_browser.rb +1 -0
  46. data/lib/browser/meta/id.rb +1 -0
  47. data/lib/browser/meta/ie.rb +1 -0
  48. data/lib/browser/meta/ios.rb +1 -0
  49. data/lib/browser/meta/mobile.rb +1 -0
  50. data/lib/browser/meta/modern.rb +1 -0
  51. data/lib/browser/meta/platform.rb +1 -0
  52. data/lib/browser/meta/proxy.rb +1 -0
  53. data/lib/browser/meta/safari.rb +1 -0
  54. data/lib/browser/meta/tablet.rb +1 -0
  55. data/lib/browser/meta/webkit.rb +1 -0
  56. data/lib/browser/micro_messenger.rb +1 -0
  57. data/lib/browser/middleware.rb +1 -0
  58. data/lib/browser/middleware/context.rb +1 -0
  59. data/lib/browser/middleware/context/additions.rb +1 -0
  60. data/lib/browser/middleware/context/url_methods.rb +1 -0
  61. data/lib/browser/nokia.rb +1 -0
  62. data/lib/browser/opera.rb +1 -0
  63. data/lib/browser/phantom_js.rb +1 -0
  64. data/lib/browser/platform.rb +5 -4
  65. data/lib/browser/platform/adobe_air.rb +1 -0
  66. data/lib/browser/platform/android.rb +1 -0
  67. data/lib/browser/platform/base.rb +1 -0
  68. data/lib/browser/platform/blackberry.rb +1 -0
  69. data/lib/browser/platform/chrome_os.rb +1 -0
  70. data/lib/browser/platform/firefox_os.rb +1 -0
  71. data/lib/browser/platform/ios.rb +1 -0
  72. data/lib/browser/platform/linux.rb +1 -0
  73. data/lib/browser/platform/mac.rb +1 -0
  74. data/lib/browser/platform/other.rb +1 -0
  75. data/lib/browser/platform/windows.rb +1 -0
  76. data/lib/browser/platform/windows_mobile.rb +1 -0
  77. data/lib/browser/platform/windows_phone.rb +1 -0
  78. data/lib/browser/qq.rb +1 -0
  79. data/lib/browser/rails.rb +1 -0
  80. data/lib/browser/safari.rb +1 -0
  81. data/lib/browser/testing.rb +1 -0
  82. data/lib/browser/uc_browser.rb +1 -0
  83. data/lib/browser/version.rb +2 -1
  84. data/lib/browser/weibo.rb +1 -0
  85. data/test/browser_test.rb +5 -1
  86. data/test/middleware_test.rb +1 -0
  87. data/test/rails_test.rb +1 -0
  88. data/test/sample_app.rb +2 -1
  89. data/test/test_helper.rb +3 -2
  90. data/test/ua.yml +1 -0
  91. data/test/ua_bots.yml +4 -0
  92. data/test/unit/accept_language_test.rb +38 -1
  93. data/test/unit/adobe_air_test.rb +1 -0
  94. data/test/unit/aliases_test.rb +42 -0
  95. data/test/unit/alipay_test.rb +6 -0
  96. data/test/unit/android_test.rb +1 -0
  97. data/test/unit/blackberry_test.rb +1 -0
  98. data/test/unit/bots_test.rb +11 -0
  99. data/test/unit/chrome_test.rb +11 -0
  100. data/test/unit/console_test.rb +1 -0
  101. data/test/unit/device_test.rb +8 -0
  102. data/test/unit/edge_test.rb +60 -0
  103. data/test/unit/firefox_test.rb +6 -0
  104. data/test/unit/generic_test.rb +1 -0
  105. data/test/unit/{ie_test.rb → internet_explorer_test.rb} +1 -50
  106. data/test/unit/ios_app_test.rb +1 -0
  107. data/test/unit/ios_test.rb +1 -0
  108. data/test/unit/kindle_test.rb +1 -0
  109. data/test/unit/meta_test.rb +1 -0
  110. data/test/unit/micro_messenger_test.rb +6 -0
  111. data/test/unit/nokia_test.rb +6 -0
  112. data/test/unit/opera_test.rb +11 -0
  113. data/test/unit/platform_test.rb +3 -0
  114. data/test/unit/proxy_test.rb +1 -0
  115. data/test/unit/qq_test.rb +1 -0
  116. data/test/unit/safari_test.rb +6 -0
  117. data/test/unit/uc_browser_test.rb +6 -0
  118. data/test/unit/weibo_test.rb +7 -1
  119. data/test/unit/windows_phone_test.rb +1 -0
  120. data/test/unit/windows_test.rb +1 -0
  121. metadata +10 -6
  122. data/gemfiles/rails3.gemfile +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 72b5d1c89680820ed248d00b2dcded4666971ab0
4
- data.tar.gz: 4b86b3e6f15c553d1e969693983ca1db9c7528fe
3
+ metadata.gz: f0828232944387c4f17fbb21c8898d3d310d76d6
4
+ data.tar.gz: ada9777fb56e976f0cbe2712b47922f5567c4dea
5
5
  SHA512:
6
- metadata.gz: 82c72769220e2ce3ceebfb88c501992626919c2b67e09a4d76e1e07cda3d77a40c003157e479e6b97cbca68b7673a2f9f213989e0c04fc265515e6ebaf165ac6
7
- data.tar.gz: 13ce0ee867206cbf455a63c9cdc42466ad33e2654d315784913e5b3fc0e70946bda5fc8b59409dd45917cdc7ac219f54fc82b35f249b9fe819d3a504e89ebcba
6
+ metadata.gz: d3bd6be62efd9948c33f9ead9efbb721a416a3273c403d6c81494f8fb0479e7abf531de4e92668e8ecf4426832466013de4f9225de3d3ead056b6772dbd1b813
7
+ data.tar.gz: 3d01aa934c168838d056632917f8e8a58cd4d9e810b28f9a27d8d4ddd79db52049718eab57e937201fe5d4305e71b8638ef3c92ab1342342b5beb74b46dee87b
@@ -2,17 +2,12 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  rvm:
5
- - '2.3.1'
6
- - '2.2.2'
7
- - '2.1'
5
+ - '2.4.1'
6
+ - '2.3.4'
7
+ - '2.2.7'
8
8
  gemfile:
9
9
  - Gemfile
10
- - gemfiles/rails3.gemfile
11
10
  - gemfiles/rails4.gemfile
12
- matrix:
13
- exclude:
14
- - rvm: '2.1'
15
- gemfile: Gemfile
16
11
  script: bundle exec rake
17
12
  notifications:
18
13
  email: false
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## v2.4.0
4
+
5
+ - Add Google Drive API, Proximic Spider, NewRelic pinger and SocialRank bots.
6
+ - Add Pinboard in-app browser to the bot exception list.
7
+ - All browser detection methods can now compare versions.
8
+ - All platform detection methods can now compare versions (except `#linux?` and `#firefox_os?`).
9
+ - Add `browser/aliases`, so you can have methods on the base object (e.g. `browser.mobile?`). See README for instructions.
10
+ - Remove official support for Rails 3 and Ruby 2.1.
11
+
3
12
  ## v2.3.0
4
13
 
5
14
  - Add AWS ELB bot.
data/README.md CHANGED
@@ -116,11 +116,22 @@ browser.platform.windows_touchscreen_desktop?
116
116
  browser.platform.windows_vista?
117
117
  browser.platform.windows_wow64?
118
118
  browser.platform.windows_x64?
119
- browser.platform.windows_x64?
120
119
  browser.platform.windows_x64_inclusive?
121
120
  browser.platform.windows_xp?
122
121
  ```
123
122
 
123
+ ### Aliases
124
+
125
+ To add aliases like `mobile?` and `tablet?` to the base object (e.g `browser.mobile?`), require the `browser/aliases` file and extend the Browser::Base object like the following:
126
+
127
+ ```ruby
128
+ require "browser/aliases"
129
+ Browser::Base.include(Browser::Aliases)
130
+
131
+ browser = Browser.new("Some user agent")
132
+ browser.mobile? #=> false
133
+ ```
134
+
124
135
  ### What's being detected?
125
136
 
126
137
  - For a list of platform detections, check [lib/browser/platform.rb](https://github.com/fnando/browser/blob/master/lib/browser/platform.rb)
data/Rakefile CHANGED
@@ -22,7 +22,7 @@ desc "Run specs against all gemfiles"
22
22
  task "test:all" do
23
23
  %w[
24
24
  Gemfile
25
- gemfiles/rails3.gemfile
25
+ gemfiles/rails4.gemfile
26
26
  ].each do |gemfile|
27
27
  puts "=> Running with Gemfile: #{gemfile}"
28
28
  system "BUNDLE_GEMFILE=#{gemfile} rake test"
@@ -1 +1,3 @@
1
1
  - ruby build
2
+ - pinterest/android
3
+ - pinterest/ios
data/bots.yml CHANGED
@@ -10,6 +10,7 @@ ahrefsbot: "Ahrefs backlinks research tool"
10
10
  alexa: "Alexa Crawler"
11
11
  apache-httpclient: "Java http library"
12
12
  apachebench: "ApacheBench (ab)"
13
+ apis-google: APIs-Google
13
14
  appengine-google: "Google App Engine"
14
15
  applebot: "Apple Bot"
15
16
  archive.org_bot: "Internet Archive (archive.org)"
@@ -33,8 +34,8 @@ check_http: "Nagios monitor"
33
34
  cliqzbot: "Cliqzbot"
34
35
  cmradar/0.1: "CMRadar/0.1"
35
36
  coldfusion: "ColdFusion http library"
36
- comodo-webinspector-crawler: "Comodo"
37
37
  commoncrawl: "CCBot"
38
+ comodo-webinspector-crawler: "Comodo"
38
39
  crowsnest: "Crowsnest"
39
40
  curabot: "cura.yt"
40
41
  curl: "curl unix CLI http client"
@@ -138,7 +139,8 @@ netcraft: "Netcraft"
138
139
  netstate: "netEstate NE Crawler"
139
140
  netvibes: "Personalized dashboard bot"
140
141
  netzcheckbot: "netzcheck"
141
- newrelicpinger: "NewRelic monitor"
142
+ newrelicmonitor: "NewRelic monitor"
143
+ newrelicpinger: "NewRelicPinger"
142
144
  newsme: "newsme"
143
145
  niki-bot: "niki-bot"
144
146
  ning: "NING - Yet Another Twitter Swarmer"
@@ -156,6 +158,7 @@ pingdom: "Pingdom monitoring"
156
158
  pinterest: "Pinterest"
157
159
  plukkie: "botje.com/plukkie.htm"
158
160
  privacyawarebot: "PrivacyAwareBot"
161
+ proximic: "Proximic Spider"
159
162
  psbot-page: "Picsearch"
160
163
  publiclibraryarchive.org: "publiclibraryarchive.org"
161
164
  pycurl: "Python http library"
@@ -189,6 +192,7 @@ slack: "Slackbot-LinkExpanding"
189
192
  slackbot: "Slack Bot"
190
193
  slurp: "Yahoo spider"
191
194
  smtbot: "SimilarTech"
195
+ socialrank: "SocialRankIOBot"
192
196
  sogou: "Chinese search engine"
193
197
  spbot: "OpenLinkProfiler"
194
198
  spider: "generic web spider"
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "browser/browser"
3
4
  require "browser/rails" if defined?(::Rails)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class AcceptLanguage
4
5
  def self.languages
@@ -32,7 +33,10 @@ module Browser
32
33
  end
33
34
 
34
35
  def code
35
- @code ||= part[/\A([^-;]+)/, 1]
36
+ @code ||= begin
37
+ code = part[/\A([^-;]+)/, 1]
38
+ code.downcase if code
39
+ end
36
40
  end
37
41
 
38
42
  def region
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "action_controller/railtie"
3
4
 
4
5
  module Browser
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "browser"
4
+ require "forwardable"
5
+
6
+ module Browser
7
+ module Aliases
8
+ PLATFORM_ALIASES = %w[
9
+ adobe_air? android? blackberry? chrome_os? firefox_os? ios? ios_app?
10
+ ios_webview? linux? mac? windows10? windows7? windows8? windows8_1?
11
+ windows? windows_mobile? windows_phone? windows_rt?
12
+ windows_touchscreen_desktop? windows_vista? windows_wow64? windows_x64?
13
+ windows_x64_inclusive? windows_xp?
14
+ ].freeze
15
+
16
+ DEVICE_ALIASES = %w[
17
+ blackberry_playbook? console? ipad? iphone? ipod_touch? kindle?
18
+ kindle_fire? mobile? nintendo? nintendo_wii? nintendo_wiiu? playbook?
19
+ playstation3? playstation4? playstation? playstation_vita? ps3? ps4? psp?
20
+ psp_vita? silk? surface? tablet? tv? vita? wii? wiiu? xbox? xbox_360?
21
+ xbox_one?
22
+ ].freeze
23
+
24
+ def self.included(target)
25
+ target.class_eval do
26
+ extend Forwardable
27
+ def_delegators :platform, *PLATFORM_ALIASES
28
+ def_delegators :device, *DEVICE_ALIASES
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Alipay < Base
4
5
  def id
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Base
4
5
  include DetectVersion
@@ -57,12 +58,12 @@ module Browser
57
58
  # Detect if browser is Microsoft Internet Explorer.
58
59
  def ie?(expected_version = nil)
59
60
  InternetExplorer.new(ua).match? &&
60
- detect_version?(version, expected_version)
61
+ detect_version?(full_version, expected_version)
61
62
  end
62
63
 
63
64
  # Detect if browser is Microsoft Edge.
64
- def edge?
65
- Edge.new(ua).match?
65
+ def edge?(expected_version = nil)
66
+ Edge.new(ua).match? && detect_version?(full_version, expected_version)
66
67
  end
67
68
 
68
69
  def compatibility_view?
@@ -78,23 +79,26 @@ module Browser
78
79
  end
79
80
 
80
81
  # Detect if browser is WebKit-based.
81
- def webkit?
82
- ua =~ /AppleWebKit/i && !edge?
82
+ def webkit?(expected_version = nil)
83
+ ua =~ /AppleWebKit/i &&
84
+ !edge? &&
85
+ detect_version?(webkit_full_version, expected_version)
83
86
  end
84
87
 
85
88
  # Detect if browser is QuickTime
86
- def quicktime?
87
- ua =~ /QuickTime/i
89
+ def quicktime?(expected_version = nil)
90
+ ua =~ /QuickTime/i && detect_version?(full_version, expected_version)
88
91
  end
89
92
 
90
93
  # Detect if browser is Apple CoreMedia.
91
- def core_media?
92
- ua =~ /CoreMedia/
94
+ def core_media?(expected_version = nil)
95
+ ua =~ /CoreMedia/ && detect_version?(full_version, expected_version)
93
96
  end
94
97
 
95
98
  # Detect if browser is PhantomJS
96
- def phantom_js?
97
- PhantomJS.new(ua).match?
99
+ def phantom_js?(expected_version = nil)
100
+ PhantomJS.new(ua).match? &&
101
+ detect_version?(full_version, expected_version)
98
102
  end
99
103
 
100
104
  # Detect if browser is Safari.
@@ -107,53 +111,55 @@ module Browser
107
111
  end
108
112
 
109
113
  # Detect if browser is Firefox.
110
- def firefox?
111
- Firefox.new(ua).match?
114
+ def firefox?(expected_version = nil)
115
+ Firefox.new(ua).match? && detect_version?(full_version, expected_version)
112
116
  end
113
117
 
114
118
  # Detect if browser is Chrome.
115
- def chrome?
116
- Chrome.new(ua).match?
119
+ def chrome?(expected_version = nil)
120
+ Chrome.new(ua).match? && detect_version?(full_version, expected_version)
117
121
  end
118
122
 
119
123
  # Detect if browser is Opera.
120
- def opera?
121
- Opera.new(ua).match?
124
+ def opera?(expected_version = nil)
125
+ Opera.new(ua).match? && detect_version?(full_version, expected_version)
122
126
  end
123
127
 
124
128
  # Detect if browser is Yandex.
125
- def yandex?
126
- ua =~ /YaBrowser/
129
+ def yandex?(expected_version = nil)
130
+ ua =~ /YaBrowser/ && detect_version?(full_version, expected_version)
127
131
  end
128
132
 
129
133
  # Detect if browser is UCBrowser.
130
- def uc_browser?
131
- UCBrowser.new(ua).match?
134
+ def uc_browser?(expected_version = nil)
135
+ UCBrowser.new(ua).match? &&
136
+ detect_version?(full_version, expected_version)
132
137
  end
133
138
 
134
139
  # Detect if browser is Nokia S40 Ovi Browser.
135
- def nokia?
136
- Nokia.new(ua).match?
140
+ def nokia?(expected_version = nil)
141
+ Nokia.new(ua).match? && detect_version?(full_version, expected_version)
137
142
  end
138
143
 
139
144
  # Detect if browser is MicroMessenger.
140
- def micro_messenger?
141
- MicroMessenger.new(ua).match?
145
+ def micro_messenger?(expected_version = nil)
146
+ MicroMessenger.new(ua).match? &&
147
+ detect_version?(full_version, expected_version)
142
148
  end
143
149
 
144
150
  alias_method :wechat?, :micro_messenger?
145
151
 
146
- def weibo?
147
- Weibo.new(ua).match?
152
+ def weibo?(expected_version = nil)
153
+ Weibo.new(ua).match? && detect_version?(full_version, expected_version)
148
154
  end
149
155
 
150
- def alipay?
151
- Alipay.new(ua).match?
156
+ def alipay?(expected_version = nil)
157
+ Alipay.new(ua).match? && detect_version?(full_version, expected_version)
152
158
  end
153
159
 
154
160
  # Detect if browser is Opera Mini.
155
- def opera_mini?
156
- ua =~ /Opera Mini/
161
+ def opera_mini?(expected_version = nil)
162
+ ua =~ /Opera Mini/ && detect_version?(full_version, expected_version)
157
163
  end
158
164
 
159
165
  def webkit_full_version
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class BlackBerry < Base
4
5
  def id
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Bot
4
5
  def self.detect_empty_ua!
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "set"
3
4
  require "yaml"
4
5
  require "pathname"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Chrome < Base
4
5
  def id
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  module DetectVersion
4
5
  private
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "browser/device/base"
3
4
  require "browser/device/unknown"
4
5
  require "browser/device/ipad"
@@ -39,8 +40,8 @@ module Browser
39
40
  PlayStation3,
40
41
  PSVita,
41
42
  PSP,
42
- Iphone,
43
43
  Ipad,
44
+ Iphone,
44
45
  IpodTouch,
45
46
  Unknown
46
47
  ]
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Device
4
5
  class Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Device
4
5
  class BlackBerryPlaybook < Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Device
4
5
  class Ipad < Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Device
4
5
  class Iphone < Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Device
4
5
  class IpodTouch < Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Device
4
5
  class Kindle < Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Device
4
5
  class KindleFire < Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Device
4
5
  class PlayStation3 < Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Browser
3
4
  class Device
4
5
  class PlayStation4 < Base