device_detector 1.0.3 → 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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +15 -0
- data/README.md +8 -7
- data/lib/device_detector/bot.rb +2 -2
- data/lib/device_detector/browser.rb +364 -0
- data/lib/device_detector/client.rb +11 -2
- data/lib/device_detector/device.rb +1247 -22
- data/lib/device_detector/memory_cache.rb +5 -5
- data/lib/device_detector/metadata_extractor.rb +7 -8
- data/lib/device_detector/model_extractor.rb +3 -3
- data/lib/device_detector/name_extractor.rb +2 -2
- data/lib/device_detector/os.rb +150 -116
- data/lib/device_detector/parser.rb +23 -10
- data/lib/device_detector/version.rb +1 -1
- data/lib/device_detector/version_extractor.rb +29 -2
- data/lib/device_detector.rb +73 -40
- data/regexes/bots.yml +868 -62
- data/regexes/client/browser_engine.yml +11 -2
- data/regexes/client/browsers.yml +1132 -112
- data/regexes/client/feed_readers.yml +5 -11
- data/regexes/client/libraries.yml +86 -2
- data/regexes/client/mediaplayers.yml +39 -3
- data/regexes/client/mobile_apps.yml +940 -66
- data/regexes/client/pim.yml +66 -3
- data/regexes/device/cameras.yml +6 -6
- data/regexes/device/car_browsers.yml +23 -3
- data/regexes/device/consoles.yml +15 -3
- data/regexes/device/mobiles.yml +18351 -3566
- data/regexes/device/notebooks.yml +114 -0
- data/regexes/device/portable_media_player.yml +36 -9
- data/regexes/device/shell_tv.yml +117 -0
- data/regexes/device/televisions.yml +440 -35
- data/regexes/oss.yml +635 -284
- data/regexes/vendorfragments.yml +5 -1
- metadata +21 -118
- data/.gitignore +0 -14
- data/.travis.yml +0 -14
- data/Gemfile +0 -8
- data/Rakefile +0 -96
- data/device_detector.gemspec +0 -26
- data/spec/device_detector/bot_fixtures_spec.rb +0 -30
- data/spec/device_detector/client_fixtures_spec.rb +0 -31
- data/spec/device_detector/concrete_user_agent_spec.rb +0 -135
- data/spec/device_detector/detector_fixtures_spec.rb +0 -100
- data/spec/device_detector/device_fixtures_spec.rb +0 -36
- data/spec/device_detector/device_spec.rb +0 -151
- data/spec/device_detector/memory_cache_spec.rb +0 -148
- data/spec/device_detector/model_extractor_spec.rb +0 -63
- data/spec/device_detector/os_fixtures_spec.rb +0 -26
- data/spec/device_detector/version_extractor_spec.rb +0 -79
- data/spec/device_detector_spec.rb +0 -189
- data/spec/fixtures/client/browser.yml +0 -2206
- data/spec/fixtures/client/feed_reader.yml +0 -199
- data/spec/fixtures/client/library.yml +0 -175
- data/spec/fixtures/client/mediaplayer.yml +0 -163
- data/spec/fixtures/client/mobile_app.yml +0 -193
- data/spec/fixtures/client/pim.yml +0 -115
- data/spec/fixtures/detector/bots.yml +0 -3260
- data/spec/fixtures/detector/camera.yml +0 -121
- data/spec/fixtures/detector/car_browser.yml +0 -21
- data/spec/fixtures/detector/console.yml +0 -281
- data/spec/fixtures/detector/desktop.yml +0 -5361
- data/spec/fixtures/detector/feature_phone.yml +0 -891
- data/spec/fixtures/detector/feed_reader.yml +0 -551
- data/spec/fixtures/detector/mediaplayer.yml +0 -210
- data/spec/fixtures/detector/mobile_apps.yml +0 -456
- data/spec/fixtures/detector/phablet.yml +0 -3785
- data/spec/fixtures/detector/portable_media_player.yml +0 -178
- data/spec/fixtures/detector/smart_display.yml +0 -61
- data/spec/fixtures/detector/smartphone-1.yml +0 -9953
- data/spec/fixtures/detector/smartphone-10.yml +0 -9924
- data/spec/fixtures/detector/smartphone-11.yml +0 -9889
- data/spec/fixtures/detector/smartphone-12.yml +0 -8655
- data/spec/fixtures/detector/smartphone-2.yml +0 -9967
- data/spec/fixtures/detector/smartphone-3.yml +0 -9887
- data/spec/fixtures/detector/smartphone-4.yml +0 -9911
- data/spec/fixtures/detector/smartphone-5.yml +0 -9933
- data/spec/fixtures/detector/smartphone-6.yml +0 -9923
- data/spec/fixtures/detector/smartphone-7.yml +0 -9892
- data/spec/fixtures/detector/smartphone-8.yml +0 -9896
- data/spec/fixtures/detector/smartphone-9.yml +0 -9928
- data/spec/fixtures/detector/smartphone.yml +0 -9984
- data/spec/fixtures/detector/tablet-1.yml +0 -10023
- data/spec/fixtures/detector/tablet-2.yml +0 -9968
- data/spec/fixtures/detector/tablet-3.yml +0 -7787
- data/spec/fixtures/detector/tablet.yml +0 -9951
- data/spec/fixtures/detector/tv.yml +0 -3333
- data/spec/fixtures/detector/unknown.yml +0 -3283
- data/spec/fixtures/device/camera.yml +0 -19
- data/spec/fixtures/device/car_browser.yml +0 -7
- data/spec/fixtures/device/console.yml +0 -79
- data/spec/fixtures/parser/oss.yml +0 -1047
- data/spec/fixtures/parser/vendorfragments.yml +0 -162
- data/spec/spec_helper.rb +0 -9
data/regexes/vendorfragments.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
###############
|
2
2
|
# Device Detector - The Universal Device Detection library for parsing User Agents
|
3
3
|
#
|
4
|
-
# @link
|
4
|
+
# @link https://matomo.org
|
5
5
|
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
6
6
|
###############
|
7
7
|
|
@@ -69,3 +69,7 @@ HP:
|
|
69
69
|
|
70
70
|
Hyrican:
|
71
71
|
- 'MANM(JS)?'
|
72
|
+
|
73
|
+
Ordissimo:
|
74
|
+
- 'Ordissimo'
|
75
|
+
- 'webissimo3'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: device_detector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mati Sójka
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -53,6 +53,20 @@ dependencies:
|
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0.10'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rubocop
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - '='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.85.1
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.85.1
|
56
70
|
description: Precise and fast user agent parser and device detector, backed by the
|
57
71
|
largest and most up-to-date agent and device database
|
58
72
|
email:
|
@@ -61,16 +75,12 @@ executables: []
|
|
61
75
|
extensions: []
|
62
76
|
extra_rdoc_files: []
|
63
77
|
files:
|
64
|
-
- ".gitignore"
|
65
|
-
- ".travis.yml"
|
66
78
|
- CHANGELOG.md
|
67
|
-
- Gemfile
|
68
79
|
- LICENSE.txt
|
69
80
|
- README.md
|
70
|
-
- Rakefile
|
71
|
-
- device_detector.gemspec
|
72
81
|
- lib/device_detector.rb
|
73
82
|
- lib/device_detector/bot.rb
|
83
|
+
- lib/device_detector/browser.rb
|
74
84
|
- lib/device_detector/client.rb
|
75
85
|
- lib/device_detector/device.rb
|
76
86
|
- lib/device_detector/memory_cache.rb
|
@@ -93,64 +103,12 @@ files:
|
|
93
103
|
- regexes/device/car_browsers.yml
|
94
104
|
- regexes/device/consoles.yml
|
95
105
|
- regexes/device/mobiles.yml
|
106
|
+
- regexes/device/notebooks.yml
|
96
107
|
- regexes/device/portable_media_player.yml
|
108
|
+
- regexes/device/shell_tv.yml
|
97
109
|
- regexes/device/televisions.yml
|
98
110
|
- regexes/oss.yml
|
99
111
|
- regexes/vendorfragments.yml
|
100
|
-
- spec/device_detector/bot_fixtures_spec.rb
|
101
|
-
- spec/device_detector/client_fixtures_spec.rb
|
102
|
-
- spec/device_detector/concrete_user_agent_spec.rb
|
103
|
-
- spec/device_detector/detector_fixtures_spec.rb
|
104
|
-
- spec/device_detector/device_fixtures_spec.rb
|
105
|
-
- spec/device_detector/device_spec.rb
|
106
|
-
- spec/device_detector/memory_cache_spec.rb
|
107
|
-
- spec/device_detector/model_extractor_spec.rb
|
108
|
-
- spec/device_detector/os_fixtures_spec.rb
|
109
|
-
- spec/device_detector/version_extractor_spec.rb
|
110
|
-
- spec/device_detector_spec.rb
|
111
|
-
- spec/fixtures/client/browser.yml
|
112
|
-
- spec/fixtures/client/feed_reader.yml
|
113
|
-
- spec/fixtures/client/library.yml
|
114
|
-
- spec/fixtures/client/mediaplayer.yml
|
115
|
-
- spec/fixtures/client/mobile_app.yml
|
116
|
-
- spec/fixtures/client/pim.yml
|
117
|
-
- spec/fixtures/detector/bots.yml
|
118
|
-
- spec/fixtures/detector/camera.yml
|
119
|
-
- spec/fixtures/detector/car_browser.yml
|
120
|
-
- spec/fixtures/detector/console.yml
|
121
|
-
- spec/fixtures/detector/desktop.yml
|
122
|
-
- spec/fixtures/detector/feature_phone.yml
|
123
|
-
- spec/fixtures/detector/feed_reader.yml
|
124
|
-
- spec/fixtures/detector/mediaplayer.yml
|
125
|
-
- spec/fixtures/detector/mobile_apps.yml
|
126
|
-
- spec/fixtures/detector/phablet.yml
|
127
|
-
- spec/fixtures/detector/portable_media_player.yml
|
128
|
-
- spec/fixtures/detector/smart_display.yml
|
129
|
-
- spec/fixtures/detector/smartphone-1.yml
|
130
|
-
- spec/fixtures/detector/smartphone-10.yml
|
131
|
-
- spec/fixtures/detector/smartphone-11.yml
|
132
|
-
- spec/fixtures/detector/smartphone-12.yml
|
133
|
-
- spec/fixtures/detector/smartphone-2.yml
|
134
|
-
- spec/fixtures/detector/smartphone-3.yml
|
135
|
-
- spec/fixtures/detector/smartphone-4.yml
|
136
|
-
- spec/fixtures/detector/smartphone-5.yml
|
137
|
-
- spec/fixtures/detector/smartphone-6.yml
|
138
|
-
- spec/fixtures/detector/smartphone-7.yml
|
139
|
-
- spec/fixtures/detector/smartphone-8.yml
|
140
|
-
- spec/fixtures/detector/smartphone-9.yml
|
141
|
-
- spec/fixtures/detector/smartphone.yml
|
142
|
-
- spec/fixtures/detector/tablet-1.yml
|
143
|
-
- spec/fixtures/detector/tablet-2.yml
|
144
|
-
- spec/fixtures/detector/tablet-3.yml
|
145
|
-
- spec/fixtures/detector/tablet.yml
|
146
|
-
- spec/fixtures/detector/tv.yml
|
147
|
-
- spec/fixtures/detector/unknown.yml
|
148
|
-
- spec/fixtures/device/camera.yml
|
149
|
-
- spec/fixtures/device/car_browser.yml
|
150
|
-
- spec/fixtures/device/console.yml
|
151
|
-
- spec/fixtures/parser/oss.yml
|
152
|
-
- spec/fixtures/parser/vendorfragments.yml
|
153
|
-
- spec/spec_helper.rb
|
154
112
|
homepage: http://podigee.github.io/device_detector
|
155
113
|
licenses:
|
156
114
|
- LGPL-3.0
|
@@ -170,63 +128,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
128
|
- !ruby/object:Gem::Version
|
171
129
|
version: '0'
|
172
130
|
requirements: []
|
173
|
-
|
174
|
-
rubygems_version: 2.5.1
|
131
|
+
rubygems_version: 3.0.3
|
175
132
|
signing_key:
|
176
133
|
specification_version: 4
|
177
134
|
summary: Precise and fast user agent parser and device detector
|
178
|
-
test_files:
|
179
|
-
- spec/device_detector/bot_fixtures_spec.rb
|
180
|
-
- spec/device_detector/client_fixtures_spec.rb
|
181
|
-
- spec/device_detector/concrete_user_agent_spec.rb
|
182
|
-
- spec/device_detector/detector_fixtures_spec.rb
|
183
|
-
- spec/device_detector/device_fixtures_spec.rb
|
184
|
-
- spec/device_detector/device_spec.rb
|
185
|
-
- spec/device_detector/memory_cache_spec.rb
|
186
|
-
- spec/device_detector/model_extractor_spec.rb
|
187
|
-
- spec/device_detector/os_fixtures_spec.rb
|
188
|
-
- spec/device_detector/version_extractor_spec.rb
|
189
|
-
- spec/device_detector_spec.rb
|
190
|
-
- spec/fixtures/client/browser.yml
|
191
|
-
- spec/fixtures/client/feed_reader.yml
|
192
|
-
- spec/fixtures/client/library.yml
|
193
|
-
- spec/fixtures/client/mediaplayer.yml
|
194
|
-
- spec/fixtures/client/mobile_app.yml
|
195
|
-
- spec/fixtures/client/pim.yml
|
196
|
-
- spec/fixtures/detector/bots.yml
|
197
|
-
- spec/fixtures/detector/camera.yml
|
198
|
-
- spec/fixtures/detector/car_browser.yml
|
199
|
-
- spec/fixtures/detector/console.yml
|
200
|
-
- spec/fixtures/detector/desktop.yml
|
201
|
-
- spec/fixtures/detector/feature_phone.yml
|
202
|
-
- spec/fixtures/detector/feed_reader.yml
|
203
|
-
- spec/fixtures/detector/mediaplayer.yml
|
204
|
-
- spec/fixtures/detector/mobile_apps.yml
|
205
|
-
- spec/fixtures/detector/phablet.yml
|
206
|
-
- spec/fixtures/detector/portable_media_player.yml
|
207
|
-
- spec/fixtures/detector/smart_display.yml
|
208
|
-
- spec/fixtures/detector/smartphone-1.yml
|
209
|
-
- spec/fixtures/detector/smartphone-10.yml
|
210
|
-
- spec/fixtures/detector/smartphone-11.yml
|
211
|
-
- spec/fixtures/detector/smartphone-12.yml
|
212
|
-
- spec/fixtures/detector/smartphone-2.yml
|
213
|
-
- spec/fixtures/detector/smartphone-3.yml
|
214
|
-
- spec/fixtures/detector/smartphone-4.yml
|
215
|
-
- spec/fixtures/detector/smartphone-5.yml
|
216
|
-
- spec/fixtures/detector/smartphone-6.yml
|
217
|
-
- spec/fixtures/detector/smartphone-7.yml
|
218
|
-
- spec/fixtures/detector/smartphone-8.yml
|
219
|
-
- spec/fixtures/detector/smartphone-9.yml
|
220
|
-
- spec/fixtures/detector/smartphone.yml
|
221
|
-
- spec/fixtures/detector/tablet-1.yml
|
222
|
-
- spec/fixtures/detector/tablet-2.yml
|
223
|
-
- spec/fixtures/detector/tablet-3.yml
|
224
|
-
- spec/fixtures/detector/tablet.yml
|
225
|
-
- spec/fixtures/detector/tv.yml
|
226
|
-
- spec/fixtures/detector/unknown.yml
|
227
|
-
- spec/fixtures/device/camera.yml
|
228
|
-
- spec/fixtures/device/car_browser.yml
|
229
|
-
- spec/fixtures/device/console.yml
|
230
|
-
- spec/fixtures/parser/oss.yml
|
231
|
-
- spec/fixtures/parser/vendorfragments.yml
|
232
|
-
- spec/spec_helper.rb
|
135
|
+
test_files: []
|
data/.gitignore
DELETED
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1,96 +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).map { |r| r[:name] }.uniq.sort_by(&:downcase)
|
20
|
-
bot_names.delete('$1')
|
21
|
-
client_names = DeviceDetector::Client.new.send(:regexes).map { |r| r[:name] }.uniq.sort_by(&:downcase)
|
22
|
-
client_names.delete('$1')
|
23
|
-
device = DeviceDetector::Device.new
|
24
|
-
device_paths = device.send(:filepaths)
|
25
|
-
device_regexes = device.send(:load_regexes, device_paths)
|
26
|
-
device_names = device_regexes.flat_map { |dn| dn[1].keys }.uniq.sort_by(&:downcase)
|
27
|
-
|
28
|
-
today = Date.today.strftime
|
29
|
-
|
30
|
-
puts '## Detectable clients, bots and devices'
|
31
|
-
puts
|
32
|
-
puts "Updated on #{today}"
|
33
|
-
puts
|
34
|
-
puts '### Bots'
|
35
|
-
puts
|
36
|
-
puts bot_names.join(', ')
|
37
|
-
puts
|
38
|
-
puts '### Clients'
|
39
|
-
puts
|
40
|
-
puts client_names.join(', ')
|
41
|
-
puts
|
42
|
-
puts '### Devices'
|
43
|
-
puts
|
44
|
-
puts device_names.join(', ')
|
45
|
-
puts
|
46
|
-
end
|
47
|
-
|
48
|
-
PIWIK_REPO_URL = 'https://github.com/matomo-org/device-detector'
|
49
|
-
PIWIK_CHECKOUT_LOCATION = '/tmp/matomo_device_detector'
|
50
|
-
|
51
|
-
def get_latest_piwik_checkout
|
52
|
-
if File.exist?(PIWIK_CHECKOUT_LOCATION)
|
53
|
-
system "cd #{PIWIK_CHECKOUT_LOCATION}; git reset --hard HEAD; git pull origin master"
|
54
|
-
else
|
55
|
-
system "git clone --depth 1 #{PIWIK_REPO_URL} #{PIWIK_CHECKOUT_LOCATION}"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
desc 'update regex database from piwik project'
|
60
|
-
task :update_regexes do
|
61
|
-
top = File.expand_path(__dir__)
|
62
|
-
get_latest_piwik_checkout
|
63
|
-
system "cp -R #{PIWIK_CHECKOUT_LOCATION}/regexes/* #{top}/regexes"
|
64
|
-
end
|
65
|
-
|
66
|
-
desc 'fix regexes that are broken because of a bug in ruby'
|
67
|
-
task :fix_regexes do
|
68
|
-
# fix broken regexes: https://github.com/podigee/device_detector/issues/65
|
69
|
-
|
70
|
-
# modify regex to bypass ruby bug
|
71
|
-
system "sed -i '' 's/\|ImSmart \|ERGO \|X-Style Tab //g' regexes/device/mobiles.yml"
|
72
|
-
|
73
|
-
# remove fixtures that test that regex
|
74
|
-
system "sed -i '' '/X-Style Tab A101/,/^-/{d;};' spec/fixtures/**/*.yml"
|
75
|
-
system "sed -i '' '/ERGO A500 Best Build/,/^-/{d;};' spec/fixtures/**/*.yml"
|
76
|
-
system "sed -i '' '/ImSmart A501 Build.KOT49H/,/^-/{d;};' spec/fixtures/**/*.yml"
|
77
|
-
end
|
78
|
-
|
79
|
-
desc 'update fixtures from piwik project'
|
80
|
-
task :update_fixtures do
|
81
|
-
top = File.expand_path(__dir__)
|
82
|
-
get_latest_piwik_checkout
|
83
|
-
|
84
|
-
fixture_mappings = [
|
85
|
-
{ target_path: "#{top}/spec/fixtures/detector", source_path: 'Tests/fixtures/*.yml' },
|
86
|
-
{ target_path: "#{top}/spec/fixtures/client", source_path: 'Tests/Parser/Client/fixtures/*.yml' },
|
87
|
-
{ target_path: "#{top}/spec/fixtures/parser", source_path: 'Tests/Parser/fixtures/*.yml' },
|
88
|
-
{ target_path: "#{top}/spec/fixtures/device", source_path: 'Tests/Parser/Devices/fixtures/*.yml' }
|
89
|
-
]
|
90
|
-
|
91
|
-
fixture_mappings.each do |mapping|
|
92
|
-
source_path = mapping.fetch(:source_path)
|
93
|
-
target_path = mapping.fetch(:target_path)
|
94
|
-
system "cp -R #{PIWIK_CHECKOUT_LOCATION}/#{source_path} #{target_path}"
|
95
|
-
end
|
96
|
-
end
|
data/device_detector.gemspec
DELETED
@@ -1,26 +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
|
-
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
|