browser 0.7.2 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 84af323f06390a6a105eff4988f6f61eb139520a
4
- data.tar.gz: 4a0bc068dd755041f5aa64f8fd20baab667d8fee
3
+ metadata.gz: bf057ec168032438df5564a7a443ae8856607637
4
+ data.tar.gz: 85337b0813ccc98e8d6970e2470b7ed9b0413abc
5
5
  SHA512:
6
- metadata.gz: 97d05cf42b15c8e93d81d1d1b3940b04dfa6178b9df3b992fd64d81887e31a256fc56124eed717dfb74c8a63c11683911baf2e21d0d843a686e4ceb0cf38e564
7
- data.tar.gz: b5ab3a5f147fd46beafea02aeade8388ef0ee93504a4641cd851cff13f7ef0b2329befcd0faede8a6a1f650c48510a51a7ef8bcc9948f3c2bcf93ce22e4a4506
6
+ metadata.gz: 0d8f6c9fdcbbee23131bab3aa4dc79f84413f1ff58a5e750a113293a06782fd01305f7da5a0e7287c9cf2944d6fdfbfb699016cc3e926f12a37e8514e21207af
7
+ data.tar.gz: 6dc8e034081314899bc389bce63f05fe1e1394d1c4f80f13d6720af9b5d3eb3d9864f9b9c9308b4c9344075bf29d81c92fb8a3c8eeaad57bf0bf5a38e1cebf53
@@ -0,0 +1,44 @@
1
+ # Contributing
2
+
3
+ ## Issues
4
+
5
+ If you want to request a feature or report a bug, please use the following template.
6
+
7
+ ```markdown
8
+ ## Description
9
+
10
+ [Add feature/bug description here]
11
+
12
+ ## How to reproduce
13
+
14
+ [Add steps on how to reproduce this issue]
15
+
16
+ ## What do you expect
17
+
18
+ [Describe what do you expect to happen]
19
+
20
+ ## What happened instead
21
+
22
+ [Describe the actual results]
23
+
24
+ ## Gem version:
25
+
26
+ Browser version: [Add browser gem version here]
27
+
28
+ ## Report
29
+
30
+ Visit <http://user-agent.herokuapp.com> and paste the URL here.
31
+ ```
32
+
33
+ ## Writing code
34
+
35
+ Once you've made your great commits (include tests, please):
36
+
37
+ 1. [Fork](http://help.github.com/forking/) browser
38
+ 2. Create a topic branch - `git checkout -b my_branch`
39
+ 3. Push to your branch - `git push origin my_branch`
40
+ 4. [Create an Issue](http://github.com/fnando/browser/issues) with a link to your branch
41
+ 5. That's it!
42
+
43
+ Please respect the indentation rules and code style.
44
+ And use 2 spaces, not tabs. And don't touch the versioning thing.
data/README.md CHANGED
@@ -44,6 +44,7 @@ browser.phantom_js?
44
44
  browser.quicktime?
45
45
  browser.core_media?
46
46
  browser.silk?
47
+ browser.known? # has the browser been successfully detected?
47
48
  browser.meta # an array with several attributes
48
49
  browser.to_s # the meta info joined by space
49
50
  ```
@@ -120,33 +121,6 @@ Rails.configuration.middleware.use Browser::Middleware do
120
121
  end
121
122
  ```
122
123
 
123
- ## Issues
124
-
125
- If you want to request a feature or report a bug, please use the following template.
126
-
127
- ```markdown
128
- ## Description
129
-
130
- [Add feature/bug description here]
131
-
132
- ## How to reproduce
133
-
134
- [Add steps on how to reproduce this issue]
135
-
136
- ## What do you expect
137
-
138
- [Describe what do you expect to happen]
139
-
140
- ## What happened instead
141
-
142
- [Describe the actual results]
143
-
144
- ## Environment
145
-
146
- - User agent: [Get the UA - <http://user-agent.herokuapp.com>]
147
- - Gem version: [Add browser gem version here]
148
- ```
149
-
150
124
  ## Maintainer
151
125
 
152
126
  * Nando Vieira - http://nandovieira.com.br
data/bots.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  360Spider: "360Spider"
2
+ AddThis: "AddThis"
2
3
  ADmantX: "ADmantX Platform Semantic Analyzer"
3
4
  AdsBot-Google: "Google Adwords"
4
5
  AhrefsBot: "Ahrefs backlinks research tool"
@@ -9,7 +10,7 @@ AppEngine-Google: "Google App Engine"
9
10
  Ask Jeeves: "Ask Jeeves"
10
11
  AsyncHttpClient: "Java http and WebSocket client library"
11
12
  awe.sm: "Awe.sm URL expander"
12
- Baidu: "Chinese search engine"
13
+ Baidu: "baidu"
13
14
  Baiduspider: "Chinese search engine"
14
15
  bingbot: "Microsoft bing bot"
15
16
  bitlybot: "bit.ly bot"
@@ -23,6 +24,7 @@ ColdFusion: "ColdFusion http library"
23
24
  Crowsnest: "Crowsnest"
24
25
  Crowsnest: "crowsnest.tv news portal bot"
25
26
  curl: "curl unix CLI http client"
27
+ DAP/NetHTTP: "DAP/NetHTTP"
26
28
  developers.google.com/+/web/snippet/: "Google Plus"
27
29
  DigitalPersona Fingerprint Software: "HP Fingerprint scanner"
28
30
  DotBot: "Dot Bot"
@@ -56,6 +58,7 @@ InAGist: "URL resolver"
56
58
  Insieve Bot: "Insieve Bot"
57
59
  InsieveBot: "InsieveBot"
58
60
  Instapaper: "Instapaper"
61
+ Insitesbot: "Insitesbot"
59
62
  IstellaBot: "IstellaBot"
60
63
  jack: "jack"
61
64
  Jakarta Commons-HttpClient: "Jakarta Commons-HttpClient"
@@ -88,6 +91,7 @@ MFE_expand: "Mcafee spider"
88
91
  MJ12bot: "Majestic-12 spider"
89
92
  MojeekBot: "Mojeek UK search crawler"
90
93
  msnbot: "Microsoft bot"
94
+ netState: "netEstate NE Crawler"
91
95
  Netvibes: "Personalized dashboard bot"
92
96
  NewRelicPinger: "NewRelic monitor"
93
97
  newsme: "Link analyzer"
@@ -112,6 +116,7 @@ QuickLook: "QuickLook"
112
116
  Readability: "Readability"
113
117
  RebelMouse: "RebelMouse"
114
118
  redditbot: "Reddit Bot"
119
+ RelateIQ: "RelateIQ"
115
120
  Riddler: "Riddler Bot"
116
121
  rogerbot: "SeoMoz spider"
117
122
  Ruby/1.9.3: "Ruby/1.9.3"
@@ -128,6 +133,7 @@ Slurp: "Yahoo spider"
128
133
  Sogou: "Chinese search engine"
129
134
  spider: "generic web spider"
130
135
  Spinn3r: "Spinn3r aggregator"
136
+ StatusCake: "StatusCake"
131
137
  Test Certificate Info: "C http library?"
132
138
  trendictionbot: "trendiction search"
133
139
  TurnitinBot: "TurnitinBot"
@@ -66,7 +66,7 @@ class Browser
66
66
 
67
67
  VERSIONS = {
68
68
  chrome: %r[(?:Chrome|CriOS)/([\d.]+)],
69
- default: %r[(?:Version|MSIE|Firefox|QuickTime|BlackBerry[^/]+|CoreMedia v|PhantomJS)[/ ]?([a-z0-9.]+)]i,
69
+ default: %r[(?:Version|MSIE|Firefox|QuickTime|BlackBerry[^/]+|CoreMedia v|PhantomJS|AdobeAIR)[/ ]?([a-z0-9.]+)]i,
70
70
  opera: %r[(?:Opera/.*? Version/([\d.]+)|Chrome/.*?OPR/([\d.]+))],
71
71
  ie: %r[(?:MSIE |Trident/.*?; rv:)([\d.]+)]
72
72
  }
@@ -184,6 +184,10 @@ class Browser
184
184
  !!(ua =~ /Silk/)
185
185
  end
186
186
 
187
+ def known?
188
+ id != :other
189
+ end
190
+
187
191
  # Return a meta info about this browser.
188
192
  def meta
189
193
  Meta.constants.each_with_object(Set.new) do |meta_name, meta|
@@ -13,11 +13,23 @@ class Browser
13
13
  end
14
14
 
15
15
  def bot?
16
- Browser::Bots.detect_empty_ua? && ua.strip == "" || BOTS.any? {|key, _| ua.include?(key) }
16
+ bot_with_empty_ua? || BOTS.any? {|key, _| ua.include?(key) }
17
+ end
18
+
19
+ def bot_name
20
+ return unless bot?
21
+ return "Generic Bot" if bot_with_empty_ua?
22
+ BOTS.find {|key, description| ua.include?(key) }.first
17
23
  end
18
24
 
19
25
  def search_engine?
20
26
  SEARCH_ENGINES.any? {|key, _| ua.include?(key) }
21
27
  end
28
+
29
+ private
30
+
31
+ def bot_with_empty_ua?
32
+ Browser::Bots.detect_empty_ua? && ua.strip == ""
33
+ end
22
34
  end
23
35
  end
@@ -1,15 +1,25 @@
1
1
  class Browser
2
2
  module Consoles
3
- # Detect if browser is Xbox.
3
+ # Detect if browser is running under Xbox.
4
4
  def xbox?
5
5
  !!(ua =~ /xbox/i)
6
6
  end
7
7
 
8
- # Detect if browser is PlayStation.
8
+ # Detect if browser is running under Xbox One.
9
+ def xbox_one?
10
+ !!(ua =~ /xbox one/i)
11
+ end
12
+
13
+ # Detect if browser is running under PlayStation.
9
14
  def playstation?
10
15
  !!(ua =~ /playstation/i)
11
16
  end
12
17
 
18
+ # Detect if browser is running under PlayStation 4.
19
+ def playstation4?
20
+ !!(ua =~ /playstation 4/i)
21
+ end
22
+
13
23
  # Detect if browser is Nintendo.
14
24
  def nintendo?
15
25
  !!(ua =~ /nintendo/i)
@@ -22,7 +32,12 @@ class Browser
22
32
 
23
33
  # Detect if browser is running from PSP.
24
34
  def psp?
25
- !!(ua =~ /(PSP|Playstation Vita)/)
35
+ !!(ua =~ /(PSP)/ || psp_vita?)
36
+ end
37
+
38
+ # Detect if browser is running from PSP Vita.
39
+ def psp_vita?
40
+ !!(ua =~ /Playstation Vita/)
26
41
  end
27
42
  end
28
43
  end
@@ -15,10 +15,20 @@ class Browser
15
15
  !!(ua =~ /(BlackBerry)/)
16
16
  end
17
17
 
18
+ # Detect if browser is Adobe AIR.
19
+ def adobe_air?
20
+ !!(ua =~ /adobeair/i)
21
+ end
22
+
18
23
  private
19
24
 
25
+ # Regex taken from http://detectmobilebrowsers.com
20
26
  def detect_mobile?
21
- ua =~ /(Mobi(le)?|Symbian|MIDP|Windows CE)/ || blackberry? || psp? || opera_mini?
27
+ !!(
28
+ psp? ||
29
+ /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.match(ua) ||
30
+ /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.match(ua[0..3])
31
+ )
22
32
  end
23
33
  end
24
34
  end
@@ -30,7 +30,7 @@ class Browser
30
30
  ios? && !!(ua =~ /OS 7/)
31
31
  end
32
32
 
33
- # Detect if is iOS7.
33
+ # Detect if is iOS8.
34
34
  def ios8?
35
35
  ios? && !!(ua =~ /OS 8/)
36
36
  end
@@ -62,7 +62,7 @@ class Browser
62
62
 
63
63
  # Detect if current platform is Macintosh.
64
64
  def mac?
65
- ua =~ /Mac OS X/ && !ios?
65
+ !!(ua =~ /Mac OS X/ && !ios?)
66
66
  end
67
67
 
68
68
  # Detect if current platform is Windows.
@@ -1,8 +1,8 @@
1
1
  class Browser
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 7
5
- PATCH = 2
4
+ MINOR = 8
5
+ PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
@@ -491,6 +491,7 @@ describe Browser do
491
491
 
492
492
  assert_equal "PlayStation Portable", @browser.name
493
493
  assert @browser.psp?
494
+ refute @browser.psp_vita?
494
495
  assert @browser.mobile?
495
496
  end
496
497
 
@@ -499,6 +500,7 @@ describe Browser do
499
500
 
500
501
  assert_equal "PlayStation Portable", @browser.name
501
502
  assert @browser.psp?
503
+ assert @browser.psp_vita?
502
504
  assert @browser.mobile?
503
505
  end
504
506
 
@@ -829,6 +831,7 @@ describe Browser do
829
831
 
830
832
  assert @browser.console?
831
833
  assert @browser.playstation?
834
+ refute @browser.playstation4?
832
835
  end
833
836
 
834
837
  it "detects playstation 4" do
@@ -836,6 +839,7 @@ describe Browser do
836
839
 
837
840
  assert @browser.console?
838
841
  assert @browser.playstation?
842
+ assert @browser.playstation4?
839
843
  end
840
844
 
841
845
  it "detects xbox 360" do
@@ -843,6 +847,7 @@ describe Browser do
843
847
 
844
848
  assert @browser.console?
845
849
  assert @browser.xbox?
850
+ refute @browser.xbox_one?
846
851
  end
847
852
 
848
853
  it "detects xbox one" do
@@ -850,6 +855,7 @@ describe Browser do
850
855
 
851
856
  assert @browser.console?
852
857
  assert @browser.xbox?
858
+ assert @browser.xbox_one?
853
859
  end
854
860
 
855
861
  it "removes duplicate items" do
@@ -884,22 +890,44 @@ describe Browser do
884
890
  end
885
891
 
886
892
  it "doesn't consider empty UA as bot" do
887
- @browser.ua = ''
893
+ @browser.ua = ""
888
894
  refute @browser.bot?
889
895
  end
890
896
 
891
897
  it "allows setting empty string as bots" do
892
898
  Browser::Bots.detect_empty_ua!
893
- @browser.ua = ''
899
+ @browser.ua = ""
900
+
894
901
  assert @browser.bot?
895
902
  end
896
903
 
897
- it "doesn't consider mozilla as a bot when considerint empty UA" do
904
+ it "doesn't detect mozilla as a bot when considering empty UA" do
898
905
  Browser::Bots.detect_empty_ua!
899
906
  @browser.ua = "Mozilla"
907
+
900
908
  refute @browser.bot?
901
909
  end
902
910
 
911
+ it "returns bot name" do
912
+ @browser.ua = $ua["GOOGLE_BOT"]
913
+ assert_equal @browser.bot_name, "Googlebot"
914
+
915
+ @browser.ua = $ua["FACEBOOK_BOT"]
916
+ assert_equal @browser.bot_name, "facebookexternalhit"
917
+ end
918
+
919
+ it "returns bot name (empty string ua detection enabled)" do
920
+ Browser::Bots.detect_empty_ua!
921
+ @browser.ua = ""
922
+
923
+ assert_equal @browser.bot_name, "Generic Bot"
924
+ end
925
+
926
+ it "returns nil for non-bots" do
927
+ @browser.ua = $ua["CHROME"]
928
+ assert_equal @browser.bot_name, nil
929
+ end
930
+
903
931
  it "detects chrome os" do
904
932
  @browser.ua = $ua["CHROME_OS"]
905
933
  assert @browser.chrome_os?
@@ -923,4 +951,24 @@ describe Browser do
923
951
  assert @browser.search_engine?, "#{$ua[key]} should be a search engine"
924
952
  end
925
953
  end
954
+
955
+ it "knows a supported browser" do
956
+ @browser.ua = "Chrome"
957
+ assert @browser.known?
958
+ end
959
+
960
+ it "does not know an unsupported browser" do
961
+ @browser.ua = "Fancy new browser"
962
+ refute @browser.known?
963
+ end
964
+
965
+ it "detects adobe air" do
966
+ @browser.ua = $ua["ADOBE_AIR"]
967
+
968
+ assert @browser.adobe_air?
969
+ assert @browser.webkit?
970
+ assert_equal @browser.version, "13"
971
+ assert_equal @browser.full_version, "13.0"
972
+ assert_equal @browser.name, "Other"
973
+ end
926
974
  end
@@ -1,3 +1,4 @@
1
+ ADOBE_AIR: 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de) AppleWebKit/533.19.4 (KHTML, like Gecko) AdobeAIR/13.0'
1
2
  ANDROID: 'Android SDK 1.5r3: Mozilla/5.0 (Linux; U; Android 1.5; de-; sdk Build/CUPCAKE) AppleWebkit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1'
2
3
  ANDROID_WITH_SAFARI: 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-I535 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
3
4
  ASK: 'Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-14 00:00:00.000000000 Z
11
+ date: 2014-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -90,6 +90,7 @@ files:
90
90
  - ".gitignore"
91
91
  - ".hound.yml"
92
92
  - ".travis.yml"
93
+ - CONTRIBUTING.md
93
94
  - Gemfile
94
95
  - README.md
95
96
  - Rakefile