browser 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1376f80279d81e3c05481520af650c371bf08fb4
4
- data.tar.gz: 0e395d31bdfe73b696b4b6a414946d93efca202d
3
+ metadata.gz: d33f512a1af14cd694c0268b45aa9b197f5011fd
4
+ data.tar.gz: 73de6e2670165e5b7de2b1966ad67a7863afe55a
5
5
  SHA512:
6
- metadata.gz: 128e49d7d296d6bdd2fa6ab3ea250637dd3b570d4feb9585c8632b6a41c71e8e411e179d24354e228b5584842dbd685a4a9a75510f05831e2bbf6ca773c376d6
7
- data.tar.gz: ce47534aba74621bc089c9d30f6aaf7611cf996ed4cfef04570eb2582c84e3e99bd7b0129dae9a928fe01f704227392f3a482c1bff27dcfa17b9fe09bf5fd19d
6
+ metadata.gz: 69b2e09e88e616b7942e63285d704459002d39264f604ae46397ac8b198c5fcd2fe18663730076709b406b55986b13d7e041913bc584c0e5f132db59df3abf6a
7
+ data.tar.gz: 45c8ae00d05cc760f415e56a68ab7689a1f3d62f292f72ad5316f931769c56bca9b6a8ec10b09dec68cfe17c8b9bbcb31a364e11fd216ba3a01817ed6df9085a
data/.gitignore CHANGED
@@ -2,3 +2,4 @@ pkg
2
2
  coverage
3
3
  doc
4
4
  log
5
+ *.lock
data/.travis.yml CHANGED
@@ -2,7 +2,7 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
- - jruby-19mode
5
+ - 2.1.0
6
6
  gemfile:
7
7
  - Gemfile
8
8
  - gemfiles/rails3.gemfile
data/README.md CHANGED
@@ -23,6 +23,7 @@ browser.version
23
23
  browser.safari?
24
24
  browser.opera?
25
25
  browser.chrome?
26
+ browser.chrome_os?
26
27
  browser.mobile?
27
28
  browser.tablet?
28
29
  browser.console?
@@ -33,6 +34,7 @@ browser.modern? # Webkit, Firefox 17+, IE 9+ and Opera 12+
33
34
  browser.platform # return :mac, :windows, :linux or :other
34
35
  browser.mac?
35
36
  browser.windows?
37
+ browser.windows_x64?
36
38
  browser.linux?
37
39
  browser.blackberry?
38
40
  browser.bot?
data/bots.yml ADDED
@@ -0,0 +1,128 @@
1
+ AdsBot-Google: "Google Adwords"
2
+ AhrefsBot: "Ahrefs backlinks research tool"
3
+ alexa: "Alexa Crawler"
4
+ Apache-HttpClient: "Java http library"
5
+ ApacheBench: "ApacheBench (ab)"
6
+ AppEngine-Google: "Google App Engine"
7
+ AsyncHttpClient: "Java http and WebSocket client library"
8
+ awe.sm: "Awe.sm URL expander"
9
+ Baidu: "Chinese search engine"
10
+ Baiduspider: "Chinese search engine"
11
+ bingbot: "Microsoft bing bot"
12
+ bitlybot: "bit.ly bot"
13
+ bot@linkfluence.net: "Linkfluence bot"
14
+ Butterfly: "Topsy Labs"
15
+ buzztalk: "buzztalk"
16
+ check_http: "Nagios monitor"
17
+ CMRadar/0.1: "CMRadar/0.1"
18
+ ColdFusion: "ColdFusion http library"
19
+ Crowsnest: "crowsnest.tv news portal bot"
20
+ Crowsnest: "Crowsnest"
21
+ curl: "curl unix CLI http client"
22
+ developers.google.com/+/web/snippet/: "Google Plus"
23
+ DigitalPersona Fingerprint Software: "HP Fingerprint scanner"
24
+ Embedly: "Embedly"
25
+ EOAAgent: "EOAAgent"
26
+ EventMachine HttpClient: "Ruby http library"
27
+ EvriNid: "Evri bot"
28
+ ExaleadCloudView: "ExaleadCloudView"
29
+ facebookexternalhit: "facebook bot"
30
+ FeedBurner: "RSS bot"
31
+ Feedfetcher-Google: "Google Feedfetcher"
32
+ FlipboardProxy: "FlipboardProxy"
33
+ Genieo: "Genieo Web filter bot"
34
+ getprismatic.com: "getprismatic.com"
35
+ Gigabot: "Gigabot spider"
36
+ Go http package: "Go http library"
37
+ Google Web Preview: "Google Instant Previews crawler"
38
+ Googlebot: "Google spider"
39
+ Hatena::Bookmark: "Hatena::Bookmark"
40
+ heritrix: "heritrix"
41
+ HTMLParser: "HTMLParser"
42
+ HTTP_Request2: "HTTP_Request2"
43
+ HTTPClient: "HTTPClient"
44
+ https://developers.google.com/+/web/snippet: "Google+ Snippet Fetcher"
45
+ HubSpot Connect: "HubSpot Connect"
46
+ ia_archiver(OS-Wayback): "ia_archiver(OS-Wayback)"
47
+ iCoreService: "iCoreService"
48
+ InAGist: "URL resolver"
49
+ Insieve Bot: "Insieve Bot"
50
+ InsieveBot: "InsieveBot"
51
+ Instapaper: "Instapaper"
52
+ jack: "jack"
53
+ Jakarta Commons: "Jakarta Commons HttpClient"
54
+ Jakarta Commons-HttpClient: "Jakarta Commons-HttpClient"
55
+ Java: "Generic Java http library"
56
+ Jetslide: "Jetslide"
57
+ JS-Kit: "URL resolver"
58
+ Kimengi: "nineconnections.com bot"
59
+ Kimengi/nineconnections.com: "Kimengi/nineconnections.com"
60
+ knows.is: "knows.is"
61
+ kraken: "kraken"
62
+ Laconica: "Laconica"
63
+ libwww-perl: "Perl client-server library loved by script kids"
64
+ LinkedInBot: "LinkedIn"
65
+ LinksCrawler: "LinksCrawler"
66
+ Lipperhey: "Lipperhey"
67
+ LongURL: "URL expander service"
68
+ Lumibot: "Lumibot"
69
+ lwp-trivial: "Another Perl library loved by script kids"
70
+ Mediapartners-Google: "Google Adsense bot"
71
+ MetaURI: "URI meta information extractor bot"
72
+ MetaURI: "MetaURI"
73
+ MFE_expand: "Mcafee spider"
74
+ MJ12bot: "Majestic-12 spider"
75
+ msnbot: "Microsoft bot"
76
+ Netvibes: "Personalized dashboard bot"
77
+ NewRelicPinger: "NewRelic monitor"
78
+ newsme: "Link analyzer"
79
+ newsme: "newsme"
80
+ NING: "NING - Yet Another Twitter Swarmer"
81
+ Nutch: "Apache search spider"
82
+ Panopta: "Monitoring service"
83
+ PaperLiBot: "PaperLi content curation service"
84
+ PaperLiBot: "PaperLi is another content curation service"
85
+ peerindex: "peerindex"
86
+ PercolateCrawler: "PercolateCrawler"
87
+ PhantomJS: "PhantomJS"
88
+ Pingdom: "Pingdom monitoring"
89
+ PycURL: "Python http library"
90
+ Python-httplib2: "Python-httplib2"
91
+ python-requests: "Python http library"
92
+ python-requests: "python-requests"
93
+ Python-urllib: "Python http library"
94
+ QuickLook: "QuickLook"
95
+ Readability: "Readability"
96
+ RebelMouse: "RebelMouse"
97
+ redditbot: "Reddit Bot"
98
+ rogerbot: "SeoMoz spider"
99
+ Ruby: "Ruby"
100
+ Ruby/1.9.3: "Ruby/1.9.3"
101
+ SemrushBot: "SEO analysis bot"
102
+ ShortLinkTranslate: "Link shortener"
103
+ ShowyouBot: "Showyou iOS app spider"
104
+ Siege: "Joe Dog Siege"
105
+ SiteUptime: "Site monitoring services"
106
+ Slurp: "Yahoo spider"
107
+ Sogou: "Chinese search engine"
108
+ spider: "generic web spider"
109
+ Test Certificate Info: "C http library?"
110
+ TweetmemeBot: "TweetMeMe Crawler"
111
+ Twikle: "Social web search bot"
112
+ TwitJobSearch: "TwitJobSearch"
113
+ Twitmunin: "Twitmunin"
114
+ Twitterbot: "Twitter URL expander"
115
+ Twurly: "Twurly"
116
+ Typhoeus: "Typhoeus"
117
+ UnwindFetch: "Gnip URL expander"
118
+ UnwindFetchor: "Gnip crawler"
119
+ VB Project: "Visual Basic"
120
+ vkShare: "VKontake Sharer"
121
+ Webscout: "Webscout"
122
+ Wget: "wget unix CLI http client"
123
+ WordPress: "WordPress spider"
124
+ YandexBot: "Yandex spider"
125
+ YOURLS: "YOURLS"
126
+ zelist.ro: "feed parser"
127
+ ZIBB: "ZIBB spider"
128
+ ZyBorg: "Zyborg? Hmmm...."
data/browser.gemspec CHANGED
@@ -17,7 +17,10 @@ Gem::Specification.new do |s|
17
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  s.require_paths = ["lib"]
19
19
 
20
- s.add_development_dependency "pry-meta"
20
+ s.add_development_dependency "bundler", ">= 0"
21
+ s.add_development_dependency "rake"
21
22
  s.add_development_dependency "rails"
22
23
  s.add_development_dependency "rack-test"
24
+ s.add_development_dependency "pry-meta"
25
+ s.add_development_dependency "turn"
23
26
  end
data/lib/browser.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "set"
2
+ require "yaml"
2
3
 
3
4
  require "browser/middleware"
4
5
  require "browser/middleware/context"
@@ -11,6 +12,7 @@ require "browser/methods/devices"
11
12
  require "browser/methods/consoles"
12
13
  require "browser/methods/language"
13
14
  require "browser/methods/bots"
15
+ require "browser/methods/tv"
14
16
 
15
17
  require "browser/meta/base"
16
18
  require "browser/meta/generic_browser"
@@ -31,6 +33,7 @@ class Browser
31
33
  include Consoles
32
34
  include Language
33
35
  include Bots
36
+ include Tv
34
37
 
35
38
  # Set browser's UA string.
36
39
  attr_accessor :user_agent
@@ -54,7 +57,7 @@ class Browser
54
57
  :playstation => "PlayStation",
55
58
  :quicktime => "QuickTime",
56
59
  :safari => "Safari",
57
- :xbox => "Xbox",
60
+ :xbox => "Xbox",
58
61
 
59
62
  # This must be last item, since Ruby 1.9+ has ordered keys.
60
63
  :other => "Other",
@@ -1,71 +1,6 @@
1
1
  class Browser
2
2
  module Bots
3
- # This initial list of bots was humbly borrowed from the split (https://github.com/andrew/split)
4
- # gem.
5
- BOTS = {
6
- # Indexers
7
- "AdsBot-Google" => "Google Adwords",
8
- "Baidu" => "Chinese search engine",
9
- "Baiduspider" => "Chinese search engine",
10
- "bingbot" => "Microsoft bing bot",
11
- "Butterfly" => "Topsy Labs",
12
- "Gigabot" => "Gigabot spider",
13
- "Googlebot" => "Google spider",
14
- "MJ12bot" => "Majestic-12 spider",
15
- "msnbot" => "Microsoft bot",
16
- "rogerbot" => "SeoMoz spider",
17
- "PaperLiBot" => "PaperLi is another content curation service",
18
- "Slurp" => "Yahoo spider",
19
- "Sogou" => "Chinese search engine",
20
- "spider" => "generic web spider",
21
- "UnwindFetchor" => "Gnip crawler",
22
- "WordPress" => "WordPress spider",
23
- "YandexBot" => "Yandex spider",
24
- "ZIBB" => "ZIBB spider",
25
-
26
- # HTTP libraries
27
- "Apache-HttpClient" => "Java http library",
28
- "AppEngine-Google" => "Google App Engine",
29
- "curl" => "curl unix CLI http client",
30
- "ColdFusion" => "ColdFusion http library",
31
- "EventMachine HttpClient" => "Ruby http library",
32
- "Go http package" => "Go http library",
33
- "Java" => "Generic Java http library",
34
- "libwww-perl" => "Perl client-server library loved by script kids",
35
- "lwp-trivial" => "Another Perl library loved by script kids",
36
- "Python-urllib" => "Python http library",
37
- "PycURL" => "Python http library",
38
- "Test Certificate Info" => "C http library?",
39
- "Wget" => "wget unix CLI http client",
40
-
41
- # URL expanders / previewers
42
- "awe.sm" => "Awe.sm URL expander",
43
- "bitlybot" => "bit.ly bot",
44
- "bot@linkfluence.net" => "Linkfluence bot",
45
- "facebookexternalhit" => "facebook bot",
46
- "Feedfetcher-Google" => "Google Feedfetcher",
47
- "https://developers.google.com/+/web/snippet" => "Google+ Snippet Fetcher",
48
- "LongURL" => "URL expander service",
49
- "NING" => "NING - Yet Another Twitter Swarmer",
50
- "redditbot" => "Reddit Bot",
51
- "ShortLinkTranslate" => "Link shortener",
52
- "TweetmemeBot" => "TweetMeMe Crawler",
53
- "Twitterbot" => "Twitter URL expander",
54
- "UnwindFetch" => "Gnip URL expander",
55
- "vkShare" => "VKontake Sharer",
56
-
57
- # Uptime monitoring
58
- "check_http" => "Nagios monitor",
59
- "NewRelicPinger" => "NewRelic monitor",
60
- "Panopta" => "Monitoring service",
61
- "Pingdom" => "Pingdom monitoring",
62
- "SiteUptime" => "Site monitoring services",
63
-
64
- # ???
65
- "DigitalPersona Fingerprint Software" => "HP Fingerprint scanner",
66
- "ShowyouBot" => "Showyou iOS app spider",
67
- "ZyBorg" => "Zyborg? Hmmm...."
68
- }
3
+ BOTS = YAML.load_file(File.expand_path("../../../../bots.yml", __FILE__))
69
4
 
70
5
  def bot?
71
6
  ua.empty? || BOTS.any? {|key, description| ua.include?(key) }
@@ -19,5 +19,10 @@ class Browser
19
19
  def console?
20
20
  xbox? || playstation? || nintendo?
21
21
  end
22
+
23
+ # Detect if browser is running from PSP.
24
+ def psp?
25
+ !!(ua =~ /(PSP|Playstation Vita)/)
26
+ end
22
27
  end
23
28
  end
@@ -29,14 +29,13 @@ class Browser
29
29
  !!(ua =~ /Kindle/ || silk?)
30
30
  end
31
31
 
32
- # Detect if browser is running from PSP.
33
- def psp?
34
- !!(ua =~ /PSP/)
35
- end
36
-
37
32
  # Detect if browser if a Blackberry Playbook tablet
38
33
  def playbook?
39
34
  !!(ua =~ /PlayBook/ and ua =~ /RIM Tablet/)
40
35
  end
36
+
37
+ def windows_touchscreen_desktop?
38
+ windows? && !!(ua =~ /Touch/)
39
+ end
41
40
  end
42
41
  end
@@ -12,7 +12,7 @@ class Browser
12
12
 
13
13
  # Detect if browser is BlackBerry
14
14
  def blackberry?
15
- !!(ua =~ /BlackBerry/)
15
+ !!(ua =~ /(BlackBerry)/)
16
16
  end
17
17
 
18
18
  private
@@ -10,7 +10,7 @@ class Browser
10
10
  ipod? || ipad? || iphone?
11
11
  end
12
12
 
13
- # Detect if is iOS5.
13
+ # Detect if is iOS4.
14
14
  def ios4?
15
15
  ios? && !!(ua =~ /OS 4/)
16
16
  end
@@ -30,6 +30,31 @@ class Browser
30
30
  ios? && !!(ua =~ /OS 7/)
31
31
  end
32
32
 
33
+ # Detect if is BlackBerry 4.
34
+ def blackberry4?
35
+ blackberry? && !!(ua =~ %r[BlackBerry\d+/4])
36
+ end
37
+
38
+ # Detect if is BlackBerry 5.
39
+ def blackberry5?
40
+ blackberry? && !!(ua =~ %r[BlackBerry\d+/5])
41
+ end
42
+
43
+ # Detect if is BlackBerry 6.
44
+ def blackberry6?
45
+ blackberry? && !!(ua =~ %r[Version/6])
46
+ end
47
+
48
+ # Detect if is BlackBerry 7.
49
+ def blackberry7?
50
+ blackberry? && !!(ua =~ %r[Version/7])
51
+ end
52
+
53
+ # Detect if is BlackBerry 10.
54
+ def blackberry10?
55
+ !!(ua =~ /BB10/)
56
+ end
57
+
33
58
  # Detect if current platform is Macintosh.
34
59
  def mac?
35
60
  !!(ua =~ /Mac OS X/)
@@ -63,12 +88,22 @@ class Browser
63
88
  !!(ua =~ /Windows Phone/)
64
89
  end
65
90
 
91
+ # Detect if current platform is Windows in 64-bit architecture.
92
+ def windows_x64?
93
+ windows? && !!(ua =~ /(Win64|x64)/) && !!(ua =~ /x64/)
94
+ end
95
+
96
+ # Detect if current platform is ChromeOS
97
+ def chrome_os?
98
+ !!(ua =~ /CrOS/)
99
+ end
100
+
66
101
  # Return the platform.
67
102
  def platform
68
103
  case
69
- when linux? then :linux
70
- when mac? then :mac
71
- when windows? then :windows
104
+ when linux? then :linux
105
+ when mac? then :mac
106
+ when windows? then :windows
72
107
  else
73
108
  :other
74
109
  end
@@ -0,0 +1,8 @@
1
+ class Browser
2
+ module Tv
3
+ # Detect if browser is Television
4
+ def tv?
5
+ !!(ua =~ /tv/i)
6
+ end
7
+ end
8
+ end
@@ -1,8 +1,8 @@
1
1
  class Browser
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 3
5
- PATCH = 2
4
+ MINOR = 4
5
+ PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
data/test/browser_test.rb CHANGED
@@ -14,7 +14,9 @@ class BrowserTest < Test::Unit::TestCase
14
14
  IE9_COMPAT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)"
15
15
  IE10 = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMSN)"
16
16
  IE10_COMPAT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; EIE10;ENUSMSN)"
17
+ IE10_X64_WINX64 = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"
17
18
  IE11 = "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko"
19
+ IE11_TOUCH_SCREEN = "Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; rv:11.0) like Gecko"
18
20
  OPERA = "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.4; U; en) Presto/2.10.229 Version/11.64"
19
21
  OPERA_NEXT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.37 Safari/537.36 OPR/15.0.1147.44 (Edition Next)"
20
22
  FIREFOX = "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8"
@@ -22,10 +24,17 @@ class BrowserTest < Test::Unit::TestCase
22
24
  FIREFOX_TABLET = "Mozilla/5.0 (Android; Tablet; rv:14.0) Gecko/14.0 Firefox/14.0"
23
25
  CHROME = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4"
24
26
  MOBILE_CHROME = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3"
27
+ CHROME_OS = "Mozilla/5.0 (X11; CrOS x86_64 3701.81.0) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.57 Safari/537.31."
25
28
  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"
26
29
  TABLOID = "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13"
27
30
  BLACKBERRY = "BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103"
31
+ BLACKBERRY4 = "BlackBerry8100/4.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103"
32
+ BLACKBERRY5 = "BlackBerry9000/5.0.0.93 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/179"
33
+ BLACKBERRY6 = "Mozilla/5.0 (BlackBerry; U; BlackBerry AAAA; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/6.0.0.141 Mobile Safari/534.11+"
34
+ BLACKBERRY7 = "Mozilla/5.0 (BlackBerry; U; BlackBerry AAAA; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.1 Mobile Safari/534.11+"
35
+ BLACKBERRY10 = "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.1675 Mobile Safari/537.10+"
28
36
  PSP = "Mozilla/4.0 (PSP (PlayStation Portable); 2.00)"
37
+ PSP_VITA = "Mozilla/5.0 (Playstation Vita 1.61) AppleWebKit/531.22.8 (KHTML, like Gecko) Silk/3.2"
29
38
  QUICKTIME = "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
30
39
  COREMEDIA = "Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569"
31
40
  XOOM = "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13"
@@ -59,6 +68,7 @@ class BrowserTest < Test::Unit::TestCase
59
68
  GOOGLE_BOT = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
60
69
  MSN_BOT = "msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)"
61
70
  FACEBOOK_BOT = "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
71
+ SMART_TV = "Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV) AppleWebKit/531.2+ (KHTML, like Gecko) WebBrowser/1.0 SmartTV Safari/531.2+"
62
72
 
63
73
  def setup
64
74
  @browser = Browser.new
@@ -418,6 +428,66 @@ class BrowserTest < Test::Unit::TestCase
418
428
  assert_equal "4", @browser.version
419
429
  end
420
430
 
431
+ def test_detect_blackberry4
432
+ @browser.ua = BLACKBERRY4
433
+
434
+ assert_equal "BlackBerry", @browser.name
435
+ assert @browser.blackberry4?
436
+ assert ! @browser.tablet?
437
+ assert @browser.mobile?
438
+ assert ! @browser.modern?
439
+ assert_equal "4.2.1", @browser.full_version
440
+ assert_equal "4", @browser.version
441
+ end
442
+
443
+ def test_detect_blackberry5
444
+ @browser.ua = BLACKBERRY5
445
+
446
+ assert_equal "BlackBerry", @browser.name
447
+ assert @browser.blackberry5?
448
+ assert ! @browser.tablet?
449
+ assert @browser.mobile?
450
+ assert ! @browser.modern?
451
+ assert_equal "5.0.0.93", @browser.full_version
452
+ assert_equal "5", @browser.version
453
+ end
454
+
455
+ def test_detect_blackberry6
456
+ @browser.ua = BLACKBERRY6
457
+
458
+ assert_equal "BlackBerry", @browser.name
459
+ assert @browser.blackberry6?
460
+ assert ! @browser.tablet?
461
+ assert @browser.mobile?
462
+ assert @browser.modern?
463
+ assert_equal "534.11", @browser.full_version
464
+ assert_equal "534", @browser.version
465
+ end
466
+
467
+ def test_detect_blackberry7
468
+ @browser.ua = BLACKBERRY7
469
+
470
+ assert_equal "BlackBerry", @browser.name
471
+ assert @browser.blackberry7?
472
+ assert ! @browser.tablet?
473
+ assert @browser.mobile?
474
+ assert @browser.modern?
475
+ assert_equal "534.11", @browser.full_version
476
+ assert_equal "534", @browser.version
477
+ end
478
+
479
+ def test_detect_blackberry10
480
+ @browser.ua = BLACKBERRY10
481
+
482
+ assert_equal "Safari", @browser.name
483
+ assert @browser.blackberry10?
484
+ assert ! @browser.tablet?
485
+ assert @browser.mobile?
486
+ assert @browser.modern?
487
+ assert_equal "10.0.9.1675", @browser.full_version
488
+ assert_equal "10", @browser.version
489
+ end
490
+
421
491
  def test_detect_quicktime
422
492
  @browser.ua = QUICKTIME
423
493
 
@@ -456,6 +526,14 @@ class BrowserTest < Test::Unit::TestCase
456
526
  assert @browser.mobile?
457
527
  end
458
528
 
529
+ def test_detect_psp_vita
530
+ @browser.ua = PSP_VITA
531
+
532
+ assert_equal "PlayStation Portable", @browser.name
533
+ assert @browser.psp?
534
+ assert @browser.mobile?
535
+ end
536
+
459
537
  def test_detect_other_mobiles
460
538
  @browser.ua = "Symbian OS"
461
539
  assert @browser.mobile?
@@ -683,6 +761,26 @@ class BrowserTest < Test::Unit::TestCase
683
761
  assert ! @browser.tablet?
684
762
  end
685
763
 
764
+ def test_windows_x64
765
+ @browser.ua = IE10_X64_WINX64
766
+ assert @browser.windows_x64?
767
+ end
768
+
769
+ def test_detect_ie11_touch_desktop_pc
770
+ @browser.ua = IE11_TOUCH_SCREEN
771
+
772
+ assert_equal "Internet Explorer", @browser.name
773
+ assert @browser.ie?
774
+ assert @browser.ie11?
775
+ assert @browser.modern?
776
+ assert ! @browser.compatibility_view?
777
+ assert ! @browser.windows_rt?
778
+ assert @browser.windows_touchscreen_desktop?
779
+ assert @browser.windows8?
780
+ assert_equal "11.0", @browser.full_version
781
+ assert_equal "11", @browser.version
782
+ end
783
+
686
784
  def test_kindle_monochrome
687
785
  @browser.ua = KINDLE
688
786
 
@@ -800,4 +898,14 @@ class BrowserTest < Test::Unit::TestCase
800
898
  @browser.ua = CHROME
801
899
  assert ! @browser.bot?
802
900
  end
901
+
902
+ def test_chrome_os
903
+ @browser.ua = CHROME_OS
904
+ assert @browser.chrome_os?
905
+ end
906
+
907
+ def test_tv
908
+ @browser.ua = SMART_TV
909
+ assert @browser.tv?
910
+ end
803
911
  end
data/test/test_helper.rb CHANGED
@@ -2,3 +2,8 @@ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
2
2
  require "bundler/setup"
3
3
  require "test/unit"
4
4
  require "browser"
5
+ require "turn"
6
+ require "turn/reporter"
7
+
8
+ Turn.config.format = :dot
9
+ $RUBY_IGNORE_CALLERS += [%r[/gems/], %r[minitest/unit.rb]]
metadata CHANGED
@@ -1,55 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.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: 2013-12-07 00:00:00.000000000 Z
11
+ date: 2014-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: pry-meta
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - '>='
31
+ - - ">="
18
32
  - !ruby/object:Gem::Version
19
33
  version: '0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - '>='
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rails
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - '>='
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - '>='
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rack-test
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - '>='
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-meta
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: turn
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
46
88
  - !ruby/object:Gem::Version
47
89
  version: '0'
48
90
  type: :development
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
- - - '>='
94
+ - - ">="
53
95
  - !ruby/object:Gem::Version
54
96
  version: '0'
55
97
  description: Do some browser detection with Ruby.
@@ -59,16 +101,15 @@ executables: []
59
101
  extensions: []
60
102
  extra_rdoc_files: []
61
103
  files:
62
- - .gitignore
63
- - .travis.yml
104
+ - ".gitignore"
105
+ - ".travis.yml"
64
106
  - Gemfile
65
- - Gemfile.lock
66
107
  - README.md
67
108
  - Rakefile
109
+ - bots.yml
68
110
  - browser.gemspec
69
111
  - config.ru
70
112
  - gemfiles/rails3.gemfile
71
- - gemfiles/rails3.gemfile.lock
72
113
  - lib/browser.rb
73
114
  - lib/browser/action_controller.rb
74
115
  - lib/browser/meta/base.rb
@@ -88,6 +129,7 @@ files:
88
129
  - lib/browser/methods/language.rb
89
130
  - lib/browser/methods/mobile.rb
90
131
  - lib/browser/methods/platform.rb
132
+ - lib/browser/methods/tv.rb
91
133
  - lib/browser/middleware.rb
92
134
  - lib/browser/middleware/context.rb
93
135
  - lib/browser/middleware/context/additions.rb
@@ -107,19 +149,18 @@ require_paths:
107
149
  - lib
108
150
  required_ruby_version: !ruby/object:Gem::Requirement
109
151
  requirements:
110
- - - '>='
152
+ - - ">="
111
153
  - !ruby/object:Gem::Version
112
154
  version: '0'
113
155
  required_rubygems_version: !ruby/object:Gem::Requirement
114
156
  requirements:
115
- - - '>='
157
+ - - ">="
116
158
  - !ruby/object:Gem::Version
117
159
  version: '0'
118
160
  requirements: []
119
161
  rubyforge_project:
120
- rubygems_version: 2.0.3
162
+ rubygems_version: 2.2.0
121
163
  signing_key:
122
164
  specification_version: 4
123
165
  summary: Do some browser detection with Ruby.
124
166
  test_files: []
125
- has_rdoc:
data/Gemfile.lock DELETED
@@ -1,106 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- browser (0.3.2)
5
-
6
- GEM
7
- remote: http://rubygems.org/
8
- specs:
9
- actionmailer (4.0.2)
10
- actionpack (= 4.0.2)
11
- mail (~> 2.5.4)
12
- actionpack (4.0.2)
13
- activesupport (= 4.0.2)
14
- builder (~> 3.1.0)
15
- erubis (~> 2.7.0)
16
- rack (~> 1.5.2)
17
- rack-test (~> 0.6.2)
18
- activemodel (4.0.2)
19
- activesupport (= 4.0.2)
20
- builder (~> 3.1.0)
21
- activerecord (4.0.2)
22
- activemodel (= 4.0.2)
23
- activerecord-deprecated_finders (~> 1.0.2)
24
- activesupport (= 4.0.2)
25
- arel (~> 4.0.0)
26
- activerecord-deprecated_finders (1.0.3)
27
- activesupport (4.0.2)
28
- i18n (~> 0.6, >= 0.6.4)
29
- minitest (~> 4.2)
30
- multi_json (~> 1.3)
31
- thread_safe (~> 0.1)
32
- tzinfo (~> 0.3.37)
33
- arel (4.0.1)
34
- atomic (1.1.14)
35
- awesome_print (1.2.0)
36
- builder (3.1.4)
37
- coderay (1.1.0)
38
- erubis (2.7.0)
39
- hike (1.2.3)
40
- i18n (0.6.9)
41
- mail (2.5.4)
42
- mime-types (~> 1.16)
43
- treetop (~> 1.4.8)
44
- method_source (0.8.2)
45
- mime-types (1.25.1)
46
- minitest (4.7.5)
47
- multi_json (1.8.2)
48
- polyglot (0.3.3)
49
- pry (0.9.12.4)
50
- coderay (~> 1.0)
51
- method_source (~> 0.8)
52
- slop (~> 3.4)
53
- pry-meta (0.0.5)
54
- awesome_print
55
- pry
56
- pry-nav
57
- pry-remote
58
- pry-nav (0.2.3)
59
- pry (~> 0.9.10)
60
- pry-remote (0.1.7)
61
- pry (~> 0.9)
62
- slop (~> 3.0)
63
- rack (1.5.2)
64
- rack-test (0.6.2)
65
- rack (>= 1.0)
66
- rails (4.0.2)
67
- actionmailer (= 4.0.2)
68
- actionpack (= 4.0.2)
69
- activerecord (= 4.0.2)
70
- activesupport (= 4.0.2)
71
- bundler (>= 1.3.0, < 2.0)
72
- railties (= 4.0.2)
73
- sprockets-rails (~> 2.0.0)
74
- railties (4.0.2)
75
- actionpack (= 4.0.2)
76
- activesupport (= 4.0.2)
77
- rake (>= 0.8.7)
78
- thor (>= 0.18.1, < 2.0)
79
- rake (10.1.0)
80
- slop (3.4.7)
81
- sprockets (2.10.1)
82
- hike (~> 1.2)
83
- multi_json (~> 1.0)
84
- rack (~> 1.0)
85
- tilt (~> 1.1, != 1.3.0)
86
- sprockets-rails (2.0.1)
87
- actionpack (>= 3.0)
88
- activesupport (>= 3.0)
89
- sprockets (~> 2.8)
90
- thor (0.18.1)
91
- thread_safe (0.1.3)
92
- atomic
93
- tilt (1.4.1)
94
- treetop (1.4.15)
95
- polyglot
96
- polyglot (>= 0.3.1)
97
- tzinfo (0.3.38)
98
-
99
- PLATFORMS
100
- ruby
101
-
102
- DEPENDENCIES
103
- browser!
104
- pry-meta
105
- rack-test
106
- rails
@@ -1,111 +0,0 @@
1
- PATH
2
- remote: ..
3
- specs:
4
- browser (0.3.2)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- actionmailer (3.2.14)
10
- actionpack (= 3.2.14)
11
- mail (~> 2.5.4)
12
- actionpack (3.2.14)
13
- activemodel (= 3.2.14)
14
- activesupport (= 3.2.14)
15
- builder (~> 3.0.0)
16
- erubis (~> 2.7.0)
17
- journey (~> 1.0.4)
18
- rack (~> 1.4.5)
19
- rack-cache (~> 1.2)
20
- rack-test (~> 0.6.1)
21
- sprockets (~> 2.2.1)
22
- activemodel (3.2.14)
23
- activesupport (= 3.2.14)
24
- builder (~> 3.0.0)
25
- activerecord (3.2.14)
26
- activemodel (= 3.2.14)
27
- activesupport (= 3.2.14)
28
- arel (~> 3.0.2)
29
- tzinfo (~> 0.3.29)
30
- activeresource (3.2.14)
31
- activemodel (= 3.2.14)
32
- activesupport (= 3.2.14)
33
- activesupport (3.2.14)
34
- i18n (~> 0.6, >= 0.6.4)
35
- multi_json (~> 1.0)
36
- arel (3.0.2)
37
- awesome_print (1.1.0)
38
- builder (3.0.4)
39
- coderay (1.0.9)
40
- erubis (2.7.0)
41
- hike (1.2.3)
42
- i18n (0.6.5)
43
- journey (1.0.4)
44
- json (1.8.0)
45
- mail (2.5.4)
46
- mime-types (~> 1.16)
47
- treetop (~> 1.4.8)
48
- method_source (0.8.2)
49
- mime-types (1.25)
50
- multi_json (1.8.0)
51
- polyglot (0.3.3)
52
- pry (0.9.12.2)
53
- coderay (~> 1.0.5)
54
- method_source (~> 0.8)
55
- slop (~> 3.4)
56
- pry-meta (0.0.5)
57
- awesome_print
58
- pry
59
- pry-nav
60
- pry-remote
61
- pry-nav (0.2.3)
62
- pry (~> 0.9.10)
63
- pry-remote (0.1.7)
64
- pry (~> 0.9)
65
- slop (~> 3.0)
66
- rack (1.4.5)
67
- rack-cache (1.2)
68
- rack (>= 0.4)
69
- rack-ssl (1.3.3)
70
- rack
71
- rack-test (0.6.2)
72
- rack (>= 1.0)
73
- rails (3.2.14)
74
- actionmailer (= 3.2.14)
75
- actionpack (= 3.2.14)
76
- activerecord (= 3.2.14)
77
- activeresource (= 3.2.14)
78
- activesupport (= 3.2.14)
79
- bundler (~> 1.0)
80
- railties (= 3.2.14)
81
- railties (3.2.14)
82
- actionpack (= 3.2.14)
83
- activesupport (= 3.2.14)
84
- rack-ssl (~> 1.3.2)
85
- rake (>= 0.8.7)
86
- rdoc (~> 3.4)
87
- thor (>= 0.14.6, < 2.0)
88
- rake (10.1.0)
89
- rdoc (3.12.2)
90
- json (~> 1.4)
91
- slop (3.4.6)
92
- sprockets (2.2.2)
93
- hike (~> 1.2)
94
- multi_json (~> 1.0)
95
- rack (~> 1.0)
96
- tilt (~> 1.1, != 1.3.0)
97
- thor (0.18.1)
98
- tilt (1.4.1)
99
- treetop (1.4.15)
100
- polyglot
101
- polyglot (>= 0.3.1)
102
- tzinfo (0.3.37)
103
-
104
- PLATFORMS
105
- ruby
106
-
107
- DEPENDENCIES
108
- browser!
109
- pry-meta
110
- rack-test
111
- rails (~> 3.2.13)