device_detector 1.0.4 → 1.0.7

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/README.md +8 -7
  4. data/lib/device_detector/browser.rb +364 -0
  5. data/lib/device_detector/client.rb +8 -0
  6. data/lib/device_detector/device.rb +1204 -2
  7. data/lib/device_detector/os.rb +39 -12
  8. data/lib/device_detector/parser.rb +1 -1
  9. data/lib/device_detector/version.rb +1 -1
  10. data/lib/device_detector/version_extractor.rb +28 -0
  11. data/lib/device_detector.rb +57 -13
  12. data/regexes/bots.yml +651 -61
  13. data/regexes/client/browser_engine.yml +7 -1
  14. data/regexes/client/browsers.yml +774 -78
  15. data/regexes/client/feed_readers.yml +4 -10
  16. data/regexes/client/libraries.yml +71 -2
  17. data/regexes/client/mediaplayers.yml +25 -1
  18. data/regexes/client/mobile_apps.yml +923 -73
  19. data/regexes/client/pim.yml +65 -2
  20. data/regexes/device/cameras.yml +5 -5
  21. data/regexes/device/car_browsers.yml +16 -0
  22. data/regexes/device/consoles.yml +13 -1
  23. data/regexes/device/mobiles.yml +17029 -3889
  24. data/regexes/device/notebooks.yml +114 -0
  25. data/regexes/device/portable_media_player.yml +36 -9
  26. data/regexes/device/shell_tv.yml +117 -0
  27. data/regexes/device/televisions.yml +439 -34
  28. data/regexes/oss.yml +620 -284
  29. metadata +9 -131
  30. data/.gitignore +0 -14
  31. data/.rubocop.yml +0 -49
  32. data/.ruby-version +0 -1
  33. data/.travis.yml +0 -14
  34. data/Gemfile +0 -8
  35. data/Rakefile +0 -85
  36. data/device_detector.gemspec +0 -27
  37. data/spec/device_detector/bot_fixtures_spec.rb +0 -30
  38. data/spec/device_detector/client_fixtures_spec.rb +0 -31
  39. data/spec/device_detector/concrete_user_agent_spec.rb +0 -135
  40. data/spec/device_detector/detector_fixtures_spec.rb +0 -100
  41. data/spec/device_detector/device_fixtures_spec.rb +0 -36
  42. data/spec/device_detector/device_spec.rb +0 -131
  43. data/spec/device_detector/memory_cache_spec.rb +0 -148
  44. data/spec/device_detector/model_extractor_spec.rb +0 -63
  45. data/spec/device_detector/os_fixtures_spec.rb +0 -26
  46. data/spec/device_detector/version_extractor_spec.rb +0 -79
  47. data/spec/device_detector_spec.rb +0 -189
  48. data/spec/fixtures/client/browser.yml +0 -2836
  49. data/spec/fixtures/client/feed_reader.yml +0 -199
  50. data/spec/fixtures/client/library.yml +0 -193
  51. data/spec/fixtures/client/mediaplayer.yml +0 -163
  52. data/spec/fixtures/client/mobile_app.yml +0 -217
  53. data/spec/fixtures/client/pim.yml +0 -115
  54. data/spec/fixtures/detector/bots.yml +0 -3726
  55. data/spec/fixtures/detector/camera.yml +0 -141
  56. data/spec/fixtures/detector/car_browser.yml +0 -81
  57. data/spec/fixtures/detector/console.yml +0 -321
  58. data/spec/fixtures/detector/desktop.yml +0 -5461
  59. data/spec/fixtures/detector/feature_phone.yml +0 -891
  60. data/spec/fixtures/detector/feed_reader.yml +0 -551
  61. data/spec/fixtures/detector/mediaplayer.yml +0 -253
  62. data/spec/fixtures/detector/mobile_apps.yml +0 -494
  63. data/spec/fixtures/detector/phablet.yml +0 -4167
  64. data/spec/fixtures/detector/portable_media_player.yml +0 -178
  65. data/spec/fixtures/detector/smart_display.yml +0 -61
  66. data/spec/fixtures/detector/smart_speaker.yml +0 -55
  67. data/spec/fixtures/detector/smartphone-1.yml +0 -9927
  68. data/spec/fixtures/detector/smartphone-10.yml +0 -9977
  69. data/spec/fixtures/detector/smartphone-11.yml +0 -9891
  70. data/spec/fixtures/detector/smartphone-12.yml +0 -9906
  71. data/spec/fixtures/detector/smartphone-13.yml +0 -9920
  72. data/spec/fixtures/detector/smartphone-14.yml +0 -2662
  73. data/spec/fixtures/detector/smartphone-2.yml +0 -9992
  74. data/spec/fixtures/detector/smartphone-3.yml +0 -9945
  75. data/spec/fixtures/detector/smartphone-4.yml +0 -9923
  76. data/spec/fixtures/detector/smartphone-5.yml +0 -9914
  77. data/spec/fixtures/detector/smartphone-6.yml +0 -9962
  78. data/spec/fixtures/detector/smartphone-7.yml +0 -9899
  79. data/spec/fixtures/detector/smartphone-8.yml +0 -9931
  80. data/spec/fixtures/detector/smartphone-9.yml +0 -9899
  81. data/spec/fixtures/detector/smartphone.yml +0 -9984
  82. data/spec/fixtures/detector/tablet-1.yml +0 -9995
  83. data/spec/fixtures/detector/tablet-2.yml +0 -9977
  84. data/spec/fixtures/detector/tablet-3.yml +0 -9959
  85. data/spec/fixtures/detector/tablet-4.yml +0 -4528
  86. data/spec/fixtures/detector/tablet.yml +0 -9971
  87. data/spec/fixtures/detector/tv.yml +0 -4933
  88. data/spec/fixtures/detector/unknown.yml +0 -3236
  89. data/spec/fixtures/detector/wearable.yml +0 -61
  90. data/spec/fixtures/device/camera.yml +0 -19
  91. data/spec/fixtures/device/car_browser.yml +0 -13
  92. data/spec/fixtures/device/console.yml +0 -79
  93. data/spec/fixtures/parser/oss.yml +0 -1082
  94. data/spec/fixtures/parser/vendorfragments.yml +0 -168
  95. data/spec/spec_helper.rb +0 -9
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: device_detector
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mati Sójka
8
8
  - Ben Zimmer
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-06-23 00:00:00.000000000 Z
12
+ date: 2022-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest
@@ -75,18 +75,12 @@ executables: []
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - ".gitignore"
79
- - ".rubocop.yml"
80
- - ".ruby-version"
81
- - ".travis.yml"
82
78
  - CHANGELOG.md
83
- - Gemfile
84
79
  - LICENSE.txt
85
80
  - README.md
86
- - Rakefile
87
- - device_detector.gemspec
88
81
  - lib/device_detector.rb
89
82
  - lib/device_detector/bot.rb
83
+ - lib/device_detector/browser.rb
90
84
  - lib/device_detector/client.rb
91
85
  - lib/device_detector/device.rb
92
86
  - lib/device_detector/memory_cache.rb
@@ -109,74 +103,17 @@ files:
109
103
  - regexes/device/car_browsers.yml
110
104
  - regexes/device/consoles.yml
111
105
  - regexes/device/mobiles.yml
106
+ - regexes/device/notebooks.yml
112
107
  - regexes/device/portable_media_player.yml
108
+ - regexes/device/shell_tv.yml
113
109
  - regexes/device/televisions.yml
114
110
  - regexes/oss.yml
115
111
  - regexes/vendorfragments.yml
116
- - spec/device_detector/bot_fixtures_spec.rb
117
- - spec/device_detector/client_fixtures_spec.rb
118
- - spec/device_detector/concrete_user_agent_spec.rb
119
- - spec/device_detector/detector_fixtures_spec.rb
120
- - spec/device_detector/device_fixtures_spec.rb
121
- - spec/device_detector/device_spec.rb
122
- - spec/device_detector/memory_cache_spec.rb
123
- - spec/device_detector/model_extractor_spec.rb
124
- - spec/device_detector/os_fixtures_spec.rb
125
- - spec/device_detector/version_extractor_spec.rb
126
- - spec/device_detector_spec.rb
127
- - spec/fixtures/client/browser.yml
128
- - spec/fixtures/client/feed_reader.yml
129
- - spec/fixtures/client/library.yml
130
- - spec/fixtures/client/mediaplayer.yml
131
- - spec/fixtures/client/mobile_app.yml
132
- - spec/fixtures/client/pim.yml
133
- - spec/fixtures/detector/bots.yml
134
- - spec/fixtures/detector/camera.yml
135
- - spec/fixtures/detector/car_browser.yml
136
- - spec/fixtures/detector/console.yml
137
- - spec/fixtures/detector/desktop.yml
138
- - spec/fixtures/detector/feature_phone.yml
139
- - spec/fixtures/detector/feed_reader.yml
140
- - spec/fixtures/detector/mediaplayer.yml
141
- - spec/fixtures/detector/mobile_apps.yml
142
- - spec/fixtures/detector/phablet.yml
143
- - spec/fixtures/detector/portable_media_player.yml
144
- - spec/fixtures/detector/smart_display.yml
145
- - spec/fixtures/detector/smart_speaker.yml
146
- - spec/fixtures/detector/smartphone-1.yml
147
- - spec/fixtures/detector/smartphone-10.yml
148
- - spec/fixtures/detector/smartphone-11.yml
149
- - spec/fixtures/detector/smartphone-12.yml
150
- - spec/fixtures/detector/smartphone-13.yml
151
- - spec/fixtures/detector/smartphone-14.yml
152
- - spec/fixtures/detector/smartphone-2.yml
153
- - spec/fixtures/detector/smartphone-3.yml
154
- - spec/fixtures/detector/smartphone-4.yml
155
- - spec/fixtures/detector/smartphone-5.yml
156
- - spec/fixtures/detector/smartphone-6.yml
157
- - spec/fixtures/detector/smartphone-7.yml
158
- - spec/fixtures/detector/smartphone-8.yml
159
- - spec/fixtures/detector/smartphone-9.yml
160
- - spec/fixtures/detector/smartphone.yml
161
- - spec/fixtures/detector/tablet-1.yml
162
- - spec/fixtures/detector/tablet-2.yml
163
- - spec/fixtures/detector/tablet-3.yml
164
- - spec/fixtures/detector/tablet-4.yml
165
- - spec/fixtures/detector/tablet.yml
166
- - spec/fixtures/detector/tv.yml
167
- - spec/fixtures/detector/unknown.yml
168
- - spec/fixtures/detector/wearable.yml
169
- - spec/fixtures/device/camera.yml
170
- - spec/fixtures/device/car_browser.yml
171
- - spec/fixtures/device/console.yml
172
- - spec/fixtures/parser/oss.yml
173
- - spec/fixtures/parser/vendorfragments.yml
174
- - spec/spec_helper.rb
175
112
  homepage: http://podigee.github.io/device_detector
176
113
  licenses:
177
114
  - LGPL-3.0
178
115
  metadata: {}
179
- post_install_message:
116
+ post_install_message:
180
117
  rdoc_options: []
181
118
  require_paths:
182
119
  - lib
@@ -192,66 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
129
  version: '0'
193
130
  requirements: []
194
131
  rubygems_version: 3.0.3
195
- signing_key:
132
+ signing_key:
196
133
  specification_version: 4
197
134
  summary: Precise and fast user agent parser and device detector
198
- test_files:
199
- - spec/device_detector/bot_fixtures_spec.rb
200
- - spec/device_detector/client_fixtures_spec.rb
201
- - spec/device_detector/concrete_user_agent_spec.rb
202
- - spec/device_detector/detector_fixtures_spec.rb
203
- - spec/device_detector/device_fixtures_spec.rb
204
- - spec/device_detector/device_spec.rb
205
- - spec/device_detector/memory_cache_spec.rb
206
- - spec/device_detector/model_extractor_spec.rb
207
- - spec/device_detector/os_fixtures_spec.rb
208
- - spec/device_detector/version_extractor_spec.rb
209
- - spec/device_detector_spec.rb
210
- - spec/fixtures/client/browser.yml
211
- - spec/fixtures/client/feed_reader.yml
212
- - spec/fixtures/client/library.yml
213
- - spec/fixtures/client/mediaplayer.yml
214
- - spec/fixtures/client/mobile_app.yml
215
- - spec/fixtures/client/pim.yml
216
- - spec/fixtures/detector/bots.yml
217
- - spec/fixtures/detector/camera.yml
218
- - spec/fixtures/detector/car_browser.yml
219
- - spec/fixtures/detector/console.yml
220
- - spec/fixtures/detector/desktop.yml
221
- - spec/fixtures/detector/feature_phone.yml
222
- - spec/fixtures/detector/feed_reader.yml
223
- - spec/fixtures/detector/mediaplayer.yml
224
- - spec/fixtures/detector/mobile_apps.yml
225
- - spec/fixtures/detector/phablet.yml
226
- - spec/fixtures/detector/portable_media_player.yml
227
- - spec/fixtures/detector/smart_display.yml
228
- - spec/fixtures/detector/smart_speaker.yml
229
- - spec/fixtures/detector/smartphone-1.yml
230
- - spec/fixtures/detector/smartphone-10.yml
231
- - spec/fixtures/detector/smartphone-11.yml
232
- - spec/fixtures/detector/smartphone-12.yml
233
- - spec/fixtures/detector/smartphone-13.yml
234
- - spec/fixtures/detector/smartphone-14.yml
235
- - spec/fixtures/detector/smartphone-2.yml
236
- - spec/fixtures/detector/smartphone-3.yml
237
- - spec/fixtures/detector/smartphone-4.yml
238
- - spec/fixtures/detector/smartphone-5.yml
239
- - spec/fixtures/detector/smartphone-6.yml
240
- - spec/fixtures/detector/smartphone-7.yml
241
- - spec/fixtures/detector/smartphone-8.yml
242
- - spec/fixtures/detector/smartphone-9.yml
243
- - spec/fixtures/detector/smartphone.yml
244
- - spec/fixtures/detector/tablet-1.yml
245
- - spec/fixtures/detector/tablet-2.yml
246
- - spec/fixtures/detector/tablet-3.yml
247
- - spec/fixtures/detector/tablet-4.yml
248
- - spec/fixtures/detector/tablet.yml
249
- - spec/fixtures/detector/tv.yml
250
- - spec/fixtures/detector/unknown.yml
251
- - spec/fixtures/detector/wearable.yml
252
- - spec/fixtures/device/camera.yml
253
- - spec/fixtures/device/car_browser.yml
254
- - spec/fixtures/device/console.yml
255
- - spec/fixtures/parser/oss.yml
256
- - spec/fixtures/parser/vendorfragments.yml
257
- - spec/spec_helper.rb
135
+ test_files: []
data/.gitignore DELETED
@@ -1,14 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- *.bundle
11
- *.so
12
- *.o
13
- *.a
14
- mkmf.log
data/.rubocop.yml DELETED
@@ -1,49 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.6
3
- Exclude:
4
- - 'db/schema.rb'
5
- - 'Gemfile'
6
- - 'bin/'
7
- Style/Documentation:
8
- Enabled: false
9
- Style/EmptyMethod:
10
- EnforcedStyle: expanded
11
- Style/HashEachMethods:
12
- Enabled: true
13
- Style/HashTransformKeys:
14
- Enabled: true
15
- Style/HashTransformValues:
16
- Enabled: true
17
- Style/RedundantRegexpCharacterClass:
18
- Enabled: true
19
- Style/RedundantRegexpEscape:
20
- Enabled: true
21
- Style/StructInheritance:
22
- Enabled: false
23
- Style/ExponentialNotation:
24
- Enabled: true
25
- Style/SlicingWithRange:
26
- Enabled: true
27
- Layout/EmptyLinesAroundAttributeAccessor:
28
- Enabled: true
29
- Layout/LineLength:
30
- Max: 100
31
- Layout/SpaceAroundMethodCallOperator:
32
- Enabled: true
33
- Metrics/MethodLength:
34
- Max: 15
35
- Metrics/BlockLength:
36
- Exclude:
37
- - 'Rakefile'
38
- - '**/*.rake'
39
- - 'spec/**/*.rb'
40
- Lint/DeprecatedOpenSSLConstant:
41
- Enabled: true
42
- Lint/MixedRegexpCaptureTypes:
43
- Enabled: true
44
- Lint/RedundantCopDisableDirective:
45
- Enabled: false
46
- Lint/RaiseException:
47
- Enabled: true
48
- Lint/StructNewOverride:
49
- Enabled: true
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.6.6
data/.travis.yml DELETED
@@ -1,14 +0,0 @@
1
- language: ruby
2
- dist: bionic
3
- rvm:
4
- - 2.4
5
- - 2.5
6
- - 2.6
7
- before_install:
8
- - gem update --system
9
- - gem --version
10
- - gem update bundler
11
- - bundle --version
12
- cache: bundler
13
- script:
14
- bundle exec rake test
data/Gemfile DELETED
@@ -1,8 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in device_detector.gemspec
4
- gemspec
5
-
6
- if RUBY_VERSION >= "2.0" && defined?(RUBY_ENGINE) && RUBY_ENGINE == "ruby"
7
- gem 'byebug'
8
- end
data/Rakefile DELETED
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rake'
4
- require 'rake/testtask'
5
-
6
- $LOAD_PATH.unshift 'lib'
7
- require 'device_detector'
8
-
9
- Rake::TestTask.new do |t|
10
- t.pattern = 'spec/**/*_spec.rb'
11
- t.libs.push 'spec'
12
- end
13
-
14
- task default: :test
15
-
16
- task :detectable_names do
17
- require 'date'
18
-
19
- bot_names = DeviceDetector::Bot.new('').send(:regexes)
20
- .map { |r| r[:name] }.uniq.sort_by(&:downcase)
21
- bot_names.delete('$1')
22
- client_names = DeviceDetector::Client.new('').send(:regexes)
23
- .map { |r| r[:name] }.uniq.sort_by(&:downcase)
24
- client_names.delete('$1')
25
- device = DeviceDetector::Device.new('')
26
- device_paths = device.send(:filepaths)
27
- device_regexes = device.send(:load_regexes, device_paths)
28
- device_names = device_regexes.flat_map { |dn| dn[1].keys }.uniq.sort_by(&:downcase)
29
-
30
- today = Date.today.strftime
31
-
32
- puts '## Detectable clients, bots and devices'
33
- puts
34
- puts "Updated on #{today}"
35
- puts
36
- puts '### Bots'
37
- puts
38
- puts bot_names.join(', ')
39
- puts
40
- puts '### Clients'
41
- puts
42
- puts client_names.join(', ')
43
- puts
44
- puts '### Devices'
45
- puts
46
- puts device_names.join(', ')
47
- puts
48
- end
49
-
50
- PIWIK_REPO_URL = 'https://github.com/matomo-org/device-detector'
51
- PIWIK_CHECKOUT_LOCATION = '/tmp/matomo_device_detector'
52
-
53
- def get_latest_piwik_checkout
54
- if File.exist?(PIWIK_CHECKOUT_LOCATION)
55
- system "cd #{PIWIK_CHECKOUT_LOCATION}; git reset --hard HEAD; git pull origin master"
56
- else
57
- system "git clone --depth 1 #{PIWIK_REPO_URL} #{PIWIK_CHECKOUT_LOCATION}"
58
- end
59
- end
60
-
61
- desc 'update regex database from piwik project'
62
- task :update_regexes do
63
- top = File.expand_path(__dir__)
64
- get_latest_piwik_checkout
65
- system "cp -R #{PIWIK_CHECKOUT_LOCATION}/regexes/* #{top}/regexes"
66
- end
67
-
68
- desc 'update fixtures from piwik project'
69
- task :update_fixtures do
70
- top = File.expand_path(__dir__)
71
- get_latest_piwik_checkout
72
-
73
- fixture_mappings = [
74
- { target_path: "#{top}/spec/fixtures/detector", source_path: 'Tests/fixtures/*.yml' },
75
- { target_path: "#{top}/spec/fixtures/client", source_path: 'Tests/Parser/Client/fixtures/*.yml' },
76
- { target_path: "#{top}/spec/fixtures/parser", source_path: 'Tests/Parser/fixtures/*.yml' },
77
- { target_path: "#{top}/spec/fixtures/device", source_path: 'Tests/Parser/Devices/fixtures/*.yml' }
78
- ]
79
-
80
- fixture_mappings.each do |mapping|
81
- source_path = mapping.fetch(:source_path)
82
- target_path = mapping.fetch(:target_path)
83
- system "cp -R #{PIWIK_CHECKOUT_LOCATION}/#{source_path} #{target_path}"
84
- end
85
- end
@@ -1,27 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'device_detector/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = 'device_detector'
8
- spec.version = DeviceDetector::VERSION
9
- spec.authors = ['Mati Sójka', 'Ben Zimmer']
10
- spec.email = ['yagooar@gmail.com']
11
- spec.summary = %q{Precise and fast user agent parser and device detector}
12
- spec.description = %q{Precise and fast user agent parser and device detector, backed by the largest and most up-to-date agent and device database}
13
- spec.homepage = 'http://podigee.github.io/device_detector'
14
- spec.license = 'LGPL-3.0'
15
-
16
- spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = []
18
- spec.test_files = spec.files.grep(%r{^(spec)/})
19
- spec.require_paths = ['lib']
20
-
21
- spec.required_ruby_version = '>= 1.9.3'
22
-
23
- spec.add_development_dependency 'minitest'
24
- spec.add_development_dependency 'rake'
25
- spec.add_development_dependency 'pry', '>= 0.10'
26
- spec.add_development_dependency 'rubocop', '0.85.1'
27
- end
@@ -1,30 +0,0 @@
1
- require_relative '../spec_helper'
2
-
3
- describe DeviceDetector::Bot do
4
-
5
- fixture_dir = File.expand_path('../../fixtures/parser', __FILE__)
6
- fixture_files = Dir["#{fixture_dir}/bots.yml"]
7
- fixture_files.each do |fixture_file|
8
-
9
- describe File.basename(fixture_file) do
10
-
11
- fixtures = YAML.load_file(fixture_file)
12
-
13
- fixtures.each do |f|
14
- user_agent = f["user_agent"]
15
- bot = DeviceDetector::Bot.new(user_agent)
16
-
17
- describe user_agent do
18
- it "should be a bot" do
19
- assert bot.bot?, "isn't a bot"
20
- end
21
-
22
- it "should have the expected name" do
23
- assert_equal f["bot"]["name"], bot.name, "failed bot name detection"
24
- end
25
- end
26
-
27
- end
28
- end
29
- end
30
- end
@@ -1,31 +0,0 @@
1
- require_relative '../spec_helper'
2
-
3
- describe DeviceDetector::Client do
4
-
5
- fixture_dir = File.expand_path('../../fixtures/client', __FILE__)
6
- fixture_files = Dir["#{fixture_dir}/*.yml"]
7
- fixture_files.each do |fixture_file|
8
-
9
- describe File.basename(fixture_file) do
10
-
11
- fixtures = YAML.load_file(fixture_file)
12
- fixtures.each do |f|
13
-
14
- user_agent = f["user_agent"]
15
- client = DeviceDetector::Client.new(user_agent)
16
-
17
- describe user_agent do
18
-
19
- it "should be known" do
20
- assert client.known?, "isn't known as a client"
21
- end
22
-
23
- it "should have the expected name" do
24
- assert_equal f["client"]["name"], client.name, "failed client name detection"
25
- end
26
-
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,135 +0,0 @@
1
- require_relative '../spec_helper'
2
-
3
- describe DeviceDetector do
4
-
5
- subject { DeviceDetector.new(user_agent) }
6
-
7
- alias :client :subject
8
-
9
- 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]' }
12
-
13
- describe '#device_name' do
14
-
15
- it 'returns device name' do
16
- value(client.device_name).must_equal 'iPhone 5S'
17
- end
18
-
19
- end
20
-
21
- describe '#device_type' do
22
-
23
- it 'returns the device type' do
24
- value(client.device_type).must_equal 'smartphone'
25
- end
26
-
27
- end
28
-
29
- end
30
-
31
- 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' }
34
-
35
- describe '#os_name' do
36
-
37
- it 'returns the OS name' do
38
- value(client.os_name).must_equal 'Ubuntu'
39
- end
40
-
41
- end
42
-
43
- end
44
-
45
- 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' }
48
-
49
- describe '#full_version' do
50
-
51
- it 'returns the correct OS version' do
52
- value(client.os_full_version).must_equal '10.10.1'
53
- end
54
-
55
- end
56
-
57
- end
58
-
59
- describe 'Chrome on Windows' do
60
-
61
- 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' }
64
-
65
- it 'returns the correct client name' do
66
- value(client.name).must_equal 'Chrome'
67
- end
68
-
69
- it 'recognizes the device name' do
70
- value(client.device_name).must_be_nil
71
- end
72
-
73
- it 'recognizes the device type' do
74
- value(client.device_type).must_equal "desktop"
75
- end
76
-
77
- end
78
-
79
- 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' }
82
-
83
- it 'returns the correct client name' do
84
- value(client.name).must_equal 'Chrome'
85
- end
86
-
87
- it 'recognizes the device name' do
88
- value(client.device_name).must_be_nil
89
- end
90
-
91
- it 'recognizes the device type' do
92
- value(client.device_type).must_equal "desktop"
93
- end
94
-
95
- end
96
-
97
- end
98
-
99
- 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' }
102
-
103
- it 'returns the correct client name' do
104
- value(client.name).must_equal "Android Browser"
105
- end
106
-
107
- it 'recognizes the device name' do
108
- value(client.device_name).must_equal "GALAXY S5"
109
- end
110
-
111
- it 'recognizes the device type' do
112
- value(client.device_type).must_equal "smartphone"
113
- end
114
-
115
- end
116
-
117
- 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' }
120
-
121
- it 'returns the correct client name' do
122
- value(client.name).must_equal "Android Browser"
123
- end
124
-
125
- it 'recognizes the device name' do
126
- value(client.device_name).must_equal "A398t+"
127
- end
128
-
129
- it 'recognizes the device type' do
130
- value(client.device_type).must_equal "smartphone"
131
- end
132
-
133
- end
134
-
135
- end
@@ -1,100 +0,0 @@
1
- require_relative '../spec_helper'
2
-
3
- describe DeviceDetector do
4
-
5
- fixture_dir = File.expand_path('../../fixtures/detector', __FILE__)
6
- fixture_files = Dir["#{fixture_dir}/*.yml"]
7
- fixture_files.each do |fixture_file|
8
-
9
- describe File.basename(fixture_file) do
10
-
11
- fixtures = nil
12
- begin
13
- fixtures = YAML.load(File.read(fixture_file))
14
- rescue Psych::SyntaxError => e
15
- fail "Failed to parse #{fixture_file}, reason: #{e}"
16
- end
17
-
18
- def str_or_nil(string)
19
- return nil if string == ''
20
- string
21
- end
22
-
23
- fixtures.each do |f|
24
-
25
- user_agent = f["user_agent"]
26
- detector = DeviceDetector.new(user_agent)
27
- os = detector.send(:os)
28
-
29
- describe user_agent do
30
- it "should be detected" do
31
- if detector.bot?
32
- assert_equal str_or_nil(f["bot"]["name"]), detector.bot_name, "failed bot name detection"
33
- else
34
- if f["client"]
35
- assert_equal str_or_nil(f["client"]["name"]), detector.name, "failed client name detection"
36
- end
37
-
38
- os_family = str_or_nil(f["os_family"])
39
- if os_family != "Unknown"
40
- if os_family.nil?
41
- assert_nil os.family, "failed os family detection"
42
- else
43
- assert_equal os_family, os.family, "failed os family detection"
44
- end
45
-
46
- name = str_or_nil(f["os"]["name"])
47
- if name.nil?
48
- assert_nil os.name, "failed os name detection"
49
- else
50
- assert_equal name, os.name, "failed os name detection"
51
- end
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"
58
- end
59
-
60
- os_version = str_or_nil(f["os"]["version"])
61
- if os_version.nil?
62
- assert_nil os.full_version, "failed os version detection"
63
- else
64
- assert_equal os_version, os.full_version, "failed os version detection"
65
- end
66
- end
67
- if f["device"]
68
- expected_type = str_or_nil(f["device"]["type"])
69
- actual_type = detector.device_type
70
-
71
- if expected_type != actual_type
72
- # puts "\n", f.inspect, expected_type, actual_type, detector.device_name, regex_meta.inspect
73
- # debugger
74
- # detector.device_type
75
- end
76
- if expected_type.nil?
77
- assert_nil actual_type, "failed device type detection"
78
- else
79
- assert_equal expected_type, actual_type, "failed device type detection"
80
- end
81
-
82
- model = str_or_nil(f["device"]["model"])
83
- model = model.to_s unless model.nil?
84
-
85
- if model.nil?
86
- assert_nil detector.device_name, "failed device name detection"
87
- else
88
- assert_equal model, detector.device_name, "failed device name detection"
89
- end
90
- end
91
- end
92
- end
93
- end
94
- end
95
-
96
- end
97
-
98
- end
99
-
100
- end