browserino 3.0.1 → 4.0.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/.rubocop.yml +10 -0
- data/.travis.yml +6 -7
- data/bin/browserino +20 -52
- data/bin/console +5 -8
- data/browserino.gemspec +2 -6
- data/lib/browserino/client.rb +216 -0
- data/lib/browserino/config.rb +90 -0
- data/lib/browserino/definitions/aliasses.rb +12 -0
- data/lib/browserino/definitions/filters.rb +67 -0
- data/lib/browserino/definitions/labels.rb +45 -0
- data/lib/browserino/definitions/matchers.rb +290 -0
- data/lib/browserino/identity.rb +55 -0
- data/lib/browserino/integrate/action_controller.rb +4 -2
- data/lib/browserino/integrate/rails.rb +2 -0
- data/lib/browserino/methods.rb +110 -0
- data/lib/browserino/options.rb +44 -0
- data/lib/browserino/version.rb +72 -1
- data/lib/browserino.rb +16 -58
- metadata +15 -61
- data/lib/browserino/agent.rb +0 -116
- data/lib/browserino/browser.rb +0 -28
- data/lib/browserino/console.rb +0 -10
- data/lib/browserino/core/alias.rb +0 -23
- data/lib/browserino/core/helpers.rb +0 -141
- data/lib/browserino/core/lies.rb +0 -14
- data/lib/browserino/core/mapping.rb +0 -78
- data/lib/browserino/core/patterns.rb +0 -142
- data/lib/browserino/core/questions.rb +0 -88
- data/lib/browserino/core/supported.rb +0 -31
- data/lib/browserino/engine.rb +0 -16
- data/lib/browserino/operating_system.rb +0 -33
- data/lib/browserino/unknown.rb +0 -3
metadata
CHANGED
@@ -1,71 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browserino
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.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-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: json
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: bundler
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - "~>"
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
19
|
+
version: '1.14'
|
34
20
|
type: :development
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
24
|
- - "~>"
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
26
|
+
version: '1.14'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rake
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
33
|
+
version: '12.0'
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: term-ansicolor
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
40
|
+
version: '12.0'
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
42
|
name: rspec
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +52,6 @@ dependencies:
|
|
80
52
|
- - ">="
|
81
53
|
- !ruby/object:Gem::Version
|
82
54
|
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: tins
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
55
|
- !ruby/object:Gem::Dependency
|
98
56
|
name: coveralls
|
99
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,21 +103,17 @@ files:
|
|
145
103
|
- bin/setup
|
146
104
|
- browserino.gemspec
|
147
105
|
- lib/browserino.rb
|
148
|
-
- lib/browserino/
|
149
|
-
- lib/browserino/
|
150
|
-
- lib/browserino/
|
151
|
-
- lib/browserino/
|
152
|
-
- lib/browserino/
|
153
|
-
- lib/browserino/
|
154
|
-
- lib/browserino/
|
155
|
-
- lib/browserino/core/patterns.rb
|
156
|
-
- lib/browserino/core/questions.rb
|
157
|
-
- lib/browserino/core/supported.rb
|
158
|
-
- lib/browserino/engine.rb
|
106
|
+
- lib/browserino/client.rb
|
107
|
+
- lib/browserino/config.rb
|
108
|
+
- lib/browserino/definitions/aliasses.rb
|
109
|
+
- lib/browserino/definitions/filters.rb
|
110
|
+
- lib/browserino/definitions/labels.rb
|
111
|
+
- lib/browserino/definitions/matchers.rb
|
112
|
+
- lib/browserino/identity.rb
|
159
113
|
- lib/browserino/integrate/action_controller.rb
|
160
114
|
- lib/browserino/integrate/rails.rb
|
161
|
-
- lib/browserino/
|
162
|
-
- lib/browserino/
|
115
|
+
- lib/browserino/methods.rb
|
116
|
+
- lib/browserino/options.rb
|
163
117
|
- lib/browserino/version.rb
|
164
118
|
homepage: https://sidofc.github.io/projects/browserino/
|
165
119
|
licenses:
|
data/lib/browserino/agent.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
module Browserino
|
2
|
-
class Agent
|
3
|
-
include Core::Helpers, Core::Questions
|
4
|
-
attr_reader :ua
|
5
|
-
|
6
|
-
def initialize(info, ua = nil)
|
7
|
-
@ua = ua
|
8
|
-
@not = false
|
9
|
-
@info = post_process(info)
|
10
|
-
end
|
11
|
-
|
12
|
-
def name
|
13
|
-
@info[:name]
|
14
|
-
end
|
15
|
-
|
16
|
-
def browser_version(opts = {})
|
17
|
-
if ie? && engine_version && !opts[:compat]
|
18
|
-
(engine_version.to_f + 4.0).to_s
|
19
|
-
else
|
20
|
-
@info[:browser_version]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def library_version
|
25
|
-
@info[:library_version]
|
26
|
-
end
|
27
|
-
|
28
|
-
def library_name
|
29
|
-
@info[:name]
|
30
|
-
end
|
31
|
-
|
32
|
-
def engine_name
|
33
|
-
@info[:engine_name]
|
34
|
-
end
|
35
|
-
|
36
|
-
def engine_version
|
37
|
-
@info[:engine_version]
|
38
|
-
end
|
39
|
-
|
40
|
-
def system_name(opts = {})
|
41
|
-
if opts[:full]
|
42
|
-
@full_sys_name ||= [@info[:system_name],
|
43
|
-
fetch_system_version_name(@info[:system_name])]
|
44
|
-
else
|
45
|
-
@info[:system_name]
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def system_version
|
50
|
-
@info[:system_version]
|
51
|
-
end
|
52
|
-
|
53
|
-
def system_architecture
|
54
|
-
@info[:system_architecture]
|
55
|
-
end
|
56
|
-
|
57
|
-
def console_name
|
58
|
-
@info[:console_name]
|
59
|
-
end
|
60
|
-
|
61
|
-
def locale
|
62
|
-
@info[:locale]
|
63
|
-
end
|
64
|
-
|
65
|
-
def not
|
66
|
-
@not = true
|
67
|
-
self
|
68
|
-
end
|
69
|
-
|
70
|
-
def to_console_s
|
71
|
-
hash_for_to_s.each_with_object('') do |pair, a|
|
72
|
-
a << "\e[1;32;49m#{pair[0]}:\e[0m "
|
73
|
-
a << "\e[1;95;49m#{(pair[1] == '' ? 'nil' : pair[1])}\e[0m, "
|
74
|
-
end[0..-3]
|
75
|
-
end
|
76
|
-
|
77
|
-
def to_s(sep = '')
|
78
|
-
prev = ''
|
79
|
-
props = hash_for_to_s
|
80
|
-
res = props.each_with_object([]) do |v, a|
|
81
|
-
a << case v[0]
|
82
|
-
when :browser_version, :engine_version
|
83
|
-
prev + sep + (v[1].split('.').first || '')
|
84
|
-
when :library_version
|
85
|
-
props[:name] + sep + (v[1].split('.').first || '')
|
86
|
-
else v[1]
|
87
|
-
end
|
88
|
-
prev = v[1]
|
89
|
-
end
|
90
|
-
res.uniq.reject { |str| str == '' }.join ' '
|
91
|
-
end
|
92
|
-
|
93
|
-
def to_a
|
94
|
-
@info.keys.each_with_object([]) { |f, a| a.push([f, send(f)]) }
|
95
|
-
end
|
96
|
-
|
97
|
-
def to_h
|
98
|
-
to_a.each_with_object({}) { |a, h| h[a[0]] = a[1] }
|
99
|
-
end
|
100
|
-
|
101
|
-
def method_missing(method_sym, *args, &block)
|
102
|
-
name = method_sym.to_s.tr('?', '')
|
103
|
-
invertable case type_id(method_sym)
|
104
|
-
when :system then correct_system? name, *args
|
105
|
-
when :agent then correct_agent? name, *args
|
106
|
-
when :console then correct_console? name
|
107
|
-
when :library then correct_library? name, *args
|
108
|
-
else super
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def respond_to?(method_sym, *args, &block)
|
113
|
-
type_id(method_sym).nil? ? false : true
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
data/lib/browserino/browser.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
module Browserino
|
2
|
-
module Browser
|
3
|
-
def self.name(ua)
|
4
|
-
name = nil
|
5
|
-
patterns = Core::PATTERNS[:browser].merge(Core::PATTERNS[:bot])
|
6
|
-
.merge(Core::PATTERNS[:library])
|
7
|
-
agents = patterns.keys
|
8
|
-
|
9
|
-
until agents.empty? || !name.nil?
|
10
|
-
tmp = agents.shift
|
11
|
-
name = tmp if ua.match(patterns[tmp][:name])
|
12
|
-
end
|
13
|
-
|
14
|
-
name
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.version(ua, name)
|
18
|
-
patterns = Core::PATTERNS[:browser][name] || Core::PATTERNS[:library][name]
|
19
|
-
if patterns
|
20
|
-
Browserino.extract_match(ua.match(patterns[:version]), :version) do |v|
|
21
|
-
v.tr('_', '.')
|
22
|
-
end
|
23
|
-
else
|
24
|
-
UNKNOWN
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
data/lib/browserino/console.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Browserino
|
2
|
-
module Core
|
3
|
-
ALIAS = {
|
4
|
-
name: { 'ie' => /msie/ },
|
5
|
-
engine_name: { 'webkit' => /applewebkit/ },
|
6
|
-
system_name: {
|
7
|
-
'solaris' => /s(?:unos|olaris)/,
|
8
|
-
'linux' => /ubuntu|x11/,
|
9
|
-
'windows_phone' => /windows\sphone/,
|
10
|
-
'ios' => /ip(?:[ao]d|hone)/,
|
11
|
-
'webos' => /w(?:eb)?os/
|
12
|
-
},
|
13
|
-
console_name: {
|
14
|
-
'nintendo_ds' => /nintendo\s\d?ds/,
|
15
|
-
'wii' => /wiiu?/
|
16
|
-
},
|
17
|
-
system_architecture: {
|
18
|
-
'x64' => /(?:x86_|amd|wow)?64/,
|
19
|
-
'x32' => /(?:(?:x86_)?32|i[36]8[36])/
|
20
|
-
}
|
21
|
-
}.freeze
|
22
|
-
end
|
23
|
-
end
|
@@ -1,141 +0,0 @@
|
|
1
|
-
module Browserino
|
2
|
-
module Core
|
3
|
-
module Helpers
|
4
|
-
def browser_name
|
5
|
-
name_strict(:browsers)
|
6
|
-
end
|
7
|
-
|
8
|
-
def bot_name
|
9
|
-
name_strict(:bots)
|
10
|
-
end
|
11
|
-
|
12
|
-
def search_engine_name
|
13
|
-
name_strict(:search_engines)
|
14
|
-
end
|
15
|
-
|
16
|
-
def social_media_name
|
17
|
-
name_strict(:social_media)
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def post_process(h)
|
23
|
-
h[:library_version] = nil
|
24
|
-
case h[:name].to_s.to_sym
|
25
|
-
when :edge
|
26
|
-
h[:engine_name] = 'edgehtml'
|
27
|
-
h[:engine_version] = h[:browser_version].to_s.split('.').shift.to_s
|
28
|
-
when :ie
|
29
|
-
h[:engine_name] = 'trident'
|
30
|
-
when *SUPPORTED[:libraries]
|
31
|
-
h[:library_version] = h[:browser_version].dup
|
32
|
-
h[:browser_version] = nil
|
33
|
-
end
|
34
|
-
h
|
35
|
-
end
|
36
|
-
|
37
|
-
def name_strict(cat)
|
38
|
-
name if category? cat
|
39
|
-
end
|
40
|
-
|
41
|
-
def hash_for_to_s
|
42
|
-
out = to_h.each_with_object({}) do |a, h|
|
43
|
-
h[a[0]] = a[1].to_s.gsub(/[\s_]/, '-')
|
44
|
-
end
|
45
|
-
|
46
|
-
[:locale, :system_version].each { |k| out.delete(k) }
|
47
|
-
out.delete(:browser_version) if out[:name] == ''
|
48
|
-
out.delete(:engine_version) if out[:engine_name] == ''
|
49
|
-
|
50
|
-
out
|
51
|
-
end
|
52
|
-
|
53
|
-
def invertable(res)
|
54
|
-
if @not
|
55
|
-
@not = false
|
56
|
-
!res
|
57
|
-
else
|
58
|
-
res
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def compare_versions(a, b)
|
63
|
-
b = b.to_s.split('.')
|
64
|
-
!a.to_s.split('.').map { |v| v == b.shift }.include?(false)
|
65
|
-
end
|
66
|
-
|
67
|
-
def compare_sys_name_variations_with(name, version = nil)
|
68
|
-
v = version.to_s.tr(' ', '_').downcase
|
69
|
-
n = system_name(full: true).join.downcase.tr(' ', '_')
|
70
|
-
[n, n.gsub(/[\d\.\s_]+$/, '')].include?((name + v))
|
71
|
-
end
|
72
|
-
|
73
|
-
def correct_system?(name, version = nil)
|
74
|
-
sys_name = name.to_s.tr(' ', '_').downcase
|
75
|
-
if compare_sys_name_variations_with(sys_name, version) ||
|
76
|
-
(sys_name == system_name.tr(' ', '_') &&
|
77
|
-
compare_versions(version, system_version)) ||
|
78
|
-
(!version && sys_name == system_name.tr(' ', '_'))
|
79
|
-
true
|
80
|
-
else
|
81
|
-
false
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def correct_agent?(name, version = nil)
|
86
|
-
name = name.tr('_', ' ')
|
87
|
-
browser_equal = (name == browser_name || name == bot_name)
|
88
|
-
if version
|
89
|
-
browser_equal && compare_versions(version, browser_version)
|
90
|
-
else
|
91
|
-
browser_equal
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def correct_library?(name, version = nil)
|
96
|
-
name == library_name && (version.nil? || compare_versions(version, library_version))
|
97
|
-
end
|
98
|
-
|
99
|
-
def correct_console?(name)
|
100
|
-
name == console_name
|
101
|
-
end
|
102
|
-
|
103
|
-
def category?(cat)
|
104
|
-
n = name.to_s.gsub(/[\s-]/, '_').to_sym
|
105
|
-
SUPPORTED.each { |t, s| return true if s.include?(n) && t == cat }
|
106
|
-
nil
|
107
|
-
end
|
108
|
-
|
109
|
-
def type_id(method_sym)
|
110
|
-
name = method_sym.to_s.downcase.tr('?', '').to_sym
|
111
|
-
return :library if SUPPORTED[:libraries].include? name
|
112
|
-
return :console if SUPPORTED[:consoles].include? name
|
113
|
-
return :system if SUPPORTED[:operating_systems].include? name
|
114
|
-
return :agent if SUPPORTED[:browsers].concat(SUPPORTED[:bots]).include? name
|
115
|
-
nil
|
116
|
-
end
|
117
|
-
|
118
|
-
def fetch_system_version_name(name)
|
119
|
-
const = name.to_s.tr(' ', '_').upcase.to_sym
|
120
|
-
version = internal_sys_version(const)
|
121
|
-
if version && Mapping.const?(const)
|
122
|
-
res = Mapping.const_get(const)
|
123
|
-
.select { |_, v| true if v.include?(version) }.keys.first
|
124
|
-
res || system_version.split('.').first(2).join('.').downcase
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def internal_sys_version(name)
|
129
|
-
if system_version
|
130
|
-
if name =~ /mac|blackberry/i
|
131
|
-
system_version.split('.').first(2).join.to_i
|
132
|
-
elsif name =~ /win|android/i
|
133
|
-
system_version.tr('.', '').to_i
|
134
|
-
else
|
135
|
-
system_version.to_i
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
data/lib/browserino/core/lies.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
module Browserino
|
2
|
-
module Core
|
3
|
-
LIES = [
|
4
|
-
[%r{(Mozilla/[\d\.]+)}i, true],
|
5
|
-
[/9\.80/, /opera/i],
|
6
|
-
[%r{(?:apple)?webkit/[\d\.]+}i, /presto/i],
|
7
|
-
[/(?:ms)?ie/i, /rv:/i],
|
8
|
-
[/android/i, /tizen/i],
|
9
|
-
[/linux/i, /android|s(?:unos|olaris)|w(?:eb)?os|tizen/i],
|
10
|
-
[/x11/i, /bsd|s(?:unos|olaris)/i],
|
11
|
-
[/windows\snt/i, /windows\sphone/i]
|
12
|
-
].freeze
|
13
|
-
end
|
14
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
module Browserino
|
2
|
-
module Mapping
|
3
|
-
def self.const?(const)
|
4
|
-
constants(true).include?(const)
|
5
|
-
end
|
6
|
-
|
7
|
-
# Taken from https://en.wikipedia.org/wiki/Android_version_history
|
8
|
-
# 03 - 02 - 2017
|
9
|
-
ANDROID = {
|
10
|
-
'1.0' => [10],
|
11
|
-
'1.1' => [11],
|
12
|
-
'Cupcake 3' => [15],
|
13
|
-
'Cupcake 4' => [16],
|
14
|
-
'Eclair 5' => [20],
|
15
|
-
'Eclair 6' => [201],
|
16
|
-
'Eclair 7' => [21],
|
17
|
-
'Froyo 8' => [22, 221, 222, 223],
|
18
|
-
'Gingerbread 9' => [23, 231, 232],
|
19
|
-
'Gingerbread 10' => [233, 234, 235, 236, 237],
|
20
|
-
'Honeycomb 11' => [30],
|
21
|
-
'honeycomb 12' => [31],
|
22
|
-
'Honeycomb 13' => [32, 321, 322, 323, 324, 325, 326],
|
23
|
-
'Ice Cream Sandwich 14' => [40, 401, 402],
|
24
|
-
'Ice Cream Sandwich 15' => [403, 404],
|
25
|
-
'Jelly Bean 16' => [41, 411, 412],
|
26
|
-
'Jelly Bean 17' => [42, 421, 422],
|
27
|
-
'Jelly Bean 18' => [43, 431],
|
28
|
-
'KitKat 19' => [44, 441, 442, 443, 444],
|
29
|
-
'Lollipop 21' => [50, 501, 502],
|
30
|
-
'Lollipop 22' => [51, 511],
|
31
|
-
'Marshmallow 23' => [60, 601],
|
32
|
-
'Nougat 24' => [70],
|
33
|
-
'Nougat 25' => [71, 711]
|
34
|
-
}.freeze
|
35
|
-
|
36
|
-
# Taken from https://nl.wikipedia.org/wiki/OS_X
|
37
|
-
# 03 - 02 - 2017
|
38
|
-
MACINTOSH = {
|
39
|
-
'Cheetah' => [100],
|
40
|
-
'Puma' => [101],
|
41
|
-
'Jaguar' => [102],
|
42
|
-
'Panther' => [103],
|
43
|
-
'Tiger' => [104],
|
44
|
-
'Leopard' => [105],
|
45
|
-
'Snow Leopard' => [106],
|
46
|
-
'Lion' => [107],
|
47
|
-
'Mountain Lion' => [108],
|
48
|
-
'Mavericks' => [109],
|
49
|
-
'Yosemite' => [1010],
|
50
|
-
'El Capitan' => [1011],
|
51
|
-
'Sierra' => [1012]
|
52
|
-
}.freeze
|
53
|
-
|
54
|
-
# Taken from https://nl.wikipedia.org/wiki/Windows_NT
|
55
|
-
# 03 - 02 - 2017
|
56
|
-
WINDOWS = {
|
57
|
-
'3.1' => [31],
|
58
|
-
'3.5' => [35],
|
59
|
-
'4' => [40],
|
60
|
-
'2000' => [50],
|
61
|
-
'XP' => [51, 52],
|
62
|
-
'Vista' => [60],
|
63
|
-
'7' => [61],
|
64
|
-
'8' => [62],
|
65
|
-
'8.1' => [63],
|
66
|
-
'10' => [100]
|
67
|
-
}.freeze
|
68
|
-
|
69
|
-
TIZEN = {}.freeze
|
70
|
-
BLACKBERRY = {}.freeze
|
71
|
-
BSD = {}.freeze
|
72
|
-
IOS = {}.freeze
|
73
|
-
LINUX = {}.freeze
|
74
|
-
SOLARIS = {}.freeze
|
75
|
-
WEBOS = {}.freeze
|
76
|
-
WINDOWS_PHONE = {}.freeze
|
77
|
-
end
|
78
|
-
end
|
@@ -1,142 +0,0 @@
|
|
1
|
-
module Browserino
|
2
|
-
module Core
|
3
|
-
PATTERNS = {
|
4
|
-
browser: {
|
5
|
-
colibri: { name: /(?<name>colibri)/i,
|
6
|
-
version: %r{colibri/(?<version>[\d\.]+)}i },
|
7
|
-
|
8
|
-
samsungbrowser: { name: /(?<name>samsungbrowser)/i,
|
9
|
-
version: %r{samsungbrowser/(?<version>[\d\.]+)}i },
|
10
|
-
|
11
|
-
webosbrowser: { name: /(?<name>w(?:eb)?os(?:browser)?)/i,
|
12
|
-
version: %r{w(?:eb)?osbrowser/(?<version>[\d\.]+)}i },
|
13
|
-
|
14
|
-
vivaldi: { name: /(?<name>vivaldi)/i,
|
15
|
-
version: %r{vivaldi/(?<version>[\d\.]+)}i },
|
16
|
-
|
17
|
-
ucbrowser: { name: /(?<name>ucbrowser)/i,
|
18
|
-
version: %r{ucbrowser/?(?<version>[\d\.]+)}i },
|
19
|
-
|
20
|
-
bolt: { name: /(?<name>bolt)/i,
|
21
|
-
version: %r{bolt/(?<version>[\d\.]+)}i },
|
22
|
-
|
23
|
-
opera_mini: { name: /(?<name>ope?ra?\smini)/i,
|
24
|
-
version: %r{(?:ope?ra?\smini)/(?<version>[\d\.]+)}i },
|
25
|
-
|
26
|
-
opera: { name: /opera(?!ti(?:on|ng))|opr/i,
|
27
|
-
version: %r{(?:ope?ra?|version)[/\s](?<version>[\d\.]+)}i },
|
28
|
-
|
29
|
-
maxthon: { name: /(?<name>maxthon)/i,
|
30
|
-
version: %r{maxthon[\s/](?<version>[\d\.]+)}i },
|
31
|
-
|
32
|
-
edge: { name: /(?<name>edge)/i,
|
33
|
-
version: %r{edge/(?<version>[\d\.]+)}i },
|
34
|
-
|
35
|
-
ie: { name: /(?<name>msie|trident)/i,
|
36
|
-
version: /(?:(?:ms)?ie\s|rv:)(?<version>[\d\.]+)/i },
|
37
|
-
|
38
|
-
seamonkey: { name: /(?<name>seamonkey)/i,
|
39
|
-
version: %r{seamonkey/(?<version>[\d\.]+)}i },
|
40
|
-
|
41
|
-
servo: { name: /(?<name>servo)/i,
|
42
|
-
version: %r{servo/(?<version>[\d\.]+)}i },
|
43
|
-
|
44
|
-
firefox: {name: /(?<name>(?:fire|water)(?:fox|bird)
|
45
|
-
|ice(?:weasel|cat)|netscape|superswan)/xi,
|
46
|
-
version: %r{(?:(?:fire|water)(?:fox|bird)|ice(?:weasel|cat)
|
47
|
-
|netscape|superswan)/?(?<version>[\d\.]+)}xi
|
48
|
-
},
|
49
|
-
|
50
|
-
brave: { name: /(?<name>brave)/i,
|
51
|
-
version: %r{brave/(?<version>[\d\.]+)}i },
|
52
|
-
|
53
|
-
chrome: { name: /(?<name>chrome?(ium|plus)?)/i,
|
54
|
-
version: %r{chrome?(?:ium|plus)?/(?<version>[\d\.]+)}i },
|
55
|
-
|
56
|
-
safari: { name: /(?<name>safari)/i,
|
57
|
-
version: %r{(?:version|safari)/(?<version>[\d\.]+)}i }
|
58
|
-
},
|
59
|
-
|
60
|
-
library: {
|
61
|
-
php: { name: /(?<name>php)/i,
|
62
|
-
version: %r{php/(?<version>[\d\.]+)}i },
|
63
|
-
|
64
|
-
python: { name: /(?<name>python)/i,
|
65
|
-
version: %r{python-urllib/(?<version>[\d\.]+)}i },
|
66
|
-
|
67
|
-
perl: { name: /(?<name>perl)/i,
|
68
|
-
version: %r{perl/(?<version>[\d\.]+)}i },
|
69
|
-
|
70
|
-
java: { name: /(?<name>java)/i,
|
71
|
-
version: %r{java/(?<version>[\d\._]+)}i },
|
72
|
-
|
73
|
-
pycurl: { name: /(?<name>pycurl)/i,
|
74
|
-
version: %r{pycurl/(?<version>[\d\.]+)}i },
|
75
|
-
|
76
|
-
curl: { name: /(?<name>curl)/i,
|
77
|
-
version: %r{curl/(?<version>[\d\.a-z]+)}i }
|
78
|
-
},
|
79
|
-
|
80
|
-
bot: {
|
81
|
-
google: { name: /(?<name>googlebot)/i },
|
82
|
-
yahoo_slurp: { name: /(?<name>yahoo\!\sslurp)/i },
|
83
|
-
msn: { name: /(?<name>msnbot)/i },
|
84
|
-
bing: { name: /(?<name>bingbot)/i },
|
85
|
-
baiduspider: { name: /(?<name>baiduspider)/i },
|
86
|
-
yandex: { name: /(?<name>yandexbot)/i },
|
87
|
-
sosospider: { name: /(?<name>sosospider)/i },
|
88
|
-
exa: { name: /(?<name>exabot)/i },
|
89
|
-
sogou_spider: { name: /(?<name>sogou\s?spider)/i },
|
90
|
-
nutch: { name: /(?<name>nutch)/i },
|
91
|
-
scrapy: { name: /(?<name>scrapy)/i },
|
92
|
-
dataparksearch: { name: /(?<name>dataparksearch)/i },
|
93
|
-
holmes: { name: /(?<name>holmes)/i },
|
94
|
-
ask: { name: /(?<name>ask)\sjeeves/i },
|
95
|
-
duckduckgo: { name: /(?<name>duckduckgo)/i },
|
96
|
-
beslist: { name: /(?<name>beslistbot)/i },
|
97
|
-
facebook: { name: /(?<name>face(?:bookexternalhit|bot))/i },
|
98
|
-
twitter: { name: /(?<name>twitterbot)/i },
|
99
|
-
linkedin: { name: /(?<name>linkedinbot)/i },
|
100
|
-
instagram: { name: /(?<name>instagram)/i },
|
101
|
-
pinterest: { name: /(?<name>pinterest)/i },
|
102
|
-
tumblr: { name: /(?<name>tumblr)/i },
|
103
|
-
alexa: { name: /(?<name>ia_archiver)/i },
|
104
|
-
four_anything: { name: /(?<name>4anything)/i },
|
105
|
-
auto_email_spider: { name: /(?<name>autoemailspider)/i },
|
106
|
-
boston_project: { name: /(?<name>boston[_ ]project)/i },
|
107
|
-
atomz: { name: /(?<name>atomz)/i },
|
108
|
-
atomic_email_hunter: { name: /(?<name>atomic_email_hunter)/i },
|
109
|
-
altavista: { name: /(?<name>altavista)/i },
|
110
|
-
alkaline: { name: /(?<name>alkaline)/i },
|
111
|
-
acoi: { name: /(?<name>acoi)/i },
|
112
|
-
acoon: { name: /(?<name>acoon)/i },
|
113
|
-
accoona: { name: /(?<name>accoona)/i }
|
114
|
-
},
|
115
|
-
|
116
|
-
engine: {
|
117
|
-
name: /(?<name>((apple)?webkit|presto|gecko|trident))/i,
|
118
|
-
version: %r{(?:(?:apple)?webkit|presto|rv:|trident)
|
119
|
-
[/\s]?(?<version>[\d\.]+)}xi
|
120
|
-
},
|
121
|
-
|
122
|
-
operating_system: {
|
123
|
-
name: /(?<name>windows(?:\sphone(?:\sos)?)?|macintosh|android
|
124
|
-
|ip(?:[ao]d|hone)|blackberry|linux|ubuntu|x11|bsd
|
125
|
-
|s(?:unos|olaris)|w(?:eb)?os|tizen)/xi,
|
126
|
-
version: %r{(?:windows(?:\sphone(?:\sos)?)?|nt|mac\sos\sx|android
|
127
|
-
|(cpu\s|ip([ao]d|hone)\s)os|blackberry.*?version/|bb
|
128
|
-
|s(?:unos|olaris)/?|w(?:eb)?os/|tizen)
|
129
|
-
\s?(?<version>[\d\._]+)}xi,
|
130
|
-
architecture: /(?<architecture>((?:x|x86_|amd|wow)64)|i(3|6)86)/i,
|
131
|
-
mobile: /bolt|nokia|samsung(?!b)|mobi(?:le)?|android|i?p(?:[ao]d|hone)
|
132
|
-
|bb\d+|blackberry|iemobile|fennec|bada|meego|vodafone|t\-mobile
|
133
|
-
|opera\sm(?:ob|in)i/xi,
|
134
|
-
locale: /\s(?<locale>\w{2}(?:\-\w{2})?)[;\)]/
|
135
|
-
},
|
136
|
-
|
137
|
-
console: {
|
138
|
-
name: /(?<name>xbox|playstation|nintendo\s3?ds|wiiu?)/i
|
139
|
-
}
|
140
|
-
}.freeze
|
141
|
-
end
|
142
|
-
end
|