user_agent_parser 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (4) hide show
  1. checksums.yaml +6 -14
  2. data/Readme.md +23 -2
  3. data/vendor/ua-parser/regexes.yaml +107 -19
  4. metadata +5 -5
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZDY2ZWUzN2RkZmIzYWU2NDcwZmM2Zjk0OTUxMGE3ZDVmNTZjN2ZkNQ==
5
- data.tar.gz: !binary |-
6
- NWE4ODE2OTY3NjIwOGY2MWYxY2E3YmEzMjgxYWIxYzU3YTJiZGYxZQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MGJhMmVmNjMxMDk0ZWUzNDM1MDlmM2NmY2JlNDk4MTVjYzEyNjIxZGFjMDli
10
- MWYyMzg1ZTIwZTdkNzIxNmRjZTI3NTMyNWU1YzFhNDE1ZGMxZjM5MTZjMTYw
11
- ZGM3NWFmODMyY2NkZWRiMjkwNTcyODUwY2ZhZWM4Njg4YTk4ZDc=
12
- data.tar.gz: !binary |-
13
- ZWU1ZjE4YTQ1MmFiNjZlZGE0NGQzOTQ2ODQ2OGEwZmE0MTBhYWZkOGIzZjE5
14
- ZWQwYjJjZDI1MGJmMWMyMDVlYTE4YzkxNmRhZjJlMDYyNGQ2YWEzY2IyYTE0
15
- ZmQ4MjM4ZjlhOTA2MDQ1MGZiZGVjMmEwNjAwMjE4OTIxN2Q1Zjk=
2
+ SHA1:
3
+ metadata.gz: 5e20682e690e1e3552bc54b1ef9849ab8febc3ec
4
+ data.tar.gz: 8f7578787fc31f82e35909d34c86b1b00594b0b6
5
+ SHA512:
6
+ metadata.gz: 488d4f2b60187907f65ad244786c6babfef042fa16d5a70292a29aac70fda3cbbf7dead070d2c30123b9a81c46c3385e4347994692342d3b127fb5baba01d6dd
7
+ data.tar.gz: a8213bbf5f3b4fb36665d36b7c401c6ec40acfcacc0b52340bcb36a402b038ea5c658837d449c2cd04ad04142334f080bd2479ae4ae5c7b4fd67f54e49c46b0b
data/Readme.md CHANGED
@@ -43,6 +43,21 @@ parser.parse 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.24 Version/10.53'
43
43
  => #<UserAgentParser::UserAgent Opera 10.53 (Windows XP)>
44
44
  ```
45
45
 
46
+ In a larger application, you could store a parser in a global to avoid repeat pattern loading:
47
+
48
+ ```ruby
49
+ module MyApplication
50
+
51
+ # Instantiate the parser on load as it's quite expensive
52
+ USER_AGENT_PARSER = UserAgentParser::Parser.new
53
+
54
+ def self.user_agent_parser
55
+ USER_AGENT_PARSER
56
+ end
57
+
58
+ end
59
+ ```
60
+
46
61
  ## The pattern database
47
62
 
48
63
  The [ua-parser database](https://github.com/tobie/ua-parser/blob/master/regexes.yaml) is included via a [git submodule](http://help.github.com/submodules/). To update the database the submodule needs to be updated and the gem re-released (pull requests for this are very welcome!).
@@ -70,8 +85,14 @@ All accepted pull requests will earn you commit and release rights.
70
85
 
71
86
  ## Releasing a new version
72
87
 
73
- 1. Update the version in user_agent_parser.gemspec
74
- 2. `git commit user_agent_parser.gemspec -m 'Version bump'`
88
+ 1. Update the version in `user_agent_parser.gemspec`
89
+ 2. `git commit user_agent_parser.gemspec` with the following message format:
90
+
91
+ Version x.x.x
92
+
93
+ Changelog:
94
+ * Some new feature
95
+ * Some new bug fix
75
96
  3. `rake release`
76
97
 
77
98
  ## License
@@ -1,6 +1,11 @@
1
1
  user_agent_parsers:
2
2
  #### SPECIAL CASES TOP ####
3
3
 
4
+ # HbbTV standard defines what features the browser should understand.
5
+ # but it's like targeting "HTML5 browsers", effective browser support depends on the model
6
+ # See os_parsers if you want to target a specific TV
7
+ - regex: '(HbbTV)/(\d+)\.(\d+)\.(\d+) \('
8
+
4
9
  # must go before Firefox to catch SeaMonkey/Camino
5
10
  - regex: '(SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
6
11
 
@@ -65,6 +70,10 @@ user_agent_parsers:
65
70
  - regex: '(?:Mobile Safari).*(OPR)/(\d+)\.(\d+)\.(\d+)'
66
71
  family_replacement: 'Opera Mobile'
67
72
 
73
+ # Opera 15 for Desktop is similar to Chrome but includes an "OPR" Version string.
74
+ - regex: '(?:Chrome).*(OPR)/(\d+)\.(\d+)\.(\d+)'
75
+ family_replacement: 'Opera'
76
+
68
77
  # Palm WebOS looks a lot like Safari.
69
78
  - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
70
79
  family_replacement: 'webOS Browser'
@@ -88,7 +97,7 @@ user_agent_parsers:
88
97
  family_replacement: 'Swiftfox'
89
98
 
90
99
  # Rekonq
91
- - regex: '(rekonq)/(\d+)\.(\d+) Safari'
100
+ - regex: '(rekonq)/(\d+)\.(\d+)\.?(\d+)? Safari'
92
101
  family_replacement: 'Rekonq'
93
102
  - regex: 'rekonq'
94
103
  family_replacement: 'Rekonq'
@@ -137,9 +146,6 @@ user_agent_parsers:
137
146
  - regex: '(SLP Browser)/(\d+)\.(\d+)'
138
147
  family_replacement: 'Tizen Browser'
139
148
 
140
- # Epiphany browser (identifies as Chromium)
141
- - regex: '(Epiphany)/(\d+)\.(\d+).(\d+)'
142
-
143
149
  # Sogou Explorer 2.X
144
150
  - regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)'
145
151
  family_replacement: 'Sogou Explorer'
@@ -177,16 +183,25 @@ user_agent_parsers:
177
183
  - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).* MRCHROME'
178
184
  family_replacement: 'Mail.ru Chromium Browser'
179
185
 
186
+ # AOL Browser (IE-based)
187
+ - regex: '(AOL) (\d+)\.(\d+); AOLBuild (\d+)'
188
+
180
189
  #### END SPECIAL CASES TOP ####
181
190
 
182
191
  #### MAIN CASES - this catches > 50% of all browsers ####
183
192
 
184
193
  # Browser/major_version.minor_version.beta_version
185
- - 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|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)'
194
+ - regex: '(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)'
195
+
196
+ # Chrome/Chromium/major_version.minor_version.beta_version
197
+ - regex: '(Chromium|Chrome)/(\d+)\.(\d+)\.(\d+)'
186
198
 
187
199
  # Browser/major_version.minor_version
188
200
  - regex: '(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser)/(\d+)\.(\d+)'
189
201
 
202
+ # Chrome/Chromium/major_version.minor_version
203
+ - regex: '(Chromium|Chrome)/(\d+)\.(\d+)'
204
+
190
205
  # Browser major_version.minor_version.beta_version (space instead of slash)
191
206
  - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)'
192
207
  # Browser major_version.minor_version (space instead of slash)
@@ -342,6 +357,9 @@ user_agent_parsers:
342
357
  - regex: '(Pre)/(\d+)\.(\d+)'
343
358
  family_replacement: 'Palm Pre'
344
359
 
360
+ # fork of Links
361
+ - regex: '(ELinks)/(\d+)\.(\d+)'
362
+ - regex: '(ELinks) \((\d+)\.(\d+)'
345
363
  - regex: '(Links) \((\d+)\.(\d+)'
346
364
 
347
365
  - regex: '(QtWeb) Internet Browser/(\d+)\.(\d+)'
@@ -382,10 +400,70 @@ user_agent_parsers:
382
400
  - regex: '([MS]?IE) (\d+)\.(\d+)'
383
401
  family_replacement: 'IE'
384
402
 
403
+ - regex: 'Trident(.*)rv.(\d+)\.(\d+)'
404
+ family_replacement: 'IE'
405
+
385
406
  - regex: '(python-requests)/(\d+)\.(\d+)'
386
407
  family_replacement: 'Python Requests'
387
408
 
388
409
  os_parsers:
410
+ ##########
411
+ # HbbTV vendors
412
+ ##########
413
+
414
+ # starts with the easy one : Panasonic seems consistent across years, hope it will continue
415
+ #HbbTV/1.1.1 (;Panasonic;VIERA 2011;f.532;0071-0802 2000-0000;)
416
+ #HbbTV/1.1.1 (;Panasonic;VIERA 2012;1.261;0071-3103 2000-0000;)
417
+ #HbbTV/1.2.1 (;Panasonic;VIERA 2013;3.672;4101-0003 0002-0000;)
418
+ #- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Panasonic);VIERA ([0-9]{4});'
419
+
420
+ # Sony is consistent too but do not place year like the other
421
+ # Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11
422
+ # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL40HX751; PKG1.902EUA; 2012;);; en) Presto/2.10.250 Version/11.60
423
+ # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL22EX320; PKG4.017EUA; 2011;);; en) Presto/2.7.61 Version/11.00
424
+ #- regex: 'HbbTV/\d+\.\d+\.\d+ \(; (Sony);.*;.*; ([0-9]{4});\)'
425
+
426
+
427
+ # LG is consistent too, but we need to add manually the year model
428
+ #Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.20.30 ;1.0M ;)
429
+ #Mozilla/5.0 (DirectFB; Linux armv7l) AppleWebKit/534.26+ (KHTML, like Gecko) Version/5.0 Safari/534.26+ HbbTV/1.1.1 ( ;LGE ;NetCast 3.0 ;1.0 ;1.0M ;)
430
+ - regex: 'HbbTV/\d+\.\d+\.\d+ \( ;(LG)E ;NetCast 4.0'
431
+ os_v1_replacement: '2013'
432
+ - regex: 'HbbTV/\d+\.\d+\.\d+ \( ;(LG)E ;NetCast 3.0'
433
+ os_v1_replacement: '2012'
434
+
435
+ # Samsung is on its way of normalizing their user-agent
436
+ # HbbTV/1.1.1 (;Samsung;SmartTV2013;T-FXPDEUC-1102.2;;) WebKit
437
+ # HbbTV/1.1.1 (;Samsung;SmartTV2013;T-MST12DEUC-1102.1;;) WebKit
438
+ # HbbTV/1.1.1 (;Samsung;SmartTV2012;;;) WebKit
439
+ # HbbTV/1.1.1 (;;;;;) Maple_2011
440
+ - regex: 'HbbTV/1.1.1 \(;;;;;\) Maple_2011'
441
+ os_replacement: 'Samsung'
442
+ os_v1_replacement: '2011'
443
+ # manage the two models of 2013
444
+ - regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.*FXPDEUC'
445
+ os_v2_replacement: 'UE40F7000'
446
+ - regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.*MST12DEUC'
447
+ os_v2_replacement: 'UE32F4500'
448
+ # generic Samsung (works starting in 2012)
449
+ #- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});'
450
+
451
+ # Philips : not found any other way than a manual mapping
452
+ # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/4.1.3 PHILIPSTV/1.1.1; en) Presto/2.10.250 Version/11.60
453
+ # Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70
454
+ - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/4'
455
+ os_v1_replacement: '2013'
456
+ - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/3'
457
+ os_v1_replacement: '2012'
458
+ - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/2'
459
+ os_v1_replacement: '2011'
460
+
461
+ # the HbbTV emulator developers use HbbTV/1.1.1 (;;;;;) firetv-firefox-plugin 1.1.20
462
+ - regex: 'HbbTV/\d+\.\d+\.\d+.*(firetv)-firefox-plugin (\d+).(\d+).(\d+)'
463
+ os_replacement: 'FireHbbTV'
464
+
465
+ # generic HbbTV, hoping to catch manufacturer name (always after 2nd comma) and the first string that looks like a 2011-2019 year
466
+ - regex: 'HbbTV/\d+\.\d+\.\d+ \(.*; ?([a-zA-Z]+) ?;.*(201[1-9]).*\)'
389
467
 
390
468
  ##########
391
469
  # Android
@@ -427,7 +505,7 @@ os_parsers:
427
505
  # lots of ua strings have Windows NT 4.1 !?!?!?!? !?!? !? !????!?! !!! ??? !?!?! ?
428
506
  # (very) roughly ordered in terms of frequency of occurence of regex (win xp currently most frequent, etc)
429
507
  ##########
430
-
508
+
431
509
  - regex: '(Windows (?:NT 5\.2|NT 5\.1))'
432
510
  os_replacement: 'Windows XP'
433
511
 
@@ -442,6 +520,9 @@ os_parsers:
442
520
  - regex: '(Windows NT 6\.0)'
443
521
  os_replacement: 'Windows Vista'
444
522
 
523
+ - regex: '(Win 9x 4\.90)'
524
+ os_replacement: 'Windows Me'
525
+
445
526
  - regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000|Windows 3.1)'
446
527
 
447
528
  - regex: '(Windows NT 6\.2; ARM;)'
@@ -503,8 +584,6 @@ os_parsers:
503
584
 
504
585
  - regex: '(AppleTV)/(\d+)\.(\d+)'
505
586
  os_replacement: 'ATV OS X'
506
- os_v1_replacement: '$1'
507
- os_v2_replacement: '$2'
508
587
 
509
588
  ##########
510
589
  # Chrome OS
@@ -518,9 +597,10 @@ os_parsers:
518
597
  ##########
519
598
  # Linux distros
520
599
  ##########
521
- - regex: '(Debian)-(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
600
+ - regex: '([Dd]ebian)'
601
+ os_replacement: 'Debian'
522
602
  - regex: '(Linux Mint)(?:/(\d+))?'
523
- - regex: '(Mandriva)(?: Linux)?/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
603
+ - regex: '(Mandriva)(?: Linux)?/(?:[\d.-]+m[a-z]{2}(\d+).(\d))?'
524
604
 
525
605
  ##########
526
606
  # Symbian + Symbian OS
@@ -580,7 +660,7 @@ os_parsers:
580
660
  ##########
581
661
  - regex: '(GoogleTV) (\d+)\.(\d+)\.(\d+)'
582
662
  # Old style
583
- - regex: '(GoogleTV)\/\d+'
663
+ - regex: '(GoogleTV)/[\da-z]+'
584
664
 
585
665
  - regex: '(WebTV)/(\d+).(\d+)'
586
666
 
@@ -596,16 +676,17 @@ os_parsers:
596
676
  # since the majority of os cases are very specific, these go last
597
677
  ##########
598
678
  # first.second.third.fourth bits
599
- - regex: '(SUSE|Fedora|Red Hat|PCLinuxOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
679
+ - regex: '(Fedora|Red Hat|PCLinuxOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
600
680
 
601
681
  # first.second.third bits
602
- - regex: '(SUSE|Fedora|Red Hat|Puppy|PCLinuxOS|CentOS)/(\d+)\.(\d+)\.(\d+)'
682
+ - regex: '(Red Hat|Puppy|PCLinuxOS)/(\d+)\.(\d+)\.(\d+)'
603
683
 
604
684
  # first.second bits
605
685
  - regex: '(Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Red Hat|Slackware)/(\d+)\.(\d+)'
606
686
 
607
687
  # just os
608
- - regex: '(Windows|OpenBSD|FreeBSD|NetBSD|Ubuntu|Kubuntu|Android|Arch Linux|CentOS|WeTab|Slackware)'
688
+ - regex: '(Windows|OpenBSD|FreeBSD|NetBSD|Android|WeTab)'
689
+ - regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Gentoo|Mageia)'
609
690
  - regex: '(Linux)/(\d+)\.(\d+)'
610
691
  - regex: '(Linux|BSD)'
611
692
  - regex: 'SunOS'
@@ -690,11 +771,11 @@ device_parsers:
690
771
  #########
691
772
  # Android General Device Matching (far from perfect)
692
773
  #########
693
- - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; WOWMobile (.+) Build'
694
- - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
695
- - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
696
- - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+;[A-Za-z]{2}\-[A-Za-z]{2};(.+) Build'
697
- - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
774
+ - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.+) Build'
775
+ - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2}; (.+) Build'
776
+ - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; (.+) Build'
777
+ - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+;[A-Za-z]{2}\-[A-Za-z]{0,2};(.+) Build'
778
+ - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; (.+) Build'
698
779
  - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; (.+) Build'
699
780
  - regex: 'Android[\- ][\d]+\.[\d]+; (.+) Build'
700
781
 
@@ -777,6 +858,7 @@ device_parsers:
777
858
  # cannot determine specific device type from ua string. (3g, 3gs, 4, etc)
778
859
  - regex: '(iPad) Simulator;'
779
860
  - regex: '(iPad);'
861
+ - regex: '(iPod) touch;'
780
862
  - regex: '(iPod);'
781
863
  - regex: '(iPhone) Simulator;'
782
864
  - regex: '(iPhone);'
@@ -871,6 +953,12 @@ device_parsers:
871
953
  - regex: 'Lenovo_([A-Za-z0-9]+)'
872
954
  device_replacement: 'Lenovo $1'
873
955
 
956
+ ##########
957
+ # HbbTV (European and Australian standard)
958
+ # written before the LG regexes, as LG is making HbbTV too
959
+ ##########
960
+ - regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+'
961
+
874
962
  ##########
875
963
  # lg
876
964
  ##########
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: user_agent_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Lucas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-09 00:00:00.000000000 Z
11
+ date: 2013-10-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple, comprehensive Ruby gem for parsing user agent strings with
14
14
  the help of BrowserScope's UA database
@@ -36,17 +36,17 @@ require_paths:
36
36
  - lib
37
37
  required_ruby_version: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ! '>='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: 1.8.7
42
42
  required_rubygems_version: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ! '>='
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
47
  requirements: []
48
48
  rubyforge_project:
49
- rubygems_version: 2.0.3
49
+ rubygems_version: 2.1.10
50
50
  signing_key:
51
51
  specification_version: 4
52
52
  summary: A simple, comprehensive Ruby gem for parsing user agent strings with the