lightweight_user_agent_parser 1.3.1 → 1.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcb44b3bbeb4da6e7c0de51a266c92de697775b1
|
4
|
+
data.tar.gz: 794051f4544389286b69c7c3a3f6c3c61e9f4d3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93b2df1cbb426b23c16f9e673c8cb15a1b1218bc036d691027ff4daf0273b4abcfeedb40f3a50eacfb32f5b4ad372a00726fb9d72a956d4e672ac01e85c9e847
|
7
|
+
data.tar.gz: f70ab3a2f275fa8f30bfb8449c9c5554c4f58e58bd1f66429f304c72bdf16e7fd8f1e766b2fcafb25ca7c3c283d6baac8991134201eb509629646a0d4d11abfd
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
|
1
3
|
require 'lightweight_user_agent_parser/version'
|
2
4
|
require 'lightweight_user_agent_parser/regexp'
|
3
5
|
require 'lightweight_user_agent_parser/content_analyzer'
|
@@ -16,7 +18,7 @@ class LightweightUserAgentParser
|
|
16
18
|
end
|
17
19
|
|
18
20
|
def platform
|
19
|
-
@platform ||=
|
21
|
+
@platform ||= lambda {
|
20
22
|
|
21
23
|
DEVICES.each do |name, regexp|
|
22
24
|
if user_agent_string =~ regexp[:strict]
|
@@ -41,17 +43,32 @@ class LightweightUserAgentParser
|
|
41
43
|
|
42
44
|
(mobile or not desktop) and not empty?
|
43
45
|
end
|
44
|
-
|
45
46
|
alias mobile? is_mobile?
|
46
47
|
|
47
48
|
def anonymized?
|
48
49
|
!!(user_agent_string =~ ANONYMIZED_REGEXP)
|
49
50
|
end
|
50
51
|
|
52
|
+
def md5
|
53
|
+
Digest::MD5.hexdigest(user_agent_string)
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_hash
|
57
|
+
(TO_HASH_METHODS).reduce({}) do |memory, method_name|
|
58
|
+
hash_key = method_name.to_s.sub(/\?$/, '').to_sym
|
59
|
+
|
60
|
+
memory.merge!(hash_key => self.public_send(method_name))
|
61
|
+
|
62
|
+
memory
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
51
66
|
protected
|
52
67
|
|
53
68
|
def empty?
|
54
69
|
user_agent_string.empty?
|
55
70
|
end
|
56
71
|
|
72
|
+
TO_HASH_METHODS = self.public_instance_methods(false)-[:to_hash, :user_agent_string, :to_s, :is_mobile?]
|
73
|
+
|
57
74
|
end
|
@@ -17,12 +17,6 @@ class LightweightUserAgentParser
|
|
17
17
|
inner_content_elements && inner_content_elements[2]
|
18
18
|
end
|
19
19
|
|
20
|
-
def to_hash
|
21
|
-
(ContentAnalyzer.public_instance_methods(false)-[:to_hash]).reduce({}) do |memory,method_name|
|
22
|
-
memory.merge!(method_name => self.public_send(method_name));memory
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
20
|
protected
|
27
21
|
|
28
22
|
def inner_content_elements
|
@@ -114,7 +114,7 @@ RSpec.describe LightweightUserAgentParser do
|
|
114
114
|
end
|
115
115
|
|
116
116
|
describe '#is_mobile?' do
|
117
|
-
subject { described_class.new(ua_str).
|
117
|
+
subject { described_class.new(ua_str).is_mobile? }
|
118
118
|
TEST_CASES.each do |meta|
|
119
119
|
|
120
120
|
context "when platform is #{meta[:platform]}" do
|
@@ -132,4 +132,37 @@ RSpec.describe LightweightUserAgentParser do
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
+
describe '#to_hash' do
|
136
|
+
subject { described_class.new(user_agent_string).to_hash }
|
137
|
+
|
138
|
+
TEST_CASES.each do |meta|
|
139
|
+
|
140
|
+
context "when user agent string is: #{meta[:ua_str].inspect}" do
|
141
|
+
let(:user_agent_string) { meta[:ua_str] }
|
142
|
+
|
143
|
+
it 'should parse platform and mobile state' do
|
144
|
+
|
145
|
+
expected_hash = {
|
146
|
+
mobile: meta[:mobile],
|
147
|
+
platform: meta[:platform].to_sym,
|
148
|
+
md5: Digest::MD5.hexdigest(meta[:ua_str]),
|
149
|
+
anonymized: meta[:ua_str].include?('anonymized') ? true : false
|
150
|
+
}
|
151
|
+
|
152
|
+
is_expected.to eq expected_hash
|
153
|
+
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
describe '#md5' do
|
162
|
+
subject{ described_class.new(user_agent_string).md5}
|
163
|
+
let(:user_agent_string){'UCWEB/2.0 (Linux; U; Adr 4.2.1; zh-CN; Lenovo A3000) U2/1.0.0 UCBrowser/9.8.5.442 U2/1.0.0 Mobile'}
|
164
|
+
|
165
|
+
it { is_expected.to eq '50e330f013751df448e496bc19def744' }
|
166
|
+
end
|
167
|
+
|
135
168
|
end
|