device_detector 1.0.2 → 1.0.6

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 (112) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +49 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -6
  5. data/CHANGELOG.md +11 -0
  6. data/README.md +8 -7
  7. data/Rakefile +7 -4
  8. data/device_detector.gemspec +1 -0
  9. data/lib/device_detector/bot.rb +2 -2
  10. data/lib/device_detector/browser.rb +364 -0
  11. data/lib/device_detector/client.rb +11 -2
  12. data/lib/device_detector/device.rb +1168 -22
  13. data/lib/device_detector/memory_cache.rb +5 -5
  14. data/lib/device_detector/metadata_extractor.rb +7 -8
  15. data/lib/device_detector/model_extractor.rb +3 -3
  16. data/lib/device_detector/name_extractor.rb +2 -2
  17. data/lib/device_detector/os.rb +148 -116
  18. data/lib/device_detector/parser.rb +22 -9
  19. data/lib/device_detector/version.rb +1 -1
  20. data/lib/device_detector/version_extractor.rb +10 -2
  21. data/lib/device_detector.rb +73 -40
  22. data/regexes/bots.yml +909 -59
  23. data/regexes/client/browser_engine.yml +14 -2
  24. data/regexes/client/browsers.yml +1356 -241
  25. data/regexes/client/feed_readers.yml +10 -10
  26. data/regexes/client/libraries.yml +75 -1
  27. data/regexes/client/mediaplayers.yml +39 -3
  28. data/regexes/client/mobile_apps.yml +524 -45
  29. data/regexes/client/pim.yml +55 -2
  30. data/regexes/device/cameras.yml +6 -6
  31. data/regexes/device/car_browsers.yml +23 -3
  32. data/regexes/device/consoles.yml +9 -3
  33. data/regexes/device/mobiles.yml +16903 -3199
  34. data/regexes/device/notebooks.yml +114 -0
  35. data/regexes/device/portable_media_player.yml +20 -3
  36. data/regexes/device/shell_tv.yml +117 -0
  37. data/regexes/device/televisions.yml +440 -35
  38. data/regexes/oss.yml +603 -165
  39. data/regexes/vendorfragments.yml +6 -2
  40. data/spec/device_detector/concrete_user_agent_spec.rb +38 -51
  41. data/spec/device_detector/detector_fixtures_spec.rb +36 -37
  42. data/spec/device_detector/device_spec.rb +52 -56
  43. data/spec/device_detector/memory_cache_spec.rb +19 -19
  44. data/spec/device_detector/model_extractor_spec.rb +3 -3
  45. data/spec/device_detector/version_extractor_spec.rb +5 -6
  46. data/spec/device_detector_spec.rb +26 -26
  47. data/spec/fixtures/client/browser.yml +2617 -555
  48. data/spec/fixtures/client/feed_reader.yml +34 -52
  49. data/spec/fixtures/client/library.yml +129 -38
  50. data/spec/fixtures/client/mediaplayer.yml +59 -28
  51. data/spec/fixtures/client/mobile_app.yml +589 -20
  52. data/spec/fixtures/client/pim.yml +92 -19
  53. data/spec/fixtures/detector/bots.yml +1749 -458
  54. data/spec/fixtures/detector/camera.yml +30 -24
  55. data/spec/fixtures/detector/car_browser.yml +199 -3
  56. data/spec/fixtures/detector/console.yml +107 -45
  57. data/spec/fixtures/detector/desktop.yml +3216 -758
  58. data/spec/fixtures/detector/feature_phone.yml +935 -181
  59. data/spec/fixtures/detector/feed_reader.yml +181 -193
  60. data/spec/fixtures/detector/mediaplayer.yml +157 -60
  61. data/spec/fixtures/detector/mobile_apps.yml +914 -136
  62. data/spec/fixtures/detector/peripheral.yml +271 -0
  63. data/spec/fixtures/detector/phablet.yml +5593 -1533
  64. data/spec/fixtures/detector/portable_media_player.yml +398 -32
  65. data/spec/fixtures/detector/smart_display.yml +183 -9
  66. data/spec/fixtures/detector/smart_speaker.yml +60 -0
  67. data/spec/fixtures/detector/smartphone-1.yml +3930 -4239
  68. data/spec/fixtures/detector/smartphone-10.yml +3985 -7366
  69. data/spec/fixtures/detector/smartphone-11.yml +5083 -3784
  70. data/spec/fixtures/detector/smartphone-12.yml +8989 -0
  71. data/spec/fixtures/detector/smartphone-13.yml +9412 -0
  72. data/spec/fixtures/detector/smartphone-14.yml +9477 -0
  73. data/spec/fixtures/detector/smartphone-15.yml +9281 -0
  74. data/spec/fixtures/detector/smartphone-16.yml +9678 -0
  75. data/spec/fixtures/detector/smartphone-17.yml +9965 -0
  76. data/spec/fixtures/detector/smartphone-18.yml +9806 -0
  77. data/spec/fixtures/detector/smartphone-19.yml +9965 -0
  78. data/spec/fixtures/detector/smartphone-2.yml +6670 -4375
  79. data/spec/fixtures/detector/smartphone-20.yml +9710 -0
  80. data/spec/fixtures/detector/smartphone-21.yml +8693 -0
  81. data/spec/fixtures/detector/smartphone-22.yml +10178 -0
  82. data/spec/fixtures/detector/smartphone-23.yml +9453 -0
  83. data/spec/fixtures/detector/smartphone-24.yml +9843 -0
  84. data/spec/fixtures/detector/smartphone-25.yml +9703 -0
  85. data/spec/fixtures/detector/smartphone-26.yml +10007 -0
  86. data/spec/fixtures/detector/smartphone-27.yml +4927 -0
  87. data/spec/fixtures/detector/smartphone-3.yml +4656 -4711
  88. data/spec/fixtures/detector/smartphone-4.yml +3518 -4479
  89. data/spec/fixtures/detector/smartphone-5.yml +3805 -4803
  90. data/spec/fixtures/detector/smartphone-6.yml +3745 -4693
  91. data/spec/fixtures/detector/smartphone-7.yml +3721 -4645
  92. data/spec/fixtures/detector/smartphone-8.yml +4564 -4699
  93. data/spec/fixtures/detector/smartphone-9.yml +3897 -4888
  94. data/spec/fixtures/detector/smartphone.yml +3154 -4141
  95. data/spec/fixtures/detector/tablet-1.yml +4742 -4576
  96. data/spec/fixtures/detector/tablet-2.yml +3803 -4731
  97. data/spec/fixtures/detector/tablet-3.yml +6210 -2309
  98. data/spec/fixtures/detector/tablet-4.yml +9062 -0
  99. data/spec/fixtures/detector/tablet-5.yml +9273 -0
  100. data/spec/fixtures/detector/tablet-6.yml +4588 -0
  101. data/spec/fixtures/detector/tablet.yml +3629 -4613
  102. data/spec/fixtures/detector/tv-1.yml +2501 -0
  103. data/spec/fixtures/detector/tv.yml +8856 -2064
  104. data/spec/fixtures/detector/unknown.yml +412 -587
  105. data/spec/fixtures/detector/wearable.yml +915 -0
  106. data/spec/fixtures/device/camera.yml +4 -3
  107. data/spec/fixtures/device/car_browser.yml +9 -2
  108. data/spec/fixtures/device/console.yml +15 -14
  109. data/spec/fixtures/device/notebook.yml +7 -0
  110. data/spec/fixtures/parser/oss.yml +1392 -21
  111. data/spec/fixtures/parser/vendorfragments.yml +57 -51
  112. metadata +70 -4
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -20,7 +20,7 @@ Sony:
20
20
 
21
21
  Asus:
22
22
  - 'MAAU'
23
- - 'NP0[6789]'
23
+ - 'NP0[26789]'
24
24
  - 'ASJB'
25
25
  - 'ASU2(JS)?'
26
26
 
@@ -69,3 +69,7 @@ HP:
69
69
 
70
70
  Hyrican:
71
71
  - 'MANM(JS)?'
72
+
73
+ Ordissimo:
74
+ - 'Ordissimo'
75
+ - 'webissimo3'
@@ -1,136 +1,123 @@
1
1
  require_relative '../spec_helper'
2
2
 
3
3
  describe DeviceDetector do
4
-
5
4
  subject { DeviceDetector.new(user_agent) }
6
5
 
7
- alias :client :subject
6
+ alias_method :client, :subject
8
7
 
9
8
  describe 'mobile iPhone 5S' do
10
-
11
- let(:user_agent) { 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B440 [FBDV/iPhone6,1]' }
9
+ let(:user_agent) do
10
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B440 [FBDV/iPhone6,1]'
11
+ end
12
12
 
13
13
  describe '#device_name' do
14
-
15
14
  it 'returns device name' do
16
- client.device_name.must_equal 'iPhone 5S'
15
+ value(client.device_name).must_equal 'iPhone 5S'
17
16
  end
18
-
19
17
  end
20
18
 
21
19
  describe '#device_type' do
22
-
23
20
  it 'returns the device type' do
24
- client.device_type.must_equal 'smartphone'
21
+ value(client.device_type).must_equal 'smartphone'
25
22
  end
26
-
27
23
  end
28
-
29
24
  end
30
25
 
31
26
  describe 'Ubuntu 10' do
32
-
33
- let(:user_agent) { 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.133 Chrome/10.0.648.133 Safari/534.16' }
27
+ let(:user_agent) do
28
+ 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.133 Chrome/10.0.648.133 Safari/534.16'
29
+ end
34
30
 
35
31
  describe '#os_name' do
36
-
37
32
  it 'returns the OS name' do
38
- client.os_name.must_equal 'Ubuntu'
33
+ value(client.os_name).must_equal 'Ubuntu'
39
34
  end
40
-
41
35
  end
42
-
43
36
  end
44
37
 
45
38
  describe 'Mac OS X' do
46
-
47
- let(:user_agent) { 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36' }
39
+ let(:user_agent) do
40
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36'
41
+ end
48
42
 
49
43
  describe '#full_version' do
50
-
51
44
  it 'returns the correct OS version' do
52
- client.os_full_version.must_equal '10.10.1'
45
+ value(client.os_full_version).must_equal '10.10.1'
53
46
  end
54
-
55
47
  end
56
-
57
48
  end
58
49
 
59
50
  describe 'Chrome on Windows' do
60
-
61
51
  describe '32bit' do
62
-
63
- let(:user_agent) { 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36' }
52
+ let(:user_agent) do
53
+ 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36'
54
+ end
64
55
 
65
56
  it 'returns the correct client name' do
66
- client.name.must_equal 'Chrome'
57
+ value(client.name).must_equal 'Chrome'
67
58
  end
68
59
 
69
60
  it 'recognizes the device name' do
70
- client.device_name.must_be_nil
61
+ value(client.device_name).must_be_nil
71
62
  end
72
63
 
73
64
  it 'recognizes the device type' do
74
- client.device_type.must_equal "desktop"
65
+ value(client.device_type).must_equal 'desktop'
75
66
  end
76
-
77
67
  end
78
68
 
79
69
  describe '64bit' do
80
-
81
- let(:user_agent) { 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36' }
70
+ let(:user_agent) do
71
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
72
+ end
82
73
 
83
74
  it 'returns the correct client name' do
84
- client.name.must_equal 'Chrome'
75
+ value(client.name).must_equal 'Chrome'
85
76
  end
86
77
 
87
78
  it 'recognizes the device name' do
88
- client.device_name.must_be_nil
79
+ value(client.device_name).must_be_nil
89
80
  end
90
81
 
91
82
  it 'recognizes the device type' do
92
- client.device_type.must_equal "desktop"
83
+ value(client.device_type).must_equal 'desktop'
93
84
  end
94
-
95
85
  end
96
-
97
86
  end
98
87
 
99
88
  describe 'recognize and ignore sprd- prefix' do
100
-
101
- let(:user_agent) { 'sprd-Galaxy-S5/1.0 Linux/2.6.35.7 Android/4.4.4 Release/11.29.2014 Browser/AppleWebKit533.1 (KHTML, like Gecko) Mozilla/5.0 Mobile' }
89
+ let(:user_agent) do
90
+ 'sprd-Galaxy-S5/1.0 Linux/2.6.35.7 Android/4.4.4 Release/11.29.2014 Browser/AppleWebKit533.1 (KHTML, like Gecko) Mozilla/5.0 Mobile'
91
+ end
102
92
 
103
93
  it 'returns the correct client name' do
104
- client.name.must_equal "Android Browser"
94
+ value(client.name).must_equal 'Android Browser'
105
95
  end
106
96
 
107
97
  it 'recognizes the device name' do
108
- client.device_name.must_equal "GALAXY S5"
98
+ value(client.device_name).must_equal 'Galaxy S5'
109
99
  end
110
100
 
111
101
  it 'recognizes the device type' do
112
- client.device_type.must_equal "smartphone"
102
+ value(client.device_type).must_equal 'smartphone'
113
103
  end
114
-
115
104
  end
116
105
 
117
106
  describe 'remove TD suffix from model' do
118
-
119
- let(:user_agent) { 'Lenovo-A398t+_TD/S100 Linux/3.4.5 Android/4.1.2 Release/09.10.2013 Browser/AppleWebKit534.30 Mobile Safari/534.30' }
107
+ let(:user_agent) do
108
+ 'Lenovo-A398t+_TD/S100 Linux/3.4.5 Android/4.1.2 Release/09.10.2013 Browser/AppleWebKit534.30 Mobile Safari/534.30'
109
+ end
120
110
 
121
111
  it 'returns the correct client name' do
122
- client.name.must_equal "Android Browser"
112
+ value(client.name).must_equal 'Android Browser'
123
113
  end
124
114
 
125
115
  it 'recognizes the device name' do
126
- client.device_name.must_equal "A398t+"
116
+ value(client.device_name).must_equal 'A398t+'
127
117
  end
128
118
 
129
119
  it 'recognizes the device type' do
130
- client.device_type.must_equal "smartphone"
120
+ value(client.device_type).must_equal 'smartphone'
131
121
  end
132
-
133
122
  end
134
-
135
123
  end
136
-
@@ -1,71 +1,73 @@
1
1
  require_relative '../spec_helper'
2
2
 
3
3
  describe DeviceDetector do
4
-
5
- fixture_dir = File.expand_path('../../fixtures/detector', __FILE__)
4
+ fixture_dir = File.expand_path('../fixtures/detector', __dir__)
6
5
  fixture_files = Dir["#{fixture_dir}/*.yml"]
7
6
  fixture_files.each do |fixture_file|
8
-
9
7
  describe File.basename(fixture_file) do
10
-
11
8
  fixtures = nil
12
9
  begin
13
10
  fixtures = YAML.load(File.read(fixture_file))
14
11
  rescue Psych::SyntaxError => e
15
- fail "Failed to parse #{fixture_file}, reason: #{e}"
12
+ raise "Failed to parse #{fixture_file}, reason: #{e}"
16
13
  end
17
14
 
18
15
  def str_or_nil(string)
16
+ return nil if string.nil?
19
17
  return nil if string == ''
20
- string
18
+
19
+ string.to_s
21
20
  end
22
21
 
23
22
  fixtures.each do |f|
24
-
25
- user_agent = f["user_agent"]
23
+ user_agent = f['user_agent']
26
24
  detector = DeviceDetector.new(user_agent)
27
25
  os = detector.send(:os)
28
26
 
29
27
  describe user_agent do
30
- it "should be detected" do
28
+ it 'should be detected' do
31
29
  if detector.bot?
32
- assert_equal str_or_nil(f["bot"]["name"]), detector.bot_name, "failed bot name detection"
30
+ assert_equal str_or_nil(f['bot']['name']), detector.bot_name,
31
+ 'failed bot name detection'
33
32
  else
34
- if f["client"]
35
- assert_equal str_or_nil(f["client"]["name"]), detector.name, "failed client name detection"
33
+ if f['client']
34
+ assert_equal str_or_nil(f['client']['name']), detector.name,
35
+ 'failed client name detection'
36
36
  end
37
37
 
38
- os_family = str_or_nil(f["os_family"])
39
- if os_family != "Unknown"
38
+ os_family = str_or_nil(f['os_family'])
39
+ if os_family != 'Unknown'
40
40
  if os_family.nil?
41
- assert_nil os.family, "failed os family detection"
41
+ assert_nil os.family, 'failed os family detection'
42
42
  else
43
- assert_equal os_family, os.family, "failed os family detection"
43
+ assert_equal os_family, os.family, 'failed os family detection'
44
44
  end
45
45
 
46
- name = str_or_nil(f["os"]["name"])
46
+ name = str_or_nil(f['os']['name'])
47
47
  if name.nil?
48
- assert_nil os.name, "failed os name detection"
48
+ assert_nil os.name, 'failed os name detection'
49
49
  else
50
- assert_equal name, os.name, "failed os name detection"
50
+ assert_equal name, os.name, 'failed os name detection'
51
51
  end
52
52
 
53
- short_name = str_or_nil(f["os"]["short_name"])
54
- if short_name.nil?
55
- assert_nil os.short_name, "failed os short name detection"
56
- else
57
- assert_equal short_name, os.short_name, "failed os short name detection"
53
+ short_name = str_or_nil(f['os']['short_name'])
54
+ if short_name.nil? && f['os']['name']
55
+ short_name = DeviceDetector::OS::OPERATING_SYSTEMS[f['os']['name']]
58
56
  end
59
57
 
60
- os_version = str_or_nil(f["os"]["version"])
58
+ unless short_name.nil?
59
+ assert_equal short_name, os.short_name, 'failed os short name detection'
60
+ end
61
+
62
+ os_version = str_or_nil(f['os']['version'])
61
63
  if os_version.nil?
62
- assert_nil os.full_version, "failed os version detection"
64
+ assert_nil os.full_version, 'failed os version detection'
63
65
  else
64
- assert_equal os_version, os.full_version, "failed os version detection"
66
+ assert_equal os_version, os.full_version, 'failed os version detection'
65
67
  end
66
68
  end
67
- if f["device"]
68
- expected_type = str_or_nil(f["device"]["type"])
69
+ if f['device']
70
+ expected_type = str_or_nil(f['device']['type'])
69
71
  actual_type = detector.device_type
70
72
 
71
73
  if expected_type != actual_type
@@ -74,27 +76,24 @@ describe DeviceDetector do
74
76
  # detector.device_type
75
77
  end
76
78
  if expected_type.nil?
77
- assert_nil actual_type, "failed device type detection"
79
+ assert_nil actual_type, 'failed device type detection'
78
80
  else
79
- assert_equal expected_type, actual_type, "failed device type detection"
81
+ assert_equal expected_type, actual_type, 'failed device type detection'
80
82
  end
81
83
 
82
- model = str_or_nil(f["device"]["model"])
84
+ model = str_or_nil(f['device']['model'])
83
85
  model = model.to_s unless model.nil?
84
86
 
85
87
  if model.nil?
86
- assert_nil detector.device_name, "failed device name detection"
88
+ assert_nil detector.device_name, 'failed device name detection'
87
89
  else
88
- assert_equal model, detector.device_name, "failed device name detection"
90
+ assert_equal model, detector.device_name, 'failed device name detection'
89
91
  end
90
92
  end
91
93
  end
92
94
  end
93
95
  end
94
96
  end
95
-
96
97
  end
97
-
98
98
  end
99
-
100
99
  end
@@ -1,18 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../spec_helper'
2
4
 
3
5
  describe DeviceDetector::Device do
4
-
5
6
  subject { DeviceDetector::Device.new(user_agent) }
6
7
 
7
- alias :device :subject
8
+ alias_method :device, :subject
8
9
 
9
10
  describe '#name' do
10
-
11
11
  describe 'when models are nested' do
12
- let(:user_agent) { 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 [FBDV/iPhone7,2]' }
12
+ let(:user_agent) do
13
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 [FBDV/iPhone7,2]'
14
+ end
13
15
 
14
16
  it 'finds an Apple iPhone 6' do
15
- device.name.must_equal 'iPhone 6'
17
+ value(device.name).must_equal 'iPhone 6'
16
18
  end
17
19
  end
18
20
 
@@ -20,7 +22,7 @@ describe DeviceDetector::Device do
20
22
  let(:user_agent) { 'AIRNESS-AIR99/REV 2.2.1/Teleca Q03B1' }
21
23
 
22
24
  it 'finds an Airness AIR99' do
23
- device.name.must_equal 'AIR99'
25
+ value(device.name).must_equal 'AIR99'
24
26
  end
25
27
  end
26
28
 
@@ -28,19 +30,19 @@ describe DeviceDetector::Device do
28
30
  let(:user_agent) { 'UNKNOWN MODEL NAME' }
29
31
 
30
32
  it 'returns nil' do
31
- device.name.must_be_nil
33
+ value(device.name).must_be_nil
32
34
  end
33
35
  end
34
-
35
36
  end
36
37
 
37
38
  describe '#type' do
38
-
39
39
  describe 'when models are nested' do
40
- let(:user_agent) { 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 [FBDV/iPhone7,2]' }
40
+ let(:user_agent) do
41
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B466 [FBDV/iPhone7,2]'
42
+ end
41
43
 
42
44
  it 'finds device of Apple iPhone 6' do
43
- device.type.must_equal 'smartphone'
45
+ value(device.type).must_equal 'smartphone'
44
46
  end
45
47
  end
46
48
 
@@ -48,7 +50,7 @@ describe DeviceDetector::Device do
48
50
  let(:user_agent) { 'AIRNESS-AIR99/REV 2.2.1/Teleca Q03B1' }
49
51
 
50
52
  it 'finds the device of Airness AIR99' do
51
- device.type.must_equal 'feature phone'
53
+ value(device.type).must_equal 'feature phone'
52
54
  end
53
55
  end
54
56
 
@@ -56,96 +58,90 @@ describe DeviceDetector::Device do
56
58
  let(:user_agent) { 'UNKNOWN MODEL TYPE' }
57
59
 
58
60
  it 'returns nil' do
59
- device.type.must_be_nil
61
+ value(device.type).must_be_nil
60
62
  end
61
-
62
63
  end
63
64
 
64
65
  describe 'device not specified in nested block' do
65
-
66
- let(:user_agent) { 'Mozilla/5.0 (Linux; Android 4.4.2; es-us; SAMSUNG SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)' }
66
+ let(:user_agent) do
67
+ 'Mozilla/5.0 (Linux; Android 4.4.2; es-us; SAMSUNG SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)'
68
+ end
67
69
 
68
70
  it 'falls back to top-level device' do
69
- device.type.must_equal 'smartphone'
71
+ value(device.type).must_equal 'smartphone'
70
72
  end
71
-
72
73
  end
73
-
74
74
  end
75
75
 
76
76
  describe 'concrete device types' do
77
-
78
77
  describe 'mobiles' do
79
-
80
- let(:user_agent) { 'Mozilla/5.0 (Linux; Android 4.4.2; es-us; SAMSUNG SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)' }
78
+ let(:user_agent) do
79
+ 'Mozilla/5.0 (Linux; Android 4.4.2; es-us; SAMSUNG SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)'
80
+ end
81
81
 
82
82
  it 'identifies the device' do
83
- device.name.must_equal 'GALAXY S5'
84
- device.type.must_equal 'smartphone'
85
- device.brand.must_equal 'Samsung'
83
+ value(device.name).must_equal 'Galaxy S5'
84
+ value(device.type).must_equal 'smartphone'
85
+ value(device.brand).must_equal 'Samsung'
86
86
  end
87
-
88
87
  end
89
88
 
90
89
  describe 'cameras' do
91
-
92
- let(:user_agent) { 'Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; EK-GC100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' }
90
+ let(:user_agent) do
91
+ 'Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; EK-GC100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
92
+ end
93
93
 
94
94
  it 'identifies the device' do
95
- device.name.must_equal 'GALAXY Camera'
96
- device.type.must_equal 'camera'
97
- device.brand.must_equal 'Samsung'
95
+ value(device.name).must_equal 'Galaxy Camera'
96
+ value(device.type).must_equal 'camera'
97
+ value(device.brand).must_equal 'Samsung'
98
98
  end
99
-
100
99
  end
101
100
 
102
101
  describe 'car browsers' do
103
-
104
- let(:user_agent) { 'Mozilla/5.0 (X11; Linux) AppleWebKit/534.34 (KHTML, like Gecko) QtCarBrowser Safari/534.34' }
102
+ let(:user_agent) do
103
+ 'Mozilla/5.0 (X11; Linux) AppleWebKit/534.34 (KHTML, like Gecko) QtCarBrowser Safari/534.34'
104
+ end
105
105
 
106
106
  it 'identifies the device' do
107
- device.name.must_equal 'Model S'
108
- device.type.must_equal 'car browser'
109
- device.brand.must_be_nil
107
+ value(device.name).must_equal 'Model S'
108
+ value(device.type).must_equal 'car browser'
109
+ value(device.brand).must_equal 'Tesla'
110
110
  end
111
-
112
111
  end
113
112
 
114
113
  describe '(gaming) consoles' do
115
-
116
114
  let(:user_agent) { 'Opera/9.30 (Nintendo Wii; U; ; 2047-7;en)' }
117
115
 
118
116
  it 'identifies the device' do
119
- device.name.must_equal 'Wii'
120
- device.type.must_equal 'console'
121
- device.brand.must_be_nil
117
+ value(device.name).must_equal 'Wii'
118
+ value(device.type).must_equal 'console'
119
+ value(device.brand).must_be_nil
122
120
  end
123
-
124
121
  end
125
122
 
126
123
  describe 'portable media players' do
127
-
128
- let(:user_agent) { 'Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0_6 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B651 Safari/9537.53' }
124
+ let(:user_agent) do
125
+ 'Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0_6 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B651 Safari/9537.53'
126
+ end
129
127
 
130
128
  it 'identifies the device' do
131
- device.name.must_equal 'iPod Touch'
132
- device.type.must_equal 'portable media player'
133
- device.brand.must_equal 'Apple'
129
+ value(device.name).must_equal 'iPod Touch'
130
+ value(device.type).must_equal 'portable media player'
131
+ value(device.brand).must_equal 'Apple'
134
132
  end
135
-
136
133
  end
137
134
 
138
135
  describe 'televisions' do
139
-
140
- let(:user_agent) { 'Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.10.81 ;1.0M ;)' }
136
+ let(:user_agent) do
137
+ 'Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.10.81 ;1.0M ;)'
138
+ end
141
139
 
142
140
  it 'identifies the device' do
143
- device.name.must_equal 'NetCast 4.0'
144
- device.type.must_equal 'tv'
145
- device.brand.must_equal 'LG'
141
+ value(device.name).must_equal 'NetCast 4.0'
142
+ value(device.type).must_equal 'tv'
143
+ value(device.brand).must_equal 'LG'
146
144
  end
147
-
148
145
  end
149
146
  end
150
-
151
147
  end
@@ -14,12 +14,12 @@ describe DeviceDetector::MemoryCache do
14
14
  it 'sets the value under the key' do
15
15
  subject.set(key, 'value')
16
16
 
17
- subject.data[key].must_equal 'value'
17
+ value(subject.data[key]).must_equal 'value'
18
18
  end
19
19
 
20
20
  it 'returns the value' do
21
- subject.set(key, 'value').must_equal 'value'
22
- subject.set(key, false).must_equal false
21
+ value(subject.set(key, 'value')).must_equal 'value'
22
+ value(subject.set(key, false)).must_equal false
23
23
  assert_nil subject.set(key, nil)
24
24
  end
25
25
  end
@@ -30,7 +30,7 @@ describe DeviceDetector::MemoryCache do
30
30
  it 'sets the value under the key' do
31
31
  subject.set(key, 'value')
32
32
 
33
- subject.data[String(key)].must_equal 'value'
33
+ value(subject.data[String(key)]).must_equal 'value'
34
34
  end
35
35
  end
36
36
 
@@ -41,14 +41,14 @@ describe DeviceDetector::MemoryCache do
41
41
  it 'sets the value under the key' do
42
42
  subject.set(key, nil)
43
43
 
44
- subject.data[String(key)].must_equal internal_value
44
+ value(subject.data[String(key)]).must_equal internal_value
45
45
  assert_nil subject.get(key)
46
46
  end
47
47
 
48
48
  it 'sets the value under the key' do
49
49
  subject.get_or_set(key, nil)
50
50
 
51
- subject.data[String(key)].must_equal internal_value
51
+ value(subject.data[String(key)]).must_equal internal_value
52
52
  assert_nil subject.get(key)
53
53
  end
54
54
  end
@@ -59,15 +59,15 @@ describe DeviceDetector::MemoryCache do
59
59
  it 'sets the value under the key' do
60
60
  subject.set(key, false)
61
61
 
62
- subject.data[String(key)].must_equal false
63
- subject.get(key).must_equal false
62
+ value(subject.data[String(key)]).must_equal false
63
+ value(subject.get(key)).must_equal false
64
64
  end
65
65
 
66
66
  it 'sets the value under the key' do
67
67
  subject.get_or_set(key, false)
68
68
 
69
- subject.data[String(key)].must_equal false
70
- subject.get(key).must_equal false
69
+ value(subject.data[String(key)]).must_equal false
70
+ value(subject.get(key)).must_equal false
71
71
  end
72
72
  end
73
73
  end
@@ -79,7 +79,7 @@ describe DeviceDetector::MemoryCache do
79
79
  it 'gets the value for the key' do
80
80
  subject.data[key] = 'value'
81
81
 
82
- subject.get(key).must_equal 'value'
82
+ value(subject.get(key)).must_equal 'value'
83
83
  end
84
84
  end
85
85
 
@@ -89,7 +89,7 @@ describe DeviceDetector::MemoryCache do
89
89
  it 'gets the value for the key' do
90
90
  subject.data[String(key)] = 'value'
91
91
 
92
- subject.get(key).must_equal 'value'
92
+ value(subject.get(key)).must_equal 'value'
93
93
  end
94
94
  end
95
95
  end
@@ -106,13 +106,13 @@ describe DeviceDetector::MemoryCache do
106
106
  block_called = true
107
107
  end
108
108
 
109
- value.must_equal 'value'
110
- block_called.must_equal false
109
+ value(value).must_equal 'value'
110
+ value(block_called).must_equal false
111
111
  end
112
112
 
113
113
  it 'returns the value' do
114
114
  subject.data[key] = 'value2'
115
- subject.get_or_set(key, 'value').must_equal 'value2'
115
+ value(subject.get_or_set(key, 'value')).must_equal 'value2'
116
116
  end
117
117
  end
118
118
 
@@ -123,12 +123,12 @@ describe DeviceDetector::MemoryCache do
123
123
  block_called = true
124
124
  end
125
125
 
126
- block_called.must_equal true
127
- subject.data[key].must_equal true
126
+ value(block_called).must_equal true
127
+ value(subject.data[key]).must_equal true
128
128
  end
129
129
 
130
130
  it 'returns the value' do
131
- subject.get_or_set(key, 'value').must_equal 'value'
131
+ value(subject.get_or_set(key, 'value')).must_equal 'value'
132
132
  end
133
133
  end
134
134
  end
@@ -142,7 +142,7 @@ describe DeviceDetector::MemoryCache do
142
142
  subject.set('3', 'baz')
143
143
  subject.set('4', 'boz')
144
144
 
145
- subject.data.keys.size.must_equal 3
145
+ value(subject.data.keys.size).must_equal 3
146
146
  end
147
147
  end
148
148
  end