user_agent_parser 2.11.0 → 2.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b48c15771051ce967fbd02b30cebe742074d6cc363f202f8136d2da8fcb53eae
4
- data.tar.gz: cec1845c163e7d79d232b9216182f08e4a4ca25236c06328afd1aa7262c4b0f6
3
+ metadata.gz: 7994324d50b5df6f804fbdb9af163f3f0f289d2e960c00ea4eacc3db560bba3e
4
+ data.tar.gz: 168efdf63dfacf1a687e33db092bd226428f3279d995d6bf6b8b89fdd9056121
5
5
  SHA512:
6
- metadata.gz: f1c6d56ffe6f50176dd812ca4e717a4c2e63079eae3d91dbadb17fbefe6efa825ae05394c02e3de909c8bd5c76587d41ec33bc5c5fa6b283d5f8d9bc08c081b5
7
- data.tar.gz: 8f50066203f91d2ac548db3326944c7bca38bb8fc355c7b34e012287e09c0199ce6da8aee707227e5944e482f11d53decd2afef63ba500d564045d6e01dc2158
6
+ metadata.gz: 275dfd67d2357655407fa09dcea6959d15bd184cba1f3cd1607108d0a72548c44a2e8d015bd230ed3adcec9036d79035c969a98eb499fe83efbab97360055fea
7
+ data.tar.gz: 708f4ce8447e4fa0474f5798c4e155699a85555191ffda29ec528c1dd3d835a968520ff9ea88af1c9e3c075bbf4603003a756d5e40b862f7ad8af6607d3e1570
@@ -38,16 +38,24 @@ module UserAgentParser
38
38
  private
39
39
 
40
40
  def load_patterns(path)
41
- yml = YAML.load_file(path)
42
-
43
- # Parse all the regexs
44
- yml.each_pair do |_type, patterns|
45
- patterns.each do |pattern|
46
- pattern[:regex] = Regexp.new(pattern['regex'], pattern['regex_flag'] == 'i')
47
- end
41
+ yml = begin
42
+ YAML.load_file(path, freeze: true)
43
+ rescue ArgumentError
44
+ YAML.load_file(path)
48
45
  end
46
+ [
47
+ parse_pattern(yml['user_agent_parsers']),
48
+ parse_pattern(yml['os_parsers']),
49
+ parse_pattern(yml['device_parsers']),
50
+ ]
51
+ end
49
52
 
50
- [yml['user_agent_parsers'], yml['os_parsers'], yml['device_parsers']]
53
+ def parse_pattern(patterns)
54
+ patterns.map do |pattern|
55
+ pattern = pattern.dup
56
+ pattern[:regex] = Regexp.new(pattern.delete('regex'), pattern.delete('regex_flag') == 'i')
57
+ pattern
58
+ end
51
59
  end
52
60
 
53
61
  def parse_ua(user_agent, os = nil, device = nil)
@@ -213,6 +213,10 @@ user_agent_parsers:
213
213
  - regex: '(Twitter for (?:iPhone|iPad)|TwitterAndroid)(?:\/(\d+)\.(\d+)|)'
214
214
  family_replacement: 'Twitter'
215
215
 
216
+ # Phantom app
217
+ - regex: 'Mozilla.{1,200}Mobile.{1,100}(Phantom\/ios|android).(\d+)\.(\d+)\.(\d+)'
218
+ family_replacement: 'Phantom'
219
+
216
220
  # aspiegel.com spider (owned by Huawei)
217
221
  - regex: 'Mozilla.{1,100}Mobile.{1,100}AspiegelBot'
218
222
  family_replacement: 'Spider'
@@ -381,7 +385,7 @@ user_agent_parsers:
381
385
  # Edge Mobile
382
386
  - regex: 'Windows Phone .{0,200}(Edge)/(\d+)\.(\d+)'
383
387
  family_replacement: 'Edge Mobile'
384
- - regex: '(EdgiOS|EdgA)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
388
+ - regex: '(EdgiOS|EdgA)/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
385
389
  family_replacement: 'Edge Mobile'
386
390
 
387
391
  # Samsung Internet (based on Chrome, but lacking some features)
@@ -517,6 +521,10 @@ user_agent_parsers:
517
521
  # Palo Alto GlobalProtect Linux
518
522
  - regex: 'PAN (GlobalProtect)/(\d+)\.(\d+)\.(\d+) .{1,100} \(X11; Linux x86_64\)'
519
523
 
524
+ # Surveyon https://www.surveyon.com/
525
+ - regex: '^(surveyon)/(\d+)\.(\d+)\.(\d+)'
526
+ family_replacement: 'Surveyon'
527
+
520
528
  #### END SPECIAL CASES TOP ####
521
529
 
522
530
  #### MAIN CASES - this catches > 50% of all browsers ####
@@ -1120,6 +1128,7 @@ os_parsers:
1120
1128
 
1121
1129
  # Android 9; Android 10;
1122
1130
  - regex: '(Android) (\d+);'
1131
+ - regex: '(Android): (\d+)(?:\.(\d+)(?:\.(\d+)|)|);'
1123
1132
 
1124
1133
  # UCWEB
1125
1134
  - regex: '^UCWEB.{0,200}; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]{1,100})|);'
@@ -1544,9 +1553,48 @@ os_parsers:
1544
1553
  os_replacement: 'iOS'
1545
1554
  os_v1_replacement: '14'
1546
1555
  os_v2_replacement: '5'
1556
+ - regex: 'CFNetwork/12.{0,100} Darwin/20\.5\.\d+'
1557
+ os_replacement: 'iOS'
1558
+ os_v1_replacement: '14'
1559
+ os_v2_replacement: '6'
1560
+ - regex: 'CFNetwork/12.{0,100} Darwin/20\.6\.\d+'
1561
+ os_replacement: 'iOS'
1562
+ os_v1_replacement: '14'
1563
+ os_v2_replacement: '8'
1547
1564
  - regex: 'CFNetwork/.{0,100} Darwin/(20)\.\d+'
1548
1565
  os_replacement: 'iOS'
1549
1566
  os_v1_replacement: '14'
1567
+ - regex: 'CFNetwork/13.{0,100} Darwin/21\.0\.\d+'
1568
+ os_replacement: 'iOS'
1569
+ os_v1_replacement: '15'
1570
+ os_v2_replacement: '0'
1571
+ - regex: 'CFNetwork/13.{0,100} Darwin/21\.1\.\d+'
1572
+ os_replacement: 'iOS'
1573
+ os_v1_replacement: '15'
1574
+ os_v2_replacement: '1'
1575
+ - regex: 'CFNetwork/13.{0,100} Darwin/21\.2\.\d+'
1576
+ os_replacement: 'iOS'
1577
+ os_v1_replacement: '15'
1578
+ os_v2_replacement: '2'
1579
+ - regex: 'CFNetwork/13.{0,100} Darwin/21\.3\.\d+'
1580
+ os_replacement: 'iOS'
1581
+ os_v1_replacement: '15'
1582
+ os_v2_replacement: '3'
1583
+ - regex: 'CFNetwork/13.{0,100} Darwin/21\.4\.\d+'
1584
+ os_replacement: 'iOS'
1585
+ os_v1_replacement: '15'
1586
+ os_v2_replacement: '4'
1587
+ - regex: 'CFNetwork/13.{0,100} Darwin/21\.5\.\d+'
1588
+ os_replacement: 'iOS'
1589
+ os_v1_replacement: '15'
1590
+ os_v2_replacement: '5'
1591
+ - regex: 'CFNetwork/13.{0,100} Darwin/21\.6\.\d+'
1592
+ os_replacement: 'iOS'
1593
+ os_v1_replacement: '15'
1594
+ os_v2_replacement: '6'
1595
+ - regex: 'CFNetwork/.{0,100} Darwin/(21)\.\d+'
1596
+ os_replacement: 'iOS'
1597
+ os_v1_replacement: '15'
1550
1598
  - regex: 'CFNetwork/.{0,100} Darwin/'
1551
1599
  os_replacement: 'iOS'
1552
1600
 
@@ -2461,10 +2509,6 @@ device_parsers:
2461
2509
  device_replacement: 'Dell $1'
2462
2510
  brand_replacement: 'Dell'
2463
2511
  model_replacement: '$1'
2464
- - regex: '; {0,2}Dell ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
2465
- device_replacement: 'Dell $1'
2466
- brand_replacement: 'Dell'
2467
- model_replacement: '$1'
2468
2512
 
2469
2513
  #########
2470
2514
  # Denver
@@ -2671,10 +2715,14 @@ device_parsers:
2671
2715
  device_replacement: '$1'
2672
2716
  brand_replacement: 'Google'
2673
2717
  model_replacement: '$1'
2674
- - regex: '; {0,2}(Pixel.{0,200}?)(?: Build|\) AppleWebKit)'
2675
- device_replacement: '$1'
2718
+ - regex: '; {0,2}([g|G]oogle)? (Pixel[ a-zA-z0-9]{1,100});(?: Build|.{0,50}\) AppleWebKit)'
2719
+ device_replacement: '$2'
2676
2720
  brand_replacement: 'Google'
2677
- model_replacement: '$1'
2721
+ model_replacement: '$2'
2722
+ - regex: '; {0,2}([g|G]oogle)? (Pixel.{0,200}?)(?: Build|\) AppleWebKit)'
2723
+ device_replacement: '$2'
2724
+ brand_replacement: 'Google'
2725
+ model_replacement: '$2'
2678
2726
 
2679
2727
  #########
2680
2728
  # Gigabyte
@@ -3801,6 +3849,18 @@ device_parsers:
3801
3849
  device_replacement: 'OnePlus $1'
3802
3850
  brand_replacement: 'OnePlus'
3803
3851
  model_replacement: '$1'
3852
+ - regex: '; {0,2}(HD1903|GM1917|IN2025|LE2115|LE2127|HD1907|BE2012|BE2025|BE2026|BE2028|BE2029|DE2117|DE2118|EB2101|GM1900|GM1910|GM1915|HD1905|HD1925|IN2015|IN2017|IN2019|KB2005|KB2007|LE2117|LE2125|BE2015|GM1903|HD1900|HD1901|HD1910|HD1913|IN2010|IN2013|IN2020|LE2111|LE2120|LE2121|LE2123|BE2011|IN2023|KB2003|LE2113|NE2215|DN2101)(?: Build|\) AppleWebKit)'
3853
+ device_replacement: 'OnePlus $1'
3854
+ brand_replacement: 'OnePlus'
3855
+ model_replacement: 'OnePlus $1'
3856
+ - regex: '; (OnePlus[ a-zA-z0-9]{0,50});((?: Build|.{0,50}\) AppleWebKit))'
3857
+ device_replacement: '$1'
3858
+ brand_replacement: 'OnePlus'
3859
+ model_replacement: '$1'
3860
+ - regex: '; (OnePlus[ a-zA-z0-9]{0,50})((?: Build|\) AppleWebKit))'
3861
+ device_replacement: '$1'
3862
+ brand_replacement: 'OnePlus'
3863
+ model_replacement: '$1'
3804
3864
 
3805
3865
  #########
3806
3866
  # Orion
@@ -5481,6 +5541,15 @@ device_parsers:
5481
5541
  device_replacement: 'Motorola $1'
5482
5542
  brand_replacement: 'Motorola'
5483
5543
  model_replacement: '$1'
5544
+ - regex: '; (moto[ a-zA-z0-9()]{0,50});((?: Build|.{0,50}\) AppleWebKit))'
5545
+ device_replacement: '$1'
5546
+ brand_replacement: 'Motorola'
5547
+ model_replacement: '$1'
5548
+ - regex: '; {0,2}(moto)(.{0,50})(?: Build|\) AppleWebKit)'
5549
+ device_replacement: 'Motorola$2'
5550
+ brand_replacement: 'Motorola'
5551
+ model_replacement: '$2'
5552
+
5484
5553
 
5485
5554
  ##########
5486
5555
  # nintendo
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.11.0
4
+ version: 2.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Lucas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-18 00:00:00.000000000 Z
11
+ date: 2022-10-21 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
@@ -47,7 +47,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  requirements: []
50
- rubygems_version: 3.3.11
50
+ rubygems_version: 3.3.24
51
51
  signing_key:
52
52
  specification_version: 4
53
53
  summary: A simple, comprehensive Ruby gem for parsing user agent strings with the