user_agent_parser 2.3.2 → 2.4.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.
- checksums.yaml +4 -4
- data/Readme.md +23 -1
- data/lib/user_agent_parser/device.rb +4 -2
- data/lib/user_agent_parser/parser.rb +14 -2
- data/vendor/uap-core/regexes.yaml +10 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 862bbfc92a30de199a32fd1dbebae607551298fa
|
4
|
+
data.tar.gz: 303212057c5fad5ce4279a21a966ec27bae860a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 023e8a39eed689f3a0dbfb958ad90e0023fe4f469fae924248e7eda016930e1519428ebeb087e99f92777cbb7dbce1a468143ab3399a3bf6b0476384e055e448
|
7
|
+
data.tar.gz: 70978a580d745b38fe07af2e4580696b4fc6200018e522261bd19ec13b3748a6e5d0742002104eed17667e4f00e29625ae1ca902303893577b339c616fe94709
|
data/Readme.md
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
# UserAgentParser [](http://travis-ci.org/ua-parser/uap-ruby)
|
1
|
+
# UserAgentParser [](http://travis-ci.org/ua-parser/uap-ruby) [](https://coveralls.io/github/ua-parser/uap-ruby)
|
2
2
|
|
3
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/ua-parser/uap-core).
|
4
4
|
|
5
5
|
## Supported Rubies
|
6
6
|
|
7
|
+
* Ruby 2.4
|
8
|
+
* Ruby 2.3
|
7
9
|
* Ruby 2.2
|
8
10
|
* Ruby 2.1
|
9
11
|
* Ruby 2.0
|
@@ -39,6 +41,26 @@ operating_system = user_agent.os
|
|
39
41
|
operating_system.to_s
|
40
42
|
=> "Windows Vista"
|
41
43
|
|
44
|
+
# Device information can also be determined from some devices
|
45
|
+
user_agent = UserAgentParser.parse "Mozilla/5.0 (Linux; Android 7.0; SAMSUNG SM-G930T Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/5.0 Chrome/51.0.2704.106 Mobile Safari/537.36"
|
46
|
+
=> #<UserAgentParser::UserAgent Samsung Internet 5.0 (Android 7.0) (Samsung SM-G930T)>
|
47
|
+
user_agent.device.family
|
48
|
+
=> "Samsung SM-G930T"
|
49
|
+
user_agent.device.brand
|
50
|
+
=> "Samsung"
|
51
|
+
user_agent.device.model
|
52
|
+
=> "SM-G930T"
|
53
|
+
|
54
|
+
user_agent = UserAgentParser.parse "Mozilla/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) GSA/23.1.148956103 Mobile/14D27 Safari/600.1.4"
|
55
|
+
=> #<UserAgentParser::UserAgent Mobile Safari 10.2.1 (iOS 10.2.1) (iPad)>
|
56
|
+
irb(main):026:0> user_agent.device.family
|
57
|
+
=> "iPad"
|
58
|
+
irb(main):027:0> user_agent.device.brand
|
59
|
+
=> "Apple"
|
60
|
+
irb(main):028:0> user_agent.device.model
|
61
|
+
=> "iPad"
|
62
|
+
|
63
|
+
|
42
64
|
# The parser database will be loaded and parsed on every call to
|
43
65
|
# UserAgentParser.parse. To avoid this, instantiate your own Parser instance.
|
44
66
|
parser = UserAgentParser::Parser.new
|
@@ -1,11 +1,13 @@
|
|
1
1
|
module UserAgentParser
|
2
2
|
class Device
|
3
|
-
attr_reader :family
|
3
|
+
attr_reader :family, :model, :brand
|
4
4
|
|
5
5
|
alias_method :name, :family
|
6
6
|
|
7
|
-
def initialize(family = nil)
|
7
|
+
def initialize(family = nil, model = nil, brand = nil)
|
8
8
|
@family = family || 'Other'
|
9
|
+
@model = model || @family
|
10
|
+
@brand = brand
|
9
11
|
end
|
10
12
|
|
11
13
|
def to_s
|
@@ -128,14 +128,26 @@ module UserAgentParser
|
|
128
128
|
|
129
129
|
def device_from_pattern_match(pattern, match)
|
130
130
|
match = match.to_a.map(&:to_s)
|
131
|
-
family = match[1]
|
131
|
+
family = model = match[1]
|
132
|
+
brand = nil
|
132
133
|
|
133
134
|
if pattern["device_replacement"]
|
134
135
|
family = pattern["device_replacement"]
|
135
136
|
match.each_with_index { |m,i| family = family.sub("$#{i}", m) }
|
136
137
|
end
|
138
|
+
if pattern["model_replacement"]
|
139
|
+
model = pattern["model_replacement"]
|
140
|
+
match.each_with_index { |m,i| model = model.sub("$#{i}", m) }
|
141
|
+
end
|
142
|
+
if pattern["brand_replacement"]
|
143
|
+
brand = pattern["brand_replacement"]
|
144
|
+
match.each_with_index { |m,i| brand = brand.sub("$#{i}", m) }
|
145
|
+
brand.strip!
|
146
|
+
end
|
147
|
+
|
148
|
+
model.strip! unless model.nil?
|
137
149
|
|
138
|
-
Device.new(family.strip)
|
150
|
+
Device.new(family.strip, model, brand)
|
139
151
|
end
|
140
152
|
|
141
153
|
def version_from_segments(*segments)
|
@@ -12,6 +12,10 @@ user_agent_parsers:
|
|
12
12
|
- regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)'
|
13
13
|
family_replacement: 'PingdomBot'
|
14
14
|
|
15
|
+
# New Relic Pinger
|
16
|
+
- regex: '(NewRelicPinger)/(\d+)\.(\d+)'
|
17
|
+
family_replacement: 'NewRelicPingerBot'
|
18
|
+
|
15
19
|
#StatusCake
|
16
20
|
- regex: '(\(StatusCake\))'
|
17
21
|
family_replacement: 'StatusCakeBot'
|
@@ -311,7 +315,7 @@ user_agent_parsers:
|
|
311
315
|
# Slack desktop client (needs to be before Apple Mail, Electron, and Chrome as it gets wrongly detected on Mac OS otherwise)
|
312
316
|
- regex: '(Slack_SSB)/(\d+)\.(\d+)\.(\d+)'
|
313
317
|
family_replacement: 'Slack Desktop Client'
|
314
|
-
|
318
|
+
|
315
319
|
# HipChat provides a version on Mac, but not on Windows.
|
316
320
|
# Needs to be before Chrome on Windows, and AppleMail on Mac.
|
317
321
|
- regex: '(HipChat)/?(\d+)?'
|
@@ -1991,6 +1995,11 @@ device_parsers:
|
|
1991
1995
|
device_replacement: 'Gionee $1'
|
1992
1996
|
brand_replacement: 'Gionee'
|
1993
1997
|
model_replacement: '$1'
|
1998
|
+
- regex: '\sGIONEE[-\s_](\w*)'
|
1999
|
+
regex_flag: 'i'
|
2000
|
+
device_replacement: 'Gionee $1'
|
2001
|
+
brand_replacement: 'Gionee'
|
2002
|
+
model_replacement: '$1'
|
1994
2003
|
|
1995
2004
|
#########
|
1996
2005
|
# GoClever
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: user_agent_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.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: 2017-
|
12
|
-
dependencies:
|
11
|
+
date: 2017-09-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: coveralls
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.21
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.21
|
13
27
|
description: A simple, comprehensive Ruby gem for parsing user agent strings with
|
14
28
|
the help of BrowserScope's UA database
|
15
29
|
email: t@toolmantim.com
|
@@ -49,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
63
|
version: '0'
|
50
64
|
requirements: []
|
51
65
|
rubyforge_project:
|
52
|
-
rubygems_version: 2.6.
|
66
|
+
rubygems_version: 2.6.12
|
53
67
|
signing_key:
|
54
68
|
specification_version: 4
|
55
69
|
summary: A simple, comprehensive Ruby gem for parsing user agent strings with the
|