browser2 1.0.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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.hound.yml +90 -0
  4. data/.rubocop.yml +90 -0
  5. data/.travis.yml +14 -0
  6. data/CONTRIBUTING.md +44 -0
  7. data/Gemfile +2 -0
  8. data/LICENSE +20 -0
  9. data/README.md +125 -0
  10. data/Rakefile +33 -0
  11. data/browser2.gemspec +42 -0
  12. data/config.ru +2 -0
  13. data/data/bots.json +176 -0
  14. data/data/languages.json +115 -0
  15. data/gemfiles/rails3.gemfile +4 -0
  16. data/lib/browser/action_controller.rb +20 -0
  17. data/lib/browser/data/bots.rb +5 -0
  18. data/lib/browser/data/languages.rb +5 -0
  19. data/lib/browser/data/search_engines.rb +14 -0
  20. data/lib/browser/meta/base.rb +20 -0
  21. data/lib/browser/meta/generic_browser.rb +15 -0
  22. data/lib/browser/meta/id.rb +9 -0
  23. data/lib/browser/meta/ie.rb +18 -0
  24. data/lib/browser/meta/ios.rb +9 -0
  25. data/lib/browser/meta/mobile.rb +9 -0
  26. data/lib/browser/meta/modern.rb +9 -0
  27. data/lib/browser/meta/platform.rb +9 -0
  28. data/lib/browser/meta/safari.rb +9 -0
  29. data/lib/browser/meta/webkit.rb +9 -0
  30. data/lib/browser/methods/blackberry.rb +51 -0
  31. data/lib/browser/methods/bots.rb +37 -0
  32. data/lib/browser/methods/consoles.rb +43 -0
  33. data/lib/browser/methods/devices.rb +41 -0
  34. data/lib/browser/methods/ie.rb +104 -0
  35. data/lib/browser/methods/language.rb +16 -0
  36. data/lib/browser/methods/mobile.rb +30 -0
  37. data/lib/browser/methods/platform.rb +142 -0
  38. data/lib/browser/methods/tv.rb +8 -0
  39. data/lib/browser/middleware/context/additions.rb +16 -0
  40. data/lib/browser/middleware/context/url_methods.rb +13 -0
  41. data/lib/browser/middleware/context.rb +20 -0
  42. data/lib/browser/middleware.rb +66 -0
  43. data/lib/browser/rails.rb +14 -0
  44. data/lib/browser/version.rb +8 -0
  45. data/lib/browser.rb +255 -0
  46. data/test/benchmark_test.rb +83 -0
  47. data/test/browser_test.rb +248 -0
  48. data/test/middleware_test.rb +50 -0
  49. data/test/sample_app.rb +31 -0
  50. data/test/test_helper.rb +20 -0
  51. data/test/ua.yml +122 -0
  52. data/test/unit/adobe_air_test.rb +13 -0
  53. data/test/unit/android_test.rb +93 -0
  54. data/test/unit/blackberry_test.rb +104 -0
  55. data/test/unit/bots_test.rb +116 -0
  56. data/test/unit/chrome_test.rb +56 -0
  57. data/test/unit/console_test.rb +67 -0
  58. data/test/unit/firefox_test.rb +37 -0
  59. data/test/unit/ie_test.rb +377 -0
  60. data/test/unit/ios_test.rb +139 -0
  61. data/test/unit/kindle_test.rb +37 -0
  62. data/test/unit/opera_test.rb +42 -0
  63. data/test/unit/windows_phone_test.rb +50 -0
  64. data/test/unit/windows_test.rb +60 -0
  65. metadata +240 -0
@@ -0,0 +1,104 @@
1
+ require "test_helper"
2
+
3
+ class BlackberryTest < Minitest::Test
4
+ test "detects blackberry" do
5
+ @browser = Browser.new ua: $ua["BLACKBERRY"]
6
+
7
+ assert_equal "BlackBerry", @browser.name
8
+ assert @browser.blackberry?
9
+ refute @browser.tablet?
10
+ assert @browser.mobile?
11
+ refute @browser.modern?
12
+ assert_equal "4.1.0", @browser.full_version
13
+ assert_equal "4", @browser.version
14
+ end
15
+
16
+ test "detects blackberry4" do
17
+ @browser = Browser.new ua: $ua["BLACKBERRY4"]
18
+
19
+ assert_equal "BlackBerry", @browser.name
20
+ assert_equal "4", @browser.blackberry_version
21
+ assert @browser.blackberry?(4)
22
+ refute @browser.tablet?
23
+ assert @browser.mobile?
24
+ refute @browser.modern?
25
+ assert_equal "4.2.1", @browser.full_version
26
+ assert_equal "4", @browser.version
27
+ end
28
+
29
+ test "detects blackberry5" do
30
+ @browser = Browser.new ua: $ua["BLACKBERRY5"]
31
+
32
+ assert_equal "BlackBerry", @browser.name
33
+ assert @browser.blackberry?(5)
34
+ assert_equal "5", @browser.blackberry_version
35
+ refute @browser.tablet?
36
+ assert @browser.mobile?
37
+ refute @browser.modern?
38
+ assert_equal "5.0.0.93", @browser.full_version
39
+ assert_equal "5", @browser.version
40
+ end
41
+
42
+ test "detects blackberry6" do
43
+ @browser = Browser.new ua: $ua["BLACKBERRY6"]
44
+
45
+ assert_equal "Safari", @browser.name
46
+ assert @browser.blackberry?(6)
47
+ assert_equal "6", @browser.blackberry_version
48
+ refute @browser.tablet?
49
+ assert @browser.mobile?
50
+ assert @browser.modern?
51
+ assert_equal "534.11", @browser.full_version
52
+ assert_equal "534", @browser.version
53
+ end
54
+
55
+ test "detects blackberry7" do
56
+ @browser = Browser.new ua: $ua["BLACKBERRY7"]
57
+
58
+ assert_equal "Safari", @browser.name
59
+ assert @browser.blackberry?(7)
60
+ assert_equal "7", @browser.blackberry_version
61
+ refute @browser.tablet?
62
+ assert @browser.mobile?
63
+ assert @browser.modern?
64
+ assert_equal "534.11", @browser.full_version
65
+ assert_equal "534", @browser.version
66
+ end
67
+
68
+ test "detects blackberry10" do
69
+ @browser = Browser.new ua: $ua["BLACKBERRY10"]
70
+
71
+ assert_equal "Safari", @browser.name
72
+ assert_equal "10", @browser.blackberry_version
73
+ assert @browser.blackberry?(10)
74
+ refute @browser.tablet?
75
+ assert @browser.mobile?
76
+ assert @browser.modern?
77
+ assert_equal "10.0.9.1675", @browser.full_version
78
+ assert_equal "10", @browser.version
79
+ end
80
+
81
+ test "detects blackberry playbook tablet" do
82
+ @browser = Browser.new ua: $ua["PLAYBOOK"]
83
+
84
+ refute @browser.android?
85
+ assert @browser.tablet?
86
+ refute @browser.mobile?
87
+
88
+ assert_equal "7.2.1.0", @browser.full_version
89
+ assert_equal "7", @browser.version
90
+ end
91
+
92
+ test "warn about deprecated numbered version" do
93
+ @browser = Browser.new ua: $ua["BLACKBERRY10"]
94
+
95
+ message = "Browser#blackberry10? is deprecated; use Browser#blackberry?(version) instead"
96
+ assert_deprecated(message, __FILE__, __LINE__) { @browser.blackberry10? }
97
+ end
98
+
99
+ test "don't detect as two different versions" do
100
+ @browser = Browser.new ua: $ua["BLACKBERRY10"]
101
+ assert @browser.blackberry?(10)
102
+ refute @browser.blackberry?(7)
103
+ end
104
+ end
@@ -0,0 +1,116 @@
1
+ require "test_helper"
2
+
3
+ class BotsTest < Minitest::Test
4
+ test "detects bots" do
5
+ %w[
6
+ APPLE_BOT
7
+ DOMAINAREANIMATOR
8
+ DOT_BOT
9
+ FACEBOOK_BOT
10
+ GOOGLE_BOT
11
+ GRAPESHOT
12
+ LINKDEXBOT
13
+ LOAD_TIME_BOT
14
+ MAIL_RU
15
+ MEGAINDEX_RU
16
+ MSN_BOT
17
+ QUERYSEEKER
18
+ SCRAPY
19
+ TINEYE
20
+ YANDEX_DIRECT
21
+ YANDEX_METRIKA
22
+ ].each do |key|
23
+ @browser = Browser.new ua: $ua[key]
24
+ assert @browser.bot?, "#{$ua[key]} should be a bot"
25
+ end
26
+
27
+ @browser = Browser.new ua: $ua["CHROME"]
28
+ refute @browser.bot?
29
+ end
30
+
31
+ test "detects Google Page Speed as a bot" do
32
+ @browser = Browser.new ua: $ua["GOOGLE_PAGE_SPEED_INSIGHTS"]
33
+ assert @browser.bot?
34
+ end
35
+
36
+ test "doesn't consider empty UA as bot" do
37
+ @browser = Browser.new ua: ""
38
+
39
+ refute @browser.bot?
40
+ end
41
+
42
+ test "allows setting empty string as bots" do
43
+ Browser::Bots.detect_empty_ua!
44
+ @browser = Browser.new ua: ""
45
+
46
+ assert @browser.bot?
47
+ end
48
+
49
+ test "doesn't detect mozilla as a bot when considering empty UA" do
50
+ Browser::Bots.detect_empty_ua!
51
+ @browser = Browser.new ua: "Mozilla"
52
+
53
+ refute @browser.bot?
54
+ end
55
+
56
+ test "returns bot name" do
57
+ @browser = Browser.new ua: $ua["GOOGLE_BOT"]
58
+ assert_equal @browser.bot_name, "Googlebot"
59
+
60
+ @browser = Browser.new ua: $ua["FACEBOOK_BOT"]
61
+ assert_equal @browser.bot_name, "facebookexternalhit"
62
+ end
63
+
64
+ test "returns bot name (empty string ua detection enabled)" do
65
+ Browser::Bots.detect_empty_ua!
66
+ @browser = Browser.new ua: ""
67
+
68
+ assert_equal @browser.bot_name, "Generic Bot"
69
+ end
70
+
71
+ test "returns nil for non-bots" do
72
+ @browser = Browser.new ua: $ua["CHROME"]
73
+ assert_equal @browser.bot_name, nil
74
+ end
75
+
76
+ test "detects as search engines" do
77
+ %w[
78
+ ASK
79
+ BAIDU
80
+ BINGBOT
81
+ DUCKDUCKGO
82
+ GOOGLE_BOT
83
+ YAHOO_SLURP
84
+ ].each do |key|
85
+ @browser = Browser.new ua: $ua[key]
86
+ assert @browser.search_engine?, "#{$ua[key]} should be a search engine"
87
+ end
88
+ end
89
+
90
+ test "detects Google Structured Data Testing Tool as a bot" do
91
+ @browser = Browser.new ua: $ua["GOOGLE_STRUCTURED_DATA_TESTING_TOOL"]
92
+
93
+ assert @browser.bot?, "Google Structured Data Testing Tool should be a bot"
94
+ end
95
+
96
+ test "detects Daumoa" do
97
+ @browser = Browser.new ua: $ua["DAUMOA"]
98
+
99
+ assert_equal :ie, @browser.id
100
+ assert_equal "Internet Explorer", @browser.name
101
+ assert_equal "0.0", @browser.msie_full_version
102
+ assert_equal "0", @browser.msie_version
103
+ assert_equal "0.0", @browser.full_version
104
+ assert_equal "0", @browser.version
105
+ assert @browser.ie?
106
+ assert @browser.bot?
107
+ refute @browser.windows10?
108
+ refute @browser.windows_phone?
109
+ refute @browser.edge?
110
+ refute @browser.modern?
111
+ refute @browser.mobile?
112
+ refute @browser.webkit?
113
+ refute @browser.chrome?
114
+ refute @browser.safari?
115
+ end
116
+ end
@@ -0,0 +1,56 @@
1
+ require "test_helper"
2
+
3
+ class ChromeTest < Minitest::Test
4
+ test "detects chrome" do
5
+ @browser = Browser.new ua: $ua["CHROME"]
6
+
7
+ assert_equal "Chrome", @browser.name
8
+ assert @browser.chrome?
9
+ refute @browser.safari?
10
+ assert @browser.webkit?
11
+ assert @browser.modern?
12
+ assert_equal "5.0.375.99", @browser.full_version
13
+ assert_equal "5", @browser.version
14
+ end
15
+
16
+ test "detects mobile chrome" do
17
+ @browser = Browser.new ua: $ua["MOBILE_CHROME"]
18
+
19
+ assert_equal "Chrome", @browser.name
20
+ assert @browser.chrome?
21
+ refute @browser.safari?
22
+ assert @browser.webkit?
23
+ assert @browser.modern?
24
+ assert_equal "19.0.1084.60", @browser.full_version
25
+ assert_equal "19", @browser.version
26
+ end
27
+
28
+ test "detects samsung chrome" do
29
+ @browser = Browser.new ua: $ua["SAMSUNG_CHROME"]
30
+
31
+ assert_equal "Chrome", @browser.name
32
+ assert @browser.chrome?
33
+ assert @browser.android?
34
+ refute @browser.safari?
35
+ assert @browser.webkit?
36
+ assert @browser.modern?
37
+ assert_equal "28.0.1500.94", @browser.full_version
38
+ assert_equal "28", @browser.version
39
+ end
40
+
41
+ test "detects chrome os" do
42
+ @browser = Browser.new ua: $ua["CHROME_OS"]
43
+ assert @browser.chrome_os?
44
+ end
45
+
46
+ test "detects yandex browser" do
47
+ @browser = Browser.new ua: $ua["YANDEX_BROWSER"]
48
+
49
+ assert @browser.yandex?
50
+ assert @browser.chrome?
51
+ refute @browser.safari?
52
+ assert @browser.webkit?
53
+ assert_equal "41.0.2272.118", @browser.full_version
54
+ assert_equal "41", @browser.version
55
+ end
56
+ end
@@ -0,0 +1,67 @@
1
+ require "test_helper"
2
+
3
+ class ConsoleTest < Minitest::Test
4
+ test "detects nintendo wii" do
5
+ @browser = Browser.new ua: $ua["NINTENDO_WII"]
6
+
7
+ assert @browser.console?
8
+ assert @browser.nintendo?
9
+ end
10
+
11
+ test "detects nintendo wii u" do
12
+ @browser = Browser.new ua: $ua["NINTENDO_WIIU"]
13
+
14
+ assert @browser.console?
15
+ assert @browser.nintendo?
16
+ end
17
+
18
+ test "detects playstation 3" do
19
+ @browser = Browser.new ua: $ua["PLAYSTATION3"]
20
+
21
+ assert @browser.console?
22
+ assert @browser.playstation?
23
+ refute @browser.playstation4?
24
+ end
25
+
26
+ test "detects playstation 4" do
27
+ @browser = Browser.new ua: $ua["PLAYSTATION4"]
28
+
29
+ assert @browser.console?
30
+ assert @browser.playstation?
31
+ assert @browser.playstation4?
32
+ end
33
+
34
+ test "detects xbox 360" do
35
+ @browser = Browser.new ua: $ua["XBOX360"]
36
+
37
+ assert @browser.console?
38
+ assert @browser.xbox?
39
+ refute @browser.xbox_one?
40
+ end
41
+
42
+ test "detects xbox one" do
43
+ @browser = Browser.new ua: $ua["XBOXONE"]
44
+
45
+ assert @browser.console?
46
+ assert @browser.xbox?
47
+ assert @browser.xbox_one?
48
+ end
49
+
50
+ test "detects psp" do
51
+ @browser = Browser.new ua: $ua["PSP"]
52
+
53
+ assert_equal "PlayStation Portable", @browser.name
54
+ assert @browser.psp?
55
+ refute @browser.psp_vita?
56
+ assert @browser.mobile?
57
+ end
58
+
59
+ test "detects psp vita" do
60
+ @browser = Browser.new ua: $ua["PSP_VITA"]
61
+
62
+ assert_equal "PlayStation Portable", @browser.name
63
+ assert @browser.psp?
64
+ assert @browser.psp_vita?
65
+ assert @browser.mobile?
66
+ end
67
+ end
@@ -0,0 +1,37 @@
1
+ require "test_helper"
2
+
3
+ class FirefoxTest < Minitest::Test
4
+ test "detects firefox" do
5
+ @browser = Browser.new ua: $ua["FIREFOX"]
6
+
7
+ assert_equal "Firefox", @browser.name
8
+ assert @browser.firefox?
9
+ refute @browser.modern?
10
+ assert_equal "3.8", @browser.full_version
11
+ assert_equal "3", @browser.version
12
+ end
13
+
14
+ test "detects modern firefox" do
15
+ @browser = Browser.new ua: $ua["FIREFOX_MODERN"]
16
+
17
+ assert_equal :firefox, @browser.id
18
+ assert_equal "Firefox", @browser.name
19
+ assert @browser.firefox?
20
+ assert @browser.modern?
21
+ assert_equal "17.0", @browser.full_version
22
+ assert_equal "17", @browser.version
23
+ end
24
+
25
+ test "detects firefox android tablet" do
26
+ @browser = Browser.new ua: $ua["FIREFOX_TABLET"]
27
+
28
+ assert_equal :firefox, @browser.id
29
+ assert_equal "Firefox", @browser.name
30
+ assert @browser.firefox?
31
+ assert @browser.modern?
32
+ assert @browser.tablet?
33
+ assert @browser.android?
34
+ assert_equal "14.0", @browser.full_version
35
+ assert_equal "14", @browser.version
36
+ end
37
+ end