browserino 4.1.0 → 4.2.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 +4 -4
- data/.codeclimate.yml +19 -0
- data/.gitignore +2 -0
- data/.rspec +1 -1
- data/.rubocop.yml +10 -4
- data/.travis.yml +3 -2
- data/browserino.gemspec +4 -2
- data/lib/browserino/client.rb +89 -120
- data/lib/browserino/config.rb +20 -24
- data/lib/browserino/definitions/aliasses.rb +13 -8
- data/lib/browserino/definitions/filters.rb +40 -26
- data/lib/browserino/definitions/labels.rb +36 -35
- data/lib/browserino/definitions/matchers/bots.rb +208 -0
- data/lib/browserino/definitions/matchers/browsers.rb +377 -0
- data/lib/browserino/definitions/matchers/emails.rb +22 -0
- data/lib/browserino/definitions/matchers/global.rb +52 -0
- data/lib/browserino/definitions/matchers/libraries.rb +16 -0
- data/lib/browserino/definitions/matchers/mediaplayers.rb +12 -0
- data/lib/browserino/definitions/matchers/rss.rb +46 -0
- data/lib/browserino/definitions/matchers/validators.rb +37 -0
- data/lib/browserino/definitions/matchers.rb +7 -555
- data/lib/browserino/matcher.rb +5 -5
- data/lib/browserino/methods.rb +18 -17
- data/lib/browserino/options.rb +8 -0
- data/lib/browserino/version.rb +4 -4
- metadata +34 -11
data/lib/browserino/matcher.rb
CHANGED
@@ -23,13 +23,13 @@ module Browserino
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def ===(other)
|
26
|
-
return false
|
26
|
+
return false unless (name = properties[:name])
|
27
27
|
|
28
28
|
case other
|
29
|
-
when Regexp then other =~
|
30
|
-
when String then other.to_sym ==
|
31
|
-
when Symbol then other ==
|
32
|
-
when Matcher then other.
|
29
|
+
when Regexp then other =~ name
|
30
|
+
when String then other.to_sym == name
|
31
|
+
when Symbol then other == name
|
32
|
+
when Matcher then other.name == name
|
33
33
|
else false
|
34
34
|
end
|
35
35
|
end
|
data/lib/browserino/methods.rb
CHANGED
@@ -4,20 +4,19 @@ module Browserino
|
|
4
4
|
def self.analyze(ua, matcher = nil)
|
5
5
|
@defaults ||= config.global_matchers.map(&:properties).reduce(&:merge)
|
6
6
|
|
7
|
-
props
|
8
|
-
like
|
9
|
-
props
|
10
|
-
|
11
|
-
props = with_labels props
|
12
|
-
like = Client.new props.merge(like_attrs(props, like, ua)) if like
|
7
|
+
props = @defaults.merge(matcher && matcher.properties || {})
|
8
|
+
like = props.delete :like
|
9
|
+
props = mass_collect props, ua
|
10
|
+
like = Client.new props.merge(like_attrs(props, like, ua)) if like
|
13
11
|
|
14
12
|
Client.new props, like
|
15
13
|
end
|
16
14
|
|
17
15
|
def self.like_attrs(props, like, user_agent)
|
18
|
-
|
16
|
+
version = config.matchers.select { |m| m == like }
|
17
|
+
.first.properties[:version]
|
19
18
|
fattrs = { name: like }
|
20
|
-
fattrs[:version] =
|
19
|
+
fattrs[:version] = version if version.is_a? Regexp
|
21
20
|
fattrs[:version] ||= smart_matchers(fattrs)[:version]
|
22
21
|
|
23
22
|
props.dup.merge collect(fattrs, user_agent)
|
@@ -69,13 +68,19 @@ module Browserino
|
|
69
68
|
|
70
69
|
def self.parse_detector(detect, properties)
|
71
70
|
pat = properties.each_with_object(detect[:with].dup) do |(key, val), str|
|
72
|
-
replacement = val.to_s.strip
|
71
|
+
replacement = val.to_s.strip.gsub '_', '[_\s-]'
|
73
72
|
str.gsub! ":#{key}", replacement unless replacement.empty?
|
74
73
|
end
|
75
74
|
|
76
75
|
Regexp.new pat, get_flags(*detect[:flags].to_a)
|
77
76
|
end
|
78
77
|
|
78
|
+
def self.mass_collect(props, ua)
|
79
|
+
props = collect props, ua
|
80
|
+
props = collect_with_smart_watchers props, ua
|
81
|
+
with_labels props
|
82
|
+
end
|
83
|
+
|
79
84
|
def self.collect(properties, ua)
|
80
85
|
properties.each_with_object({}) do |(n, v), r|
|
81
86
|
r[n] = convert (v.is_a?(Regexp) ? v.match(ua).to_a[1] : v), format: n
|
@@ -92,16 +97,12 @@ module Browserino
|
|
92
97
|
end
|
93
98
|
|
94
99
|
def self.get_flags(*flags)
|
95
|
-
val
|
96
|
-
|
97
|
-
flags.each do |flag|
|
100
|
+
flags.reduce(0) do |val, flag|
|
98
101
|
case flag.to_sym
|
99
|
-
when :m then val
|
100
|
-
when :i then val
|
101
|
-
when :x then val
|
102
|
+
when :m then val | Regexp::MULTILINE
|
103
|
+
when :i then val | Regexp::IGNORECASE
|
104
|
+
when :x then val | Regexp::EXTENDED
|
102
105
|
end
|
103
106
|
end
|
104
|
-
|
105
|
-
val
|
106
107
|
end
|
107
108
|
end
|
data/lib/browserino/options.rb
CHANGED
@@ -24,6 +24,10 @@ module Browserino
|
|
24
24
|
@options
|
25
25
|
end
|
26
26
|
|
27
|
+
def to_h
|
28
|
+
@options
|
29
|
+
end
|
30
|
+
|
27
31
|
def to_a
|
28
32
|
@options.to_a
|
29
33
|
end
|
@@ -32,6 +36,10 @@ module Browserino
|
|
32
36
|
@options.to_s
|
33
37
|
end
|
34
38
|
|
39
|
+
def to_str
|
40
|
+
to_s
|
41
|
+
end
|
42
|
+
|
35
43
|
private
|
36
44
|
|
37
45
|
def opt(sym)
|
data/lib/browserino/version.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Browserino
|
4
|
-
|
5
|
-
|
6
|
-
def self.version
|
7
|
-
@version ||= Version.new VERSION.dup
|
4
|
+
def self.version(current = '4.2.0')
|
5
|
+
@version ||= Version.new current
|
8
6
|
end
|
9
7
|
|
10
8
|
# This class makes versions easily comparable using logical operators
|
@@ -77,6 +75,8 @@ module Browserino
|
|
77
75
|
other = Version.new other unless other.is_a? Version
|
78
76
|
subsize = [size, other.size].min
|
79
77
|
|
78
|
+
return if subsize.zero? && size > 0
|
79
|
+
|
80
80
|
(self[0...subsize] <=> other[0...subsize]).send op, 0
|
81
81
|
end
|
82
82
|
end
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browserino
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sidney Liebrand
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: codeclimate-test-reporter
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description:
|
98
112
|
email:
|
99
113
|
- sidneyliebrand@gmail.com
|
@@ -102,6 +116,7 @@ executables:
|
|
102
116
|
extensions: []
|
103
117
|
extra_rdoc_files: []
|
104
118
|
files:
|
119
|
+
- ".codeclimate.yml"
|
105
120
|
- ".coveralls.yml"
|
106
121
|
- ".gitignore"
|
107
122
|
- ".rspec"
|
@@ -123,6 +138,14 @@ files:
|
|
123
138
|
- lib/browserino/definitions/filters.rb
|
124
139
|
- lib/browserino/definitions/labels.rb
|
125
140
|
- lib/browserino/definitions/matchers.rb
|
141
|
+
- lib/browserino/definitions/matchers/bots.rb
|
142
|
+
- lib/browserino/definitions/matchers/browsers.rb
|
143
|
+
- lib/browserino/definitions/matchers/emails.rb
|
144
|
+
- lib/browserino/definitions/matchers/global.rb
|
145
|
+
- lib/browserino/definitions/matchers/libraries.rb
|
146
|
+
- lib/browserino/definitions/matchers/mediaplayers.rb
|
147
|
+
- lib/browserino/definitions/matchers/rss.rb
|
148
|
+
- lib/browserino/definitions/matchers/validators.rb
|
126
149
|
- lib/browserino/integrate/action_controller.rb
|
127
150
|
- lib/browserino/integrate/rails.rb
|
128
151
|
- lib/browserino/matcher.rb
|
@@ -149,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
172
|
version: '0'
|
150
173
|
requirements: []
|
151
174
|
rubyforge_project:
|
152
|
-
rubygems_version: 2.6.
|
175
|
+
rubygems_version: 2.6.12
|
153
176
|
signing_key:
|
154
177
|
specification_version: 4
|
155
178
|
summary: A browser identification gem with command line and Rails (>= 3.2.0) integration
|