fake_useragent 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,52 @@
1
+ [
2
+ "A1-713HD Build/KOT49H",
3
+ "A3-A30 Build/LRX22G",
4
+ "Archos 80 Helium 4G Build/JLS36C",
5
+ "BTV-DL09 Build/HUAWEIBEETHOVEN-DL09",
6
+ "FDR-A01L Build/HuaweiMediaPad",
7
+ "HUAWEI M2-A01L Build/HUAWEIM2-A01L",
8
+ "Lenovo A3500-H Build/KOT49H",
9
+ "Lenovo A3500-HV Build/KOT49H",
10
+ "Lenovo A5500-F Build/KOT49H",
11
+ "Lenovo A5500-H Build/KOT49H",
12
+ "Lenovo A7600-H Build/KOT49H",
13
+ "Lenovo TAB 2 A10-70L Build/KTU84P",
14
+ "Lenovo TAB 2 A8-50LC Build/LMY47D",
15
+ "Lenovo TAB 2 A8-50LC Build/LRX22G",
16
+ "MediaPad T1 8.0 Build/HuaweiMediaPad",
17
+ "Nexus 9 Build/MOB30M",
18
+ "Nexus 9 Build/NRD91N",
19
+ "SAMSUNG SM-T805 Build/LRX22G",
20
+ "SAMSUNG SM-T815Y Build/MMB29K",
21
+ "SGP771 Build/28.0.A.8.260",
22
+ "SM-P901 Build/KOT49H",
23
+ "SM-T110 Build/JDQ39",
24
+ "SM-T113 Build/KTU84P",
25
+ "SM-T116 Build/KTU84P",
26
+ "SM-T116BU Build/KTU84P",
27
+ "SM-T230 Build/KOT49H",
28
+ "SM-T231 Build/KOT49H",
29
+ "SM-T235 Build/LMY47X",
30
+ "SM-T325 Build/KOT49H",
31
+ "SM-T331 Build/LMY47X",
32
+ "SM-T365 Build/LMY47X",
33
+ "SM-T525 Build/KOT49H",
34
+ "SM-T530 Build/KOT49H",
35
+ "SM-T530 Build/LRX22G",
36
+ "SM-T531 Build/KOT49H",
37
+ "SM-T535 Build/KOT49H",
38
+ "SM-T555 Build/LRX22G",
39
+ "SM-T560 Build/KTU84P",
40
+ "SM-T561 Build/KTU84P",
41
+ "SM-T700 Build/LRX22G",
42
+ "SM-T705 Build/LRX22G",
43
+ "SM-T710 Build/LRX22G",
44
+ "SM-T715 Build/MMB29K",
45
+ "SM-T719 Build/MMB29M",
46
+ "SM-T800 Build/MMB29K",
47
+ "SM-T805 Build/KOT49H",
48
+ "SM-T813 Build/MMB29M",
49
+ "T1-701u Build/HuaweiMediaPad",
50
+ "X1 7.0 Build/HuaweiMediaPad",
51
+ "YOGA Tablet 2 Pro-1380F Build/LRX22C"
52
+ ]
@@ -0,0 +1,8 @@
1
+ require 'json'
2
+
3
+ SMARTPHONE_DEV_IDS = JSON.parse(
4
+ File.read(File.join(File.dirname(File.absolute_path(__FILE__)), 'data/smartphone_dev_id.json'))
5
+ )
6
+ TABLET_DEV_IDS = JSON.parse(
7
+ File.read(File.join(File.dirname(File.absolute_path(__FILE__)), 'data/tablet_dev_id.json'))
8
+ )
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ public
4
+
5
+ class UserAgentError < RuntimeError
6
+ def initialize(msg = nil)
7
+ super
8
+ end
9
+ end
10
+
11
+ class InvalidOption < RuntimeError
12
+ def initialize(msg = nil)
13
+ super
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,240 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest/autorun'
4
+ require './lib/fake_useragent'
5
+ require './lib/fake_useragent/error'
6
+
7
+ class TestSuite < Minitest::Test
8
+ def test_platform
9
+ 50.times do
10
+ assert_includes(generate_user_agent(os: 'linux'), 'Linux', 'Linux not in `ua`, where os: `linux`')
11
+ assert_includes(generate_user_agent(os: 'win'), 'Windows', 'Windows not in `ua`, where os: `win`')
12
+ assert_includes(generate_user_agent(os: 'mac'), 'Mac', 'Mac not in `ua`, where os: `mac`')
13
+ end
14
+ end
15
+
16
+ def test_invalid_platform
17
+ assert_raises(InvalidOption) { generate_user_agent(os: 11) }
18
+ assert_raises(InvalidOption) { generate_user_agent(os: 'minecraft') }
19
+ assert_raises(InvalidOption) { generate_user_agent(os: 'Putin, Sabaton, win') }
20
+ end
21
+
22
+ def test_navigator
23
+ 50.times do
24
+ assert_includes(generate_user_agent(navigator: 'firefox'), 'Firefox', 'Firefox not in `ua`, where navigator: `firefox`')
25
+ assert_includes(generate_user_agent(navigator: 'chrome'), 'Chrome', 'Chrome not in `ua`, where navigator: `chrome`')
26
+ # not passing
27
+ agent = generate_user_agent(navigator: 'ie')
28
+ assert((agent.include? 'MSIE') || (agent.include? 'rv:11'))
29
+ end
30
+ end
31
+
32
+ def test_invalid_navigator
33
+ assert_raises(InvalidOption) { generate_user_agent(navigator: 'win') }
34
+ assert_raises(InvalidOption) { generate_user_agent(navigator: 'linux, mac') }
35
+ end
36
+
37
+ def test_invalid_navigator_array
38
+ 50.times do
39
+ generate_user_agent(navigator: %w[firefox])
40
+ generate_user_agent(navigator: %w[firefox chrome])
41
+ generate_user_agent(navigator: %w[firefox chrome ie])
42
+ end
43
+ end
44
+
45
+ def test_platform_array
46
+ 50.times do
47
+ generate_user_agent(os: %w[win linux mac])
48
+ generate_user_agent(os: %w[mac])
49
+ generate_user_agent(os: %w[win linux])
50
+ generate_user_agent(os: %w[linux])
51
+ generate_user_agent(os: %w[win])
52
+ end
53
+ end
54
+
55
+ def test_platform_navigator
56
+ 50.times do
57
+ agent = generate_user_agent(os: 'win', navigator: 'firefox')
58
+ assert((agent.include? 'Firefox') && (agent.include? 'Windows'))
59
+ agent = generate_user_agent(os: 'win', navigator: 'chrome')
60
+ assert((agent.include? 'Chrome') && (agent.include? 'Windows'))
61
+ agent = generate_user_agent(os: 'win', navigator: 'ie')
62
+ assert((agent.include? 'MSIE') || (agent.include? 'rv:11'))
63
+ end
64
+ end
65
+
66
+ def test_platform_linux
67
+ 50.times do
68
+ assert(generate_user_agent(os: 'linux').start_with?('Mozilla/5.0 (X11;'))
69
+ end
70
+ end
71
+
72
+ def test_mac_chrome
73
+ 50.times do
74
+ agent = generate_user_agent(os: 'mac', navigator: 'chrome')
75
+ assert(!agent.match(/OS X \d+_\d+_\d+/).to_a.empty?)
76
+ end
77
+ end
78
+
79
+ def test_impossible_combination
80
+ 50.times do
81
+ assert_raises(InvalidOption) { generate_user_agent(os: 'linux', navigator: 'ie') }
82
+ assert_raises(InvalidOption) { generate_user_agent(os: 'mac', navigator: 'ie') }
83
+ end
84
+ end
85
+
86
+ def test_generate_navigator_js
87
+ 50.times do
88
+ navigator = generate_navigator_js
89
+ assert navigator.keys == %w[appCodeName appName appVersion platform userAgent oscpu product productSub vendor vendorSub buildID]
90
+ assert navigator['appCodeName'] == 'Mozilla'
91
+ assert ['Netscape', 'Microsoft Internet Explorer'].include? navigator['appName']
92
+ end
93
+ end
94
+
95
+ def test_data_integrity
96
+ 50.times do
97
+ navigator = generate_navigator
98
+ navigator.each_value do |value|
99
+ assert(value.nil? || (value.instance_of? String))
100
+ end
101
+ end
102
+ end
103
+
104
+ def test_feature_platform
105
+ 50.times do
106
+ nav = generate_navigator(os: 'win')
107
+ assert nav['platform'].include? 'Win'
108
+ nav = generate_navigator(os: 'linux')
109
+ assert nav['platform'].include? 'Linux'
110
+ nav = generate_navigator(os: 'mac')
111
+ assert nav['platform'].include? 'MacIntel'
112
+ end
113
+ end
114
+
115
+ def test_feature_os_cpu
116
+ 10.times do
117
+ nav = generate_navigator(os: 'win')
118
+ assert nav['os_cpu'].include? 'Windows NT'
119
+ nav = generate_navigator(os: 'linux')
120
+ assert nav['os_cpu'].include? 'Linux'
121
+ nav = generate_navigator(os: 'mac')
122
+ assert nav['os_cpu'].include? 'Mac OS'
123
+ end
124
+ end
125
+
126
+ def test_chrome_app_version
127
+ 50.times do
128
+ nav = generate_navigator_js(navigator: 'chrome')
129
+ assert(("Mozilla/#{nav['appVersion']}") == nav['userAgent'])
130
+ end
131
+ end
132
+
133
+ def test_feature_product
134
+ 50.times do
135
+ assert generate_navigator_js(navigator: 'chrome')['product'] == 'Gecko'
136
+ end
137
+ end
138
+
139
+ def test_feature_vendor
140
+ 50.times do
141
+ assert generate_navigator_js(navigator: 'chrome')['vendor'] == 'Google Inc.'
142
+ assert generate_navigator_js(navigator: 'firefox')['vendor'] == ''
143
+ assert generate_navigator_js(navigator: 'ie')['vendor'] == ''
144
+ end
145
+ end
146
+
147
+ def test_feature_vendor_sub
148
+ 50.times do
149
+ assert generate_navigator_js(navigator: 'chrome')['vendorSub'] == ''
150
+ end
151
+ end
152
+
153
+ def test_build_id_no_firefox
154
+ 50.times do
155
+ nav = generate_navigator(navigator: 'chrome')
156
+ assert nav['build_id'] == ''
157
+ nav = generate_navigator(navigator: 'ie')
158
+ assert nav['build_id'] == ''
159
+ end
160
+ end
161
+
162
+ def test_build_id_firefox
163
+ original_ff_version = FIREFOX_VERSION.clone
164
+ FIREFOX_VERSION.replace [
165
+ ['49.0', Time.new(2016, 9, 20)],
166
+ ['50.0', Time.new(2016, 11, 15)]
167
+ ].freeze
168
+ begin
169
+ 50.times do
170
+ nav = generate_navigator(navigator: 'firefox')
171
+ assert nav['build_id'].length == 14
172
+ if nav['user_agent'].include? '50.0'
173
+ assert nav['build_id'].start_with? '20161115'
174
+ else
175
+ time_ = Time.at(nav['build_id'].to_i)
176
+ assert Time.new(2016, 9, 20, 0) <= time_
177
+ end
178
+ end
179
+ ensure
180
+ FIREFOX_VERSION.replace original_ff_version
181
+ end
182
+ end
183
+
184
+ def test_android_firefox
185
+ 50.times do
186
+ nav = generate_navigator_js(os: 'android', navigator: 'firefox')
187
+ assert nav['platform'].include? 'armv'
188
+ assert nav['oscpu'].include? 'Linux armv'
189
+ assert nav['appVersion'].include? 'Android'
190
+ assert nav['userAgent'].split('(')[1].split(')')[0].include? 'Android'
191
+ end
192
+ end
193
+
194
+ def test_device_type
195
+ 50.times do
196
+ agent = generate_user_agent(device_type: 'smartphone')
197
+ assert agent.include? 'Android'
198
+ assert (agent.include? 'Firefox') || (agent.include? 'Chrome')
199
+ end
200
+ end
201
+
202
+ def test_invalid_device_type
203
+ 50.times do
204
+ assert_raises(InvalidOption) { generate_user_agent(device_type: 'computer') }
205
+ end
206
+ end
207
+
208
+ def invalid_device_type_with_os
209
+ 50.times do
210
+ assert_raises(InvalidOption) { generate_user_agent(os: 'win', device_type: 'smartphone') }
211
+ end
212
+ end
213
+
214
+ def invalid_dev_type_with_nav
215
+ 50.times do
216
+ assert_raises(InvalidOption) { generate_user_agent(device_type: 'smartphone', navigator: 'ie') }
217
+ end
218
+ end
219
+
220
+ def default_device_without_os
221
+ 50.times do
222
+ assert_not_include(generate_user_agent, 'Android')
223
+ # if os is default then device_type is 'desktop'
224
+ end
225
+ end
226
+
227
+ def all_device_types
228
+ 50.times do
229
+ generate_user_agent(device_type: 'all')
230
+ generate_user_agent(device_type: 'all', navigator: 'ie')
231
+ end
232
+ end
233
+
234
+ def dev_type_smartphone_chrome
235
+ 50.times do
236
+ assert_includes(generate_user_agent(device_type: 'smartphone', navigator: 'chrome'), 'Mobile')
237
+ assert_includes(generate_user_agent(device_type: 'tablet', navigator: 'chrome'), 'Mobile')
238
+ end
239
+ end
240
+ end
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fake_useragent
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Bokanov Alexander
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-04-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Simple gem for generating valid web user agents.
14
+ email: overhead.nerves@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - ".github/workflows/ruby.yml"
20
+ - ".gitignore"
21
+ - Gemfile
22
+ - LICENSE
23
+ - README.md
24
+ - Rakefile
25
+ - fake_useragent.gemspec
26
+ - lib/fake_useragent.rb
27
+ - lib/fake_useragent/data/smartphone_dev_ext.json
28
+ - lib/fake_useragent/data/smartphone_dev_id.json
29
+ - lib/fake_useragent/data/tablet_dev_ext.json
30
+ - lib/fake_useragent/data/tablet_dev_id.json
31
+ - lib/fake_useragent/device.rb
32
+ - lib/fake_useragent/error.rb
33
+ - lib/fake_useragent/version.rb
34
+ - spec/lib/test_fake_useragent.rb
35
+ homepage: https://github.com/TRT360/fake_useragent
36
+ licenses:
37
+ - MIT
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubygems_version: 3.1.4
55
+ signing_key:
56
+ specification_version: 4
57
+ summary: FakeUserAgent - simple gem for generating valid web user agents.
58
+ test_files: []