browser 0.3.2 → 0.4.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: 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)