user_agent_parser 0.1.2 → 1.0.0

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.

Potentially problematic release.


This version of user_agent_parser might be problematic. Click here for more details.

data/Readme.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # UserAgentParser [![Build Status](https://secure.travis-ci.org/toolmantim/user_agent_parser.png?branch=master)](http://travis-ci.org/toolmantim/user_agent_parser)
2
2
 
3
- UserAgentParser is a simple, comprehensive Ruby gem for parsing user agent strings. It uses [BrowserScope](http://www.browserscope.org/)'s parsing patterns via the most excellent [ua-parser project](https://github.com/tobie/ua-parser) by [Tobie Langel](https://github.com/tobie/).
3
+ UserAgentParser is a simple, comprehensive Ruby gem for parsing user agent strings. It uses [BrowserScope](http://www.browserscope.org/)'s [parsing patterns](https://github.com/tobie/ua-parser).
4
4
 
5
5
  ## Requirements
6
6
 
@@ -58,8 +58,6 @@ Finished tests in 144.220280s, 89.0027 tests/s, 234.9739 assertions/s.
58
58
 
59
59
  ## Limitations
60
60
 
61
- Chrome Frame detection is not yet included, but once [ua-parser issue #14](https://github.com/tobie/ua-parser/issues/14) is resolved this gem will be updated along with it.
62
-
63
61
  There's no support for providing overrides from Javascript user agent detection like there is with original BrowserScope library. The Javascript overrides were only necessary for detecting IE 9 Platform Preview and older versions of [Chrome Frame](https://developers.google.com/chrome/chrome-frame/).
64
62
 
65
63
  ## Contributing
@@ -13,7 +13,6 @@ module UserAgentParser
13
13
  def to_s
14
14
  s = family
15
15
  s += " #{version}" if version
16
- s += " (#{os})" if os
17
16
  s
18
17
  end
19
18
 
@@ -18,6 +18,11 @@ module UserAgentParser
18
18
  def [](segment)
19
19
  segments[segment]
20
20
  end
21
+
22
+ def major; self[0] end
23
+ def minor; self[1] end
24
+ def patch; self[2] end
25
+ def patch_minor; self[3] end
21
26
 
22
27
  def inspect
23
28
  "#<#{self.class} #{to_s}>"
@@ -1,6 +1,3 @@
1
- ### THIS FILE WAS COPIED ON JAN 26 2012.
2
- ### ORIGINAL IS AT: http://code.google.com/p/ua-parser/source/browse/trunk/resources/user_agent_parser.yaml
3
- ### Please review the CHANGELOG to see how this file differs from the original
4
1
  user_agent_parsers:
5
2
  #### SPECIAL CASES TOP ####
6
3
 
@@ -12,17 +9,25 @@ user_agent_parsers:
12
9
  - regex: '(SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
13
10
 
14
11
  # Firefox
12
+ - regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?'
13
+ family_replacement: 'Pale Moon (Firefox Variant)'
15
14
  - regex: '(Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
16
15
  family_replacement: 'Firefox Mobile'
17
16
  - regex: '(Fennec)/(\d+)\.(\d+)(pre)'
18
17
  family_replacment: 'Firefox Mobile'
19
18
  - regex: '(Fennec)/(\d+)\.(\d+)'
20
19
  family_replacement: 'Firefox Mobile'
20
+ - regex: 'Mobile.*(Firefox)/(\d+)\.(\d+)'
21
+ family_replacement: 'Firefox Mobile'
21
22
  - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre)?)'
22
23
  family_replacement: 'Firefox ($1)'
23
- - regex: '(Firefox)/(\d+)\.(\d+)([ab]\d+[a-z]*)'
24
+ - regex: '(Firefox)/(\d+)\.(\d+)(a\d+[a-z]*)'
25
+ family_replacement: 'Firefox Alpha'
26
+ - regex: '(Firefox)/(\d+)\.(\d+)(b\d+[a-z]*)'
24
27
  family_replacement: 'Firefox Beta'
25
- - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)([ab]\d+[a-z]*)'
28
+ - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(a\d+[a-z]*)'
29
+ family_replacement: 'Firefox Alpha'
30
+ - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(b\d+[a-z]*)'
26
31
  family_replacement: 'Firefox Beta'
27
32
  - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*)?'
28
33
  family_replacement: 'Firefox ($1)'
@@ -113,6 +118,8 @@ user_agent_parsers:
113
118
  # Chrome Mobile
114
119
  - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
115
120
  family_replacement: 'Chrome Mobile'
121
+ - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile'
122
+ family_replacement: 'Chrome Mobile'
116
123
 
117
124
  # Chrome Frame must come before MSIE.
118
125
  - regex: '(chromeframe)/(\d+)\.(\d+)\.(\d+)'
@@ -121,15 +128,26 @@ user_agent_parsers:
121
128
  # UC Browser
122
129
  - regex: '(UC Browser)(\d+)\.(\d+)\.(\d+)'
123
130
 
131
+ # Tizen Browser (second case included in browser/major.minor regex)
132
+ - regex: '(SLP Browser)/(\d+)\.(\d+)'
133
+ family_replacement: 'Tizen Browser'
134
+
135
+ # Epiphany browser (identifies as Chromium)
136
+ - regex: '(Epiphany)/(\d+)\.(\d+).(\d+)'
137
+
138
+ # Sogou Explorer 2.X
139
+ - regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)'
140
+ family_replacement: 'Sogou Explorer'
141
+
124
142
  #### END SPECIAL CASES TOP ####
125
143
 
126
144
  #### MAIN CASES - this catches > 50% of all browsers ####
127
145
 
128
146
  # Browser/major_version.minor_version.beta_version
129
- - regex: '(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iron|Iris|UP\.Browser|Bunjaloo)/(\d+)\.(\d+)\.(\d+)'
147
+ - regex: '(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iron|Iris|UP\.Browser|Bunjaloo|Google Earth|Raven for Mac)/(\d+)\.(\d+)\.(\d+)'
130
148
 
131
149
  # Browser/major_version.minor_version
132
- - regex: '(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo)/(\d+)\.(\d+)'
150
+ - regex: '(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris)/(\d+)\.(\d+)'
133
151
 
134
152
  # Browser major_version.minor_version.beta_version (space instead of slash)
135
153
  - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)'
@@ -186,6 +204,7 @@ user_agent_parsers:
186
204
 
187
205
  - regex: '(BrowseX) \((\d+)\.(\d+)\.(\d+)'
188
206
 
207
+ # Polaris/d.d is above
189
208
  - regex: '(POLARIS)/(\d+)\.(\d+)'
190
209
  family_replacement: 'Polaris'
191
210
  - regex: '(Embider)/(\d+)\.(\d+)'
@@ -263,6 +282,10 @@ user_agent_parsers:
263
282
  # Amazon Silk, should go before Safari
264
283
  - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
265
284
 
285
+ # WebKit Nightly
286
+ - regex: '(AppleWebKit)/(\d+)\.?(\d+)?\+ .* Version/\d+\.\d+.\d+ Safari/'
287
+ family_replacement: 'WebKit Nightly'
288
+
266
289
  # Safari
267
290
  - regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
268
291
  family_replacement: 'Safari'
@@ -283,6 +306,33 @@ user_agent_parsers:
283
306
  family_replacement: 'IE'
284
307
 
285
308
  os_parsers:
309
+
310
+ ##########
311
+ # Android
312
+ # can actually detect rooted android os. do we care?
313
+ ##########
314
+ - regex: '(Android) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
315
+ - regex: '(Android)\-(\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
316
+
317
+ - regex: '(Android) Donut'
318
+ os_v1_replacement: '1'
319
+ os_v2_replacement: '2'
320
+
321
+ - regex: '(Android) Eclair'
322
+ os_v1_replacement: '2'
323
+ os_v2_replacement: '1'
324
+
325
+ - regex: '(Android) Froyo'
326
+ os_v1_replacement: '2'
327
+ os_v2_replacement: '2'
328
+
329
+ - regex: '(Android) Gingerbread'
330
+ os_v1_replacement: '2'
331
+ os_v2_replacement: '3'
332
+
333
+ - regex: '(Android) Honeycomb'
334
+ os_v1_replacement: '3'
335
+
286
336
  ##########
287
337
  # Windows
288
338
  # http://en.wikipedia.org/wiki/Windows_NT#Releases
@@ -328,30 +378,12 @@ os_parsers:
328
378
  os_replacement: 'Windows 98'
329
379
 
330
380
  ##########
331
- # Android
332
- # can actually detect rooted android os. do we care?
381
+ # Tizen OS from Samsung
382
+ # spoofs Android so pushing it above
333
383
  ##########
334
- - regex: '(Android) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
335
- - regex: '(Android)\-(\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
336
-
337
- - regex: '(Android) Donut'
338
- os_v1_replacement: '1'
339
- os_v2_replacement: '2'
340
-
341
- - regex: '(Android) Eclair'
342
- os_v1_replacement: '2'
343
- os_v2_replacement: '1'
344
-
345
- - regex: '(Android) Froyo'
346
- os_v1_replacement: '2'
347
- os_v2_replacement: '2'
384
+ - regex: '(Tizen)/(\d+)\.(\d+)'
348
385
 
349
- - regex: '(Android) Gingerbread'
350
- os_v1_replacement: '2'
351
- os_v2_replacement: '3'
352
386
 
353
- - regex: '(Android) Honeycomb'
354
- os_v1_replacement: '3'
355
387
 
356
388
  ##########
357
389
  # Mac OS
@@ -502,6 +534,7 @@ device_parsers:
502
534
  - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [A-z]{2}\-[A-z]{2}\; (.+) Build'
503
535
  - regex: 'Android[\- ][\d]+\.[\d]+\-update1\; [A-z]{2}\-[A-z]{2}\; (.+) Build'
504
536
  - regex: 'Android[\- ][\d]+\.[\d]+\; [A-z]{2}\-[A-z]{2}\; (.+) Build'
537
+ - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; (.+) Build'
505
538
 
506
539
  ##########
507
540
  # NOKIA
@@ -734,3 +767,44 @@ device_parsers:
734
767
  ##########
735
768
  - regex: '(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\-webcrawler|converacrawler|dataparksearch|findlinks)'
736
769
  device_replacement: 'Spider'
770
+
771
+
772
+ mobile_user_agent_families:
773
+ - 'Firefox Mobile'
774
+ - 'Opera Mobile'
775
+ - 'Opera Mini'
776
+ - 'Mobile Safari'
777
+ - 'webOS'
778
+ - 'IE Mobile'
779
+ - 'Playstation Portable'
780
+ - 'Nokia'
781
+ - 'Blackberry'
782
+ - 'Palm'
783
+ - 'Silk'
784
+ - 'Android'
785
+ - 'Maemo'
786
+ - 'Obigo'
787
+ - 'Netfront'
788
+ - 'AvantGo'
789
+ - 'Teleca'
790
+ - 'SEMC-Browser'
791
+ - 'Bolt'
792
+ - 'Iris'
793
+ - 'UP.Browser'
794
+ - 'Symphony'
795
+ - 'Minimo'
796
+ - 'Bunjaloo'
797
+ - 'Jasmine'
798
+ - 'Dolfin'
799
+ - 'Polaris'
800
+ - 'BREW'
801
+ - 'Chrome Mobile'
802
+ - 'UC Browser'
803
+ - 'Tizen Browser'
804
+
805
+ # Some select mobile OSs report a desktop browser.
806
+ # make sure we note they're mobile
807
+ mobile_os_families:
808
+ - 'Windows Phone 6.5'
809
+ - 'Windows CE'
810
+ - 'Symbian OS'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: user_agent_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-06 00:00:00.000000000 Z
12
+ date: 2012-06-03 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A simple, comprehensive Ruby gem for parsing user agent strings with
15
15
  the help of BrowserScope's UA database
@@ -47,7 +47,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
47
47
  version: '0'
48
48
  segments:
49
49
  - 0
50
- hash: -1400916062182303731
50
+ hash: 2550516200831264271
51
51
  requirements: []
52
52
  rubyforge_project:
53
53
  rubygems_version: 1.8.23