useragent_parser 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -183,6 +183,10 @@ user_agent_parsers:
183
183
  - regex: '(Outlook-Express)/(\d+)\.(\d+)'
184
184
  family_replacement: 'Windows Live Mail'
185
185
 
186
+ # Android Mobile Safari
187
+ - regex: '(Version)\/(\d+)\.(\d+) Mobile Safari\/\d+'
188
+ family_replacement: 'Mobile Safari'
189
+
186
190
  #### END SPECIAL CASES TOP ####
187
191
 
188
192
  #### MAIN CASES - this catches > 50% of all browsers ####
@@ -403,19 +407,19 @@ os_parsers:
403
407
  - regex: '(XBLWP7)'
404
408
  os_replacement: 'Windows Phone OS'
405
409
 
406
- - regex: '(Windows NT 6\.1)'
410
+ - regex: '(Windows NT) (6)\.(1)'
407
411
  os_replacement: 'Windows 7'
408
412
 
409
- - regex: '(Windows NT 6\.0)'
413
+ - regex: '(Windows NT) (6)\.(0)'
410
414
  os_replacement: 'Windows Vista'
411
415
 
412
416
  - regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000)'
413
417
 
414
418
  # is this a spoof or is nt 6.2 out and about in some capacity?
415
- - regex: '(Windows NT 6\.2)'
419
+ - regex: '(Windows NT) (6)\.(2)'
416
420
  os_replacement: 'Windows 8'
417
421
 
418
- - regex: '(Windows NT 5\.0)'
422
+ - regex: '(Windows NT) (5)\.(0)'
419
423
  os_replacement: 'Windows 2000'
420
424
 
421
425
  - regex: '(Windows Phone OS) (\d+)\.(\d+)'
@@ -423,7 +427,7 @@ os_parsers:
423
427
  - regex: '(Windows ?Mobile)'
424
428
  os_replacement: 'Windows Mobile'
425
429
 
426
- - regex: '(WinNT4.0)'
430
+ - regex: '(WinNT)(4)\.(0)'
427
431
  os_replacement: 'Windows NT 4.0'
428
432
 
429
433
  - regex: '(Win98)'
@@ -876,6 +880,9 @@ referrer_parsers:
876
880
  - regex: '(mail\.yahoo\.net)'
877
881
  referrer_replacement: 'Yahoo! Mail'
878
882
 
883
+ - regex: '(mm\.web\.de)'
884
+ referrer_replacement: 'WEB.DE'
885
+
879
886
  - regex: '(email\.freenet\.de)'
880
887
  referrer_replacement: 'WEB.DE'
881
888
 
@@ -46,14 +46,30 @@ module UseragentParser
46
46
  @browser_version ||= "#{browser_major_version}.#{browser_minor_version}.#{browser_patch_version}".gsub(/\.+$/, '').strip
47
47
  end
48
48
 
49
- def os_version
50
- @os_version ||= "#{os_major_version}.#{os_minor_version}.#{os_patch_version}".gsub(/\.+$/, '').strip
49
+ def os_version(options = {})
50
+ return @os_family if os_platform == 'Windows'
51
+ if options.fetch(:minor_only, false)
52
+ @os_release ||= os_release
53
+ else
54
+ @os_version ||= "#{os_major_version}.#{os_minor_version}.#{os_patch_version}".gsub(/\.+$/, '').strip
55
+ end
51
56
  end
52
57
 
53
58
  def os
54
59
  @os ||= os_name
55
60
  end
56
61
 
62
+ def os_family
63
+ @os_platform ||= os_platform
64
+ end
65
+
66
+ def os_family_aggregated
67
+ case os_family
68
+ when 'Windows', 'Windows NT' then 'Windows'
69
+ else os_family
70
+ end
71
+ end
72
+
57
73
  def browser
58
74
  @browser ||= browser_name
59
75
  end
@@ -131,7 +147,7 @@ module UseragentParser
131
147
  return ios_mail_names if is_ios_mail?
132
148
  return outlook_names if is_outlook?
133
149
  return 'AOL Desktop' if @browser_family == 'AOL'
134
- email_name
150
+ nil
135
151
  end
136
152
 
137
153
  def apple_mail_names
@@ -147,7 +163,16 @@ module UseragentParser
147
163
  end
148
164
 
149
165
  def ios_mail_names
150
- @device
166
+ prefix = "Apple Mobile Mail"
167
+ case @os_major_version
168
+ when '1' then "#{prefix} 1"
169
+ when '2' then "#{prefix} 2"
170
+ when '3' then "#{prefix} 3"
171
+ when '4' then "#{prefix} 4"
172
+ when '5' then "#{prefix} 5"
173
+ when '6' then "#{prefix} 6"
174
+ else "#{prefix}"
175
+ end
151
176
  end
152
177
 
153
178
  def outlook_names
@@ -165,6 +190,15 @@ module UseragentParser
165
190
  end
166
191
 
167
192
  def os_name
193
+ case os_platform
194
+ when 'Windows' then os_names_win_prefixed
195
+ when 'Windows NT' then os_names_winnt_prefixed
196
+ when 'Mac OS X' then os_names_osx_prefixed
197
+ else "#{os_family} #{os_version}".strip
198
+ end
199
+ end
200
+
201
+ def os_name_unprefixed
168
202
  case os_family
169
203
  when 'Windows' then os_names_win
170
204
  when 'Windows NT' then os_names_winnt
@@ -173,42 +207,63 @@ module UseragentParser
173
207
  end
174
208
  end
175
209
 
210
+ def os_platform
211
+ case @os_family
212
+ when 'Windows 98', 'Windows XP', 'Windows ME', 'Windows 95', 'Windows NT 4.0', 'Windows Vista', 'Windows 2000', 'Windows 7', 'Windows 8' then 'Windows'
213
+ else @os_family
214
+ end
215
+ end
216
+
176
217
  def os_release
177
218
  @release ||= "#{os_major_version}.#{os_minor_version}".gsub(/\.$/, '')
178
219
  end
179
220
 
221
+ def os_names_win_prefixed
222
+ "Microsoft #{@os_family} #{os_release}"
223
+ end
224
+
180
225
  def os_names_win
181
- "Microsoft Windows #{os_version}"
226
+ require 'pp'
227
+ pp self
228
+ pp 'HERE!'
229
+
230
+ os_version
231
+ end
232
+
233
+ def os_names_winnt_prefixed
234
+ "Microsoft Windows #{os_names_winnt}"
182
235
  end
183
236
 
184
237
  def os_names_winnt
185
- prefix = "Microsoft Windows"
186
238
  case os_release
187
- when "3.1" then "#{prefix} NT 3.1"
188
- when "3.5" then "#{prefix} NT 3.5"
189
- when "4.0" then "#{prefix} NT 4.0"
190
- when "5.0" then "#{prefix} 2000"
191
- when "5.1" then "#{prefix} XP"
192
- when "5.2" then "#{prefix} XP 64bit / Server 2003"
193
- when "6.0" then "#{prefix} Vista / Server 2008"
194
- when "6.1" then "#{prefix} 7 / Server 2008 R2"
195
- when "6.2" then "#{prefix} 8"
196
- else "#{prefix} #{os_version}"
239
+ when "3.1" then "NT 3.1"
240
+ when "3.5" then "NT 3.5"
241
+ when "4.0" then "NT 4.0"
242
+ when "5.0" then "2000"
243
+ when "5.1" then "XP"
244
+ when "5.2" then "XP 64bit / Server 2003"
245
+ when "6.0" then "Vista / Server 2008"
246
+ when "6.1" then "7 / Server 2008 R2"
247
+ when "6.2" then "8"
248
+ else "NT #{os_release}"
197
249
  end
198
250
  end
199
251
 
252
+ def os_names_osx_prefixed
253
+ "Apple Mac OS X #{os_version} (#{os_names_osx})"
254
+ end
255
+
200
256
  def os_names_osx
201
- prefix = "Apple Mac OS X"
202
257
  case os_release
203
- when "10.0" then "#{prefix} #{os_version} (Cheetah)"
204
- when "10.1" then "#{prefix} #{os_version} (Puma)"
205
- when "10.2" then "#{prefix} #{os_version} (Jaguar)"
206
- when "10.3" then "#{prefix} #{os_version} (Panther)"
207
- when "10.4" then "#{prefix} #{os_version} (Tiger)"
208
- when "10.5" then "#{prefix} #{os_version} (Leopard)"
209
- when "10.6" then "#{prefix} #{os_version} (Snow Leopard)"
210
- when "10.7" then "#{prefix} #{os_version} (Lion)"
211
- else "#{prefix} #{os_version}"
258
+ when "10.0" then "Cheetah"
259
+ when "10.1" then "Puma"
260
+ when "10.2" then "Jaguar"
261
+ when "10.3" then "Panther"
262
+ when "10.4" then "Tiger"
263
+ when "10.5" then "Leopard"
264
+ when "10.6" then "Snow Leopard"
265
+ when "10.7" then "Lion"
266
+ else "Unknown"
212
267
  end
213
268
  end
214
269
  end
@@ -1,3 +1,3 @@
1
1
  module UseragentParser
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -42,5 +42,8 @@ test_cases:
42
42
  - referrer_string: 'http://www.example.com'
43
43
  family: 'Other'
44
44
 
45
+ - referrer_string: 'https://mm.web.de/msg?6&folderId=1269567206893714944&index=3'
46
+ family: 'WEB.DE'
47
+
45
48
  - referrer_string: ''
46
49
  family:
@@ -388,3 +388,9 @@ test_cases:
388
388
  minor: '0'
389
389
  patch:
390
390
 
391
+ - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 2.3.5; de-de; HTC Desire HD A9191 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'
392
+ family: 'Mobile Safari'
393
+ major: '4'
394
+ minor: '0'
395
+ patch:
396
+
@@ -30,8 +30,8 @@ test_cases:
30
30
 
31
31
  - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10 ThunderBrowse/3.3.5'
32
32
  family: 'Windows 7'
33
- major:
34
- minor:
33
+ major: '6'
34
+ minor: '1'
35
35
  patch:
36
36
  patch_minor:
37
37
 
@@ -93,8 +93,8 @@ test_cases:
93
93
 
94
94
  - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) FireWeb/1.0.0.0'
95
95
  family: 'Windows 7'
96
- major:
97
- minor:
96
+ major: '6'
97
+ minor: '1'
98
98
  patch:
99
99
  patch_minor:
100
100
 
@@ -227,8 +227,8 @@ test_cases:
227
227
 
228
228
  - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a1) Gecko/20100208 MozillaDeveloperPreview/3.7a1 (.NET CLR 3.5.30729)'
229
229
  family: 'Windows 7'
230
- major:
231
- minor:
230
+ major: '6'
231
+ minor: '1'
232
232
  patch:
233
233
  patch_minor:
234
234
 
@@ -315,8 +315,8 @@ test_cases:
315
315
  - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; chromeframe; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)'
316
316
  js_ua: "{'js_user_agent_string': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.169.1 Safari/530.1'}"
317
317
  family: 'Windows Vista'
318
- major:
319
- minor:
318
+ major: '6'
319
+ minor: '0'
320
320
  patch:
321
321
  patch_minor:
322
322
 
@@ -144,26 +144,34 @@ describe UseragentParser::UserAgent do
144
144
  end
145
145
 
146
146
  describe "Apple Mobile Mail" do
147
- it "should recognize an iPad" do
148
- UseragentParser.parse_with_referrer('Mozilla/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; de-de) AppleWebKit/531.21.10 (KHTML, like Gecko)').email_version.should == 'iPad'
147
+ it "should recognize iOS 2" do
148
+ UseragentParser.parse_with_referrer('Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; de-de) AppleWebKit/525.18.1 (KHTML, like Gecko)').email_version.should == 'Apple Mobile Mail 2'
149
149
  end
150
150
 
151
- it "should recognize an iPod" do
152
- UseragentParser.parse_with_referrer('Mozilla/5.0 (iPod; U; CPU iPhone OS 4_0 like Mac OS X; de-de) AppleWebKit/532.9 (KHTML, like Gecko)').email_version.should == 'iPod'
151
+ it "should recognize iOS 3" do
152
+ UseragentParser.parse_with_referrer('Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_3 like Mac OS X; de-de) AppleWebKit/528.18 (KHTML, like Gecko)').email_version.should == 'Apple Mobile Mail 3'
153
153
  end
154
154
 
155
- it "should recognize an iPhone" do
156
- UseragentParser.parse_with_referrer('Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_1 like Mac OS X; de-de) AppleWebKit/532.9 (KHTML, like Gecko)').email_version.should == 'iPhone'
155
+ it "should recognize iOS 4" do
156
+ UseragentParser.parse_with_referrer('Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko)').email_version.should == 'Apple Mobile Mail 4'
157
+ end
158
+
159
+ it "should recognize iOS 5" do
160
+ UseragentParser.parse_with_referrer('Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko)').email_version.should == 'Apple Mobile Mail 5'
161
+ end
162
+
163
+ it "should recognize iOS 2" do
164
+ UseragentParser.parse_with_referrer('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/535.8 (KHTML, like Gecko)').email_version.should == 'Apple Mobile Mail 6'
157
165
  end
158
166
 
159
167
  it "should not mistake Mobile Safari for Apple Mail" do
160
- # TODO
168
+ UseragentParser.parse_with_referrer('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/535.8 (KHTML, like Gecko)', 'http://example.com').email_version.should be_nil
161
169
  end
162
170
  end
163
171
 
164
172
  describe "AOL" do
165
173
  it "should recognize the Webmail interface" do
166
- UseragentParser.parse_with_referrer('Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 AskTbFXTV5/3.9.1.14019 Firefox/3.6.13', 'http://mail.aol.com/33222-111/aol-1/de-de/Lite/MsgRead.aspx?folder=Spam&uid=1.28305313&seq=0&searchIn=none&searchQuery=&start=0&sort=received').email_version.should == 'AOL Webmail'
174
+ UseragentParser.parse_with_referrer('Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 AskTbFXTV5/3.9.1.14019 Firefox/3.6.13', 'http://mail.aol.com/33222-111/aol-1/de-de/Lite/MsgRead.aspx?folder=Spam&uid=1.28305313&seq=0&searchIn=none&searchQuery=&start=0&sort=received').email.should == 'AOL Webmail'
167
175
  end
168
176
  end
169
177
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: useragent_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: