user_agent_parser 2.1.0 → 2.1.1

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.

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