device_detector 0.9.1 → 1.0.4

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 (91) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +49 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -9
  5. data/CHANGELOG.md +16 -3
  6. data/README.md +7 -9
  7. data/Rakefile +19 -13
  8. data/device_detector.gemspec +1 -0
  9. data/lib/device_detector.rb +32 -28
  10. data/lib/device_detector/bot.rb +2 -2
  11. data/lib/device_detector/client.rb +3 -2
  12. data/lib/device_detector/device.rb +44 -21
  13. data/lib/device_detector/memory_cache.rb +26 -19
  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 +121 -111
  18. data/lib/device_detector/parser.rb +22 -9
  19. data/lib/device_detector/version.rb +3 -1
  20. data/lib/device_detector/version_extractor.rb +2 -3
  21. data/regexes/bots.yml +840 -20
  22. data/regexes/client/browser_engine.yml +11 -2
  23. data/regexes/client/browsers.yml +909 -108
  24. data/regexes/client/feed_readers.yml +38 -2
  25. data/regexes/client/libraries.yml +76 -2
  26. data/regexes/client/mediaplayers.yml +25 -5
  27. data/regexes/client/mobile_apps.yml +167 -2
  28. data/regexes/client/pim.yml +10 -1
  29. data/regexes/device/cameras.yml +1 -1
  30. data/regexes/device/car_browsers.yml +7 -3
  31. data/regexes/device/consoles.yml +3 -3
  32. data/regexes/device/mobiles.yml +10123 -465
  33. data/regexes/device/portable_media_player.yml +4 -6
  34. data/regexes/device/televisions.yml +18 -4
  35. data/regexes/oss.yml +115 -21
  36. data/regexes/vendorfragments.yml +6 -2
  37. data/spec/device_detector/concrete_user_agent_spec.rb +16 -17
  38. data/spec/device_detector/detector_fixtures_spec.rb +51 -11
  39. data/spec/device_detector/device_spec.rb +28 -48
  40. data/spec/device_detector/memory_cache_spec.rb +60 -28
  41. data/spec/device_detector/model_extractor_spec.rb +3 -3
  42. data/spec/device_detector/version_extractor_spec.rb +5 -6
  43. data/spec/device_detector_spec.rb +60 -69
  44. data/spec/fixtures/client/browser.yml +1785 -262
  45. data/spec/fixtures/client/feed_reader.yml +47 -35
  46. data/spec/fixtures/client/library.yml +112 -3
  47. data/spec/fixtures/client/mediaplayer.yml +32 -37
  48. data/spec/fixtures/client/mobile_app.yml +193 -6
  49. data/spec/fixtures/client/pim.yml +37 -18
  50. data/spec/fixtures/detector/bots.yml +1426 -118
  51. data/spec/fixtures/detector/camera.yml +36 -10
  52. data/spec/fixtures/detector/car_browser.yml +64 -3
  53. data/spec/fixtures/detector/console.yml +80 -26
  54. data/spec/fixtures/detector/desktop.yml +2222 -1589
  55. data/spec/fixtures/detector/feature_phone.yml +151 -42
  56. data/spec/fixtures/detector/feed_reader.yml +186 -121
  57. data/spec/fixtures/detector/mediaplayer.yml +113 -39
  58. data/spec/fixtures/detector/mobile_apps.yml +366 -21
  59. data/spec/fixtures/detector/phablet.yml +2597 -570
  60. data/spec/fixtures/detector/portable_media_player.yml +41 -16
  61. data/spec/fixtures/detector/smart_display.yml +8 -5
  62. data/spec/fixtures/detector/smart_speaker.yml +55 -0
  63. data/spec/fixtures/detector/smartphone-1.yml +5468 -5010
  64. data/spec/fixtures/detector/smartphone-10.yml +9977 -0
  65. data/spec/fixtures/detector/smartphone-11.yml +9891 -0
  66. data/spec/fixtures/detector/smartphone-12.yml +9906 -0
  67. data/spec/fixtures/detector/smartphone-13.yml +9920 -0
  68. data/spec/fixtures/detector/smartphone-14.yml +2662 -0
  69. data/spec/fixtures/detector/smartphone-2.yml +5213 -4635
  70. data/spec/fixtures/detector/smartphone-3.yml +5082 -4533
  71. data/spec/fixtures/detector/smartphone-4.yml +6806 -2625
  72. data/spec/fixtures/detector/smartphone-5.yml +9914 -0
  73. data/spec/fixtures/detector/smartphone-6.yml +9962 -0
  74. data/spec/fixtures/detector/smartphone-7.yml +9899 -0
  75. data/spec/fixtures/detector/smartphone-8.yml +9931 -0
  76. data/spec/fixtures/detector/smartphone-9.yml +9899 -0
  77. data/spec/fixtures/detector/smartphone.yml +5225 -4652
  78. data/spec/fixtures/detector/tablet-1.yml +4691 -4191
  79. data/spec/fixtures/detector/tablet-2.yml +9800 -71
  80. data/spec/fixtures/detector/tablet-3.yml +9959 -0
  81. data/spec/fixtures/detector/tablet-4.yml +4528 -0
  82. data/spec/fixtures/detector/tablet.yml +4664 -4177
  83. data/spec/fixtures/detector/tv.yml +3399 -1048
  84. data/spec/fixtures/detector/unknown.yml +1017 -977
  85. data/spec/fixtures/detector/wearable.yml +61 -0
  86. data/spec/fixtures/device/camera.yml +4 -3
  87. data/spec/fixtures/device/car_browser.yml +9 -2
  88. data/spec/fixtures/device/console.yml +15 -14
  89. data/spec/fixtures/parser/oss.yml +284 -2
  90. data/spec/fixtures/parser/vendorfragments.yml +8 -2
  91. metadata +50 -7
@@ -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
 
@@ -19,10 +19,8 @@ Apple:
19
19
  model: 'iPod Touch 4'
20
20
  - regex: '(?:Apple-)?iPod5[C,]1'
21
21
  model: 'iPod Touch 5'
22
- - regex: '(?:Apple-)?iPod1[C,]1'
23
- model: 'iPod Touch'
24
- - regex: '(?:Apple-)?iPod1[C,]1'
25
- model: 'iPod Touch'
22
+ - regex: '(?:Apple-)?iPod7[C,]1'
23
+ model: 'iPod Touch 6'
26
24
  - regex: '(?:Apple-)?iPod'
27
25
  model: 'iPod Touch'
28
26
 
@@ -58,4 +56,4 @@ Samsung:
58
56
  - regex: 'YP-G50'
59
57
  model: 'Galaxy Player 50'
60
58
  - regex: 'YP-GB70D'
61
- model: 'Galaxy Player 70 Plus'
59
+ model: 'Galaxy Player 70 Plus'
@@ -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
  # ATTENTION: This file may only include tv user agents that contain 'HbbTV/([1-9]{1}(\.[0-9]{1}){1,2})'
@@ -56,6 +56,16 @@ Grundig:
56
56
  device: 'tv'
57
57
  model: ''
58
58
 
59
+ # Hisense
60
+ Hisense:
61
+ regex: 'Hisense'
62
+ device: 'tv'
63
+ models:
64
+ - regex: '(L[A-Z]{2,3}[0-9]{2}[A-Z][0-9]{3,4}[A-Z]{0,6}[0-9]?[A-Z]?)'
65
+ model: '$1'
66
+ - regex: '(H[A-Z]?[0-9]{2}[A-Z][0-9]{3,4}[A-Z]{0,4})'
67
+ model: '$1'
68
+
59
69
  # Humax
60
70
  Humax:
61
71
  regex: 'Humax'
@@ -101,6 +111,10 @@ LG:
101
111
  models:
102
112
  - regex: '(NetCast [0-9]{1}.[0-9]{1}|GLOBAL_PLAT3)'
103
113
  model: '$1'
114
+ - regex: '(OLED[0-9]{2}[A-Z][0-9][A-Z])'
115
+ model: '$1'
116
+ - regex: 'LGE;? ?([0-9]{2}[A-Z]{2}[0-9]{2,4}[A-Z]?)'
117
+ model: '$1'
104
118
 
105
119
  # Loewe
106
120
  Loewe:
@@ -165,7 +179,7 @@ Samsung:
165
179
  regex: 'Samsung|Maple_2011'
166
180
  device: 'tv'
167
181
  models:
168
- - regex: 'SmartTV(2012|2013|2014|2015)'
182
+ - regex: 'SmartTV(201[2-9])'
169
183
  model: 'Smart TV $1'
170
184
  - regex: 'Maple_2011'
171
185
  model: 'Smart TV 2011'
@@ -213,7 +227,7 @@ Sony:
213
227
  regex: 'Sony'
214
228
  device: 'tv'
215
229
  models:
216
- - regex: '(KDL[0-9]{2}[A-Z]{1,2}[0-9]{3})'
230
+ - regex: '(KDL?-?[0-9]{2}[A-Z]{1,2}[0-9]{1,5})'
217
231
  model: '$1'
218
232
 
219
233
  # TechniSat
@@ -279,4 +293,4 @@ Videoweb:
279
293
  - regex: '(tv2n)'
280
294
  model: '$1'
281
295
  - regex: '(videowebtv)'
282
- model: 'VideoWeb TV'
296
+ model: 'VideoWeb TV'
@@ -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
 
@@ -31,7 +31,7 @@
31
31
  ##########
32
32
  # Windows Mobile
33
33
  ##########
34
- - regex: 'Windows Phone (?:OS)?[ ]?(\d+[\.\d]+)'
34
+ - regex: '(?:Windows Phone (?:OS)?|wds)[ ]?(\d+[\.\d]+)'
35
35
  name: 'Windows Phone'
36
36
  version: '$1'
37
37
 
@@ -45,7 +45,7 @@
45
45
  version: '$1'
46
46
 
47
47
 
48
- - regex: '(?:IEMobile|Windows Mobile)(?: (\d+[\.\d]+))?'
48
+ - regex: '(?:IEMobile|Windows ?Mobile)(?: (\d+[\.\d]+))?'
49
49
  name: 'Windows Mobile'
50
50
  version: '$1'
51
51
 
@@ -58,6 +58,19 @@
58
58
  name: 'Windows RT'
59
59
  version: '8.1'
60
60
 
61
+ ##########
62
+ # Windows IoT
63
+ ##########
64
+ - regex: 'Windows IoT 10.0'
65
+ name: 'Windows IoT'
66
+ version: '10'
67
+
68
+ ##########
69
+ # KaiOS
70
+ ##########
71
+ - regex: 'KAIOS(?:/(\d+[\.\d]+))?'
72
+ name: 'KaiOS'
73
+ version: '$1'
61
74
 
62
75
  ##########
63
76
  # Custom Android Roms
@@ -78,10 +91,14 @@
78
91
  name: 'MocorDroid'
79
92
  version: '$1'
80
93
 
94
+ - regex: 'Fire OS(?:/(\d+[\.\d]*))?'
95
+ name: 'Fire OS'
96
+ version: '$1'
97
+
81
98
  ##########
82
99
  # Android
83
100
  ##########
84
- - regex: '(?:(?:Orca-)?Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]+)'
101
+ - regex: '(?:(?:Orca-)?Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]*)'
85
102
  name: 'Android'
86
103
  version: '$1'
87
104
 
@@ -89,6 +106,18 @@
89
106
  - regex: 'Android|Silk-Accelerated=[a-z]{4,5}'
90
107
  name: 'Android'
91
108
  version: ''
109
+
110
+ - regex: '(?:TwitterAndroid).*[ /](?:[a-z]+ )?(\d+[\.\d]*)'
111
+ name: 'Android'
112
+ version: '$1'
113
+
114
+ - regex: 'FB4A.*FBSV/(\d+[\.\d]*);'
115
+ name: 'Android'
116
+ version: '$1'
117
+
118
+ - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe'
119
+ name: 'Android'
120
+ version: ''
92
121
 
93
122
 
94
123
  ##########
@@ -122,9 +151,17 @@
122
151
  ##########
123
152
  # Linux
124
153
  ##########
154
+ - regex: '(Ordissimo|webissimo3)'
155
+ name: 'Ordissimo'
156
+ version: ''
157
+
158
+ - regex: 'TOS; Linux'
159
+ name: 'TmaxOS'
160
+ version: ''
161
+
125
162
  - regex: 'Maemo'
126
163
  name: 'Maemo'
127
- version: '$1'
164
+ version: ''
128
165
 
129
166
  - regex: 'Arch ?Linux(?:[ /\-](\d+[\.\d]+))?'
130
167
  name: 'Arch Linux'
@@ -239,12 +276,59 @@
239
276
  - regex: 'Windows'
240
277
  name: 'Windows'
241
278
  version: ''
242
-
243
-
279
+
280
+
281
+ ##########
282
+ # Haiku OS
283
+ ##########
284
+ - regex: 'Haiku'
285
+ name: 'Haiku OS'
286
+ version: ''
287
+
244
288
 
245
289
  ##########
246
290
  # iOS
247
291
  ##########
292
+ - regex: 'CFNetwork/889'
293
+ name: 'iOS'
294
+ version: '11.1'
295
+
296
+ - regex: 'CFNetwork/887.*(x86_64)'
297
+ name: 'Mac'
298
+ version: '10.13'
299
+
300
+ - regex: 'CFNetwork/887'
301
+ name: 'iOS'
302
+ version: '11.0'
303
+
304
+ - regex: 'CFNetwork/811.*(x86_64)'
305
+ name: 'Mac'
306
+ version: '10.12'
307
+
308
+ - regex: 'CFNetwork/811'
309
+ name: 'iOS'
310
+ version: '10.3'
311
+
312
+ - regex: 'CFNetwork/808\.3'
313
+ name: 'iOS'
314
+ version: '10.3'
315
+
316
+ - regex: 'CFNetwork/808\.2'
317
+ name: 'iOS'
318
+ version: '10.2'
319
+
320
+ - regex: 'CFNetwork/808\.1'
321
+ name: 'iOS'
322
+ version: '10.1'
323
+
324
+ - regex: 'CFNetwork/808\.0'
325
+ name: 'iOS'
326
+ version: '10.0'
327
+
328
+ - regex: 'CFNetwork/808'
329
+ name: 'iOS'
330
+ version: '10'
331
+
248
332
  - regex: 'CFNetwork/758\.4\.3'
249
333
  name: 'iOS'
250
334
  version: '9.3.2'
@@ -341,16 +425,31 @@
341
425
  name: 'iOS'
342
426
  version: '$1'
343
427
 
428
+ - regex: 'FBIOS.*FBSV/(\d+[\.\d]*);'
429
+ name: 'iOS'
430
+ version: '$1'
431
+
344
432
  - regex: '(?:Apple-)?(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\d+\.\d+)|; Opera)?'
345
433
  name: 'iOS'
346
434
  version: '$1'
347
435
 
436
+ - regex: 'Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|Overcast|Castro|Podcat|i[cC]atcher|RSSRadio/'
437
+ name: 'iOS'
438
+ version: ''
439
+
440
+ - regex: 'iTunes-(iPod|iPad|iPhone)/(?:[\d\.]+)'
441
+ name: 'iOS'
442
+ version: ''
348
443
 
349
444
 
350
445
  ##########
351
446
  # Mac
352
447
  ##########
353
448
 
449
+ - regex: 'CFNetwork/807'
450
+ name: 'Mac'
451
+ version: '10.12'
452
+
354
453
  - regex: 'CFNetwork/760'
355
454
  name: 'Mac'
356
455
  version: '10.11'
@@ -391,7 +490,7 @@
391
490
  name: 'Mac'
392
491
  version: '10.2'
393
492
 
394
- - regex: 'Mac OS X(?: (?:Version )?(\d+(?:[_\.]\d+)+))?'
493
+ - regex: 'Mac[ +]OS[ +]X(?:[ /](?:Version )?(\d+(?:[_\.]\d+)+))?'
395
494
  name: 'Mac'
396
495
  version: '$1'
397
496
 
@@ -399,7 +498,7 @@
399
498
  name: 'Mac'
400
499
  version: '$1'
401
500
 
402
- - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC'
501
+ - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook'
403
502
  name: 'Mac'
404
503
  version: ''
405
504
 
@@ -408,7 +507,7 @@
408
507
  ##########
409
508
  # ChromeOS
410
509
  ##########
411
- - regex: 'CrOS [a-z0-9_]+ (\d+[\.\d]+)'
510
+ - regex: 'CrOS [a-z0-9_]+ .* Chrome/(\d+[\.\d]+)'
412
511
  name: 'Chrome OS'
413
512
  version: '$1'
414
513
 
@@ -435,13 +534,9 @@
435
534
  - regex: 'BlackBerry'
436
535
  name: 'BlackBerry OS'
437
536
  version: ''
438
-
439
-
440
- ##########
441
- # Haiku OS
442
- ##########
443
- - regex: 'Haiku'
444
- name: 'Haiku OS'
537
+
538
+ - regex: 'bPod'
539
+ name: 'BlackBerry OS'
445
540
  version: ''
446
541
 
447
542
 
@@ -645,11 +740,10 @@
645
740
  ##########
646
741
  # Gaming Console
647
742
  ##########
648
- - regex: 'Nintendo Wii'
743
+ - regex: 'Nintendo (Wii|Switch)'
649
744
  name: 'Nintendo'
650
- version: 'Wii'
651
-
652
-
745
+ version: '$1'
746
+
653
747
  - regex: 'PlayStation ?([3|4])'
654
748
  name: 'PlayStation'
655
749
  version: '$1'
@@ -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'
@@ -13,7 +13,7 @@ describe DeviceDetector do
13
13
  describe '#device_name' do
14
14
 
15
15
  it 'returns device name' do
16
- client.device_name.must_equal 'iPhone 5S'
16
+ value(client.device_name).must_equal 'iPhone 5S'
17
17
  end
18
18
 
19
19
  end
@@ -21,7 +21,7 @@ describe DeviceDetector do
21
21
  describe '#device_type' do
22
22
 
23
23
  it 'returns the device type' do
24
- client.device_type.must_equal 'smartphone'
24
+ value(client.device_type).must_equal 'smartphone'
25
25
  end
26
26
 
27
27
  end
@@ -35,7 +35,7 @@ describe DeviceDetector do
35
35
  describe '#os_name' do
36
36
 
37
37
  it 'returns the OS name' do
38
- client.os_name.must_equal 'Ubuntu'
38
+ value(client.os_name).must_equal 'Ubuntu'
39
39
  end
40
40
 
41
41
  end
@@ -49,7 +49,7 @@ describe DeviceDetector do
49
49
  describe '#full_version' do
50
50
 
51
51
  it 'returns the correct OS version' do
52
- client.os_full_version.must_equal '10.10.1'
52
+ value(client.os_full_version).must_equal '10.10.1'
53
53
  end
54
54
 
55
55
  end
@@ -63,15 +63,15 @@ describe DeviceDetector do
63
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' }
64
64
 
65
65
  it 'returns the correct client name' do
66
- client.name.must_equal 'Chrome'
66
+ value(client.name).must_equal 'Chrome'
67
67
  end
68
68
 
69
69
  it 'recognizes the device name' do
70
- client.device_name.must_be_nil
70
+ value(client.device_name).must_be_nil
71
71
  end
72
72
 
73
73
  it 'recognizes the device type' do
74
- client.device_type.must_equal "desktop"
74
+ value(client.device_type).must_equal "desktop"
75
75
  end
76
76
 
77
77
  end
@@ -81,15 +81,15 @@ describe DeviceDetector do
81
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' }
82
82
 
83
83
  it 'returns the correct client name' do
84
- client.name.must_equal 'Chrome'
84
+ value(client.name).must_equal 'Chrome'
85
85
  end
86
86
 
87
87
  it 'recognizes the device name' do
88
- client.device_name.must_be_nil
88
+ value(client.device_name).must_be_nil
89
89
  end
90
90
 
91
91
  it 'recognizes the device type' do
92
- client.device_type.must_equal "desktop"
92
+ value(client.device_type).must_equal "desktop"
93
93
  end
94
94
 
95
95
  end
@@ -101,15 +101,15 @@ describe DeviceDetector do
101
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' }
102
102
 
103
103
  it 'returns the correct client name' do
104
- client.name.must_equal "Android Browser"
104
+ value(client.name).must_equal "Android Browser"
105
105
  end
106
106
 
107
107
  it 'recognizes the device name' do
108
- client.device_name.must_equal "GALAXY S5"
108
+ value(client.device_name).must_equal "GALAXY S5"
109
109
  end
110
110
 
111
111
  it 'recognizes the device type' do
112
- client.device_type.must_equal "smartphone"
112
+ value(client.device_type).must_equal "smartphone"
113
113
  end
114
114
 
115
115
  end
@@ -119,18 +119,17 @@ describe DeviceDetector do
119
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' }
120
120
 
121
121
  it 'returns the correct client name' do
122
- client.name.must_equal "Android Browser"
122
+ value(client.name).must_equal "Android Browser"
123
123
  end
124
124
 
125
125
  it 'recognizes the device name' do
126
- client.device_name.must_equal "A398t+"
126
+ value(client.device_name).must_equal "A398t+"
127
127
  end
128
128
 
129
129
  it 'recognizes the device type' do
130
- client.device_type.must_equal "smartphone"
130
+ value(client.device_type).must_equal "smartphone"
131
131
  end
132
132
 
133
133
  end
134
134
 
135
135
  end
136
-