browserino 4.0.0 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +18 -0
- data/.travis.yml +5 -1
- data/bin/browserino +1 -1
- data/bin/console +3 -4
- data/browserino.gemspec +2 -1
- data/lib/browserino/client.rb +48 -31
- data/lib/browserino/config.rb +43 -24
- data/lib/browserino/definitions/aliasses.rb +2 -0
- data/lib/browserino/definitions/filters.rb +32 -20
- data/lib/browserino/definitions/labels.rb +14 -8
- data/lib/browserino/definitions/matchers.rb +434 -167
- data/lib/browserino/{identity.rb → matcher.rb} +9 -8
- data/lib/browserino/methods.rb +42 -45
- data/lib/browserino/options.rb +3 -2
- data/lib/browserino/version.rb +12 -3
- data/lib/browserino.rb +4 -4
- metadata +17 -3
@@ -1,32 +1,66 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Browserino.config.define do
|
4
|
+
# Aside from the logic going on in this file, the order in which things are
|
5
|
+
# written is important! If you would move the :midori matcher below the
|
6
|
+
# :safari matcher and you would run rspec, you would see failures due to
|
7
|
+
# the change in order. The order can be changed - no problem,
|
8
|
+
# as long as the tests keep running
|
9
|
+
|
3
10
|
# a set of global matchers that will use formatted properties found earlier
|
4
11
|
# they will also be applied to every matcher unless that matcher has it's own
|
5
|
-
# property
|
6
|
-
|
7
|
-
smart_match :
|
12
|
+
# (or inherited a property through like) property set up for
|
13
|
+
# the defined smart matcher
|
14
|
+
smart_match :version, with: ':name[\s/]?v?([\d\._]+)', flags: [:i]
|
15
|
+
smart_match :engine_version, with: ':engine[\s/]?([\d\._]+)', flags: [:i]
|
8
16
|
|
9
|
-
# a simple set of global matchers that will be merged
|
10
|
-
# with
|
17
|
+
# a simple set of global matchers that will be merged and scanned
|
18
|
+
# with a specific matcher when the final client object is created
|
11
19
|
match do
|
12
|
-
locale %r{(?<!nintendo)[;\s](
|
13
|
-
architecture %r{((?:(?:x|x86_|amd|wow|win)64)|i[36]86)}i
|
20
|
+
locale %r{(?<!nintendo)[;\s(]([a-z]{2}(?:[-_][a-z]{2})?)[;)]}i
|
21
|
+
architecture %r{((?:(?:x|x86_|amd|wow|win)64)|i[36]86|arm)}i
|
22
|
+
|
14
23
|
mobile %r{(bolt|nokia|samsung(?!b)|mobi(?:le)?|i?p(?:[ao]d|hone)
|
15
24
|
|android|bb\d+|blackberry|iemobile|fennec|bada|meego
|
16
|
-
|tizen|vodafone|t\-mobile|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|w(?:
|
21
|
-
|
22
|
-
|
23
|
-
|
25
|
+
|tizen|vodafone|t\-mobile|kindle|kf\w\w
|
26
|
+
|opera\sm(?:ob|in)i)}xi
|
27
|
+
|
28
|
+
platform %r{.*(wiiu?|nintendo\sds|playstation|windows(?:\sphone)?
|
29
|
+
|kf\w\w|mac(?:intosh|\sos\sx)|android|ip(?:[ao]d|hone)
|
30
|
+
|blackberry|risc|linux|ubuntu|x11|bsd|s(?:unos|olaris)
|
31
|
+
|tizen|xbox|amigaos|w(?:eb)?os|(?<!mi)cros|kindle)}xi
|
32
|
+
|
33
|
+
platform_version %r{(?:windows(?:\sphone(?:\sos)?)?|nt|android|linux/?
|
34
|
+
|mac\sos\sx(?:\s\w+\s)?|(?:cpu\s|ip(?:[ao]d|hone)\s)os
|
35
|
+
|blackberry|bb|s(?:unos|olaris)/?|w(?:eb)?os/|tizen
|
36
|
+
|risc\s*|amigaos/?|cros\s[\w-]+|ows\sxp)\s?([\d\._]+)}xi
|
37
|
+
end
|
38
|
+
|
39
|
+
# automatically set type to :email for each defined matcher
|
40
|
+
emails do
|
41
|
+
match %r{outlook}i, name: :outlook
|
42
|
+
match %r{airmail}i, name: :airmail, engine: :webkit
|
43
|
+
match %r{barca}i, name: :barca, version: %r{barca(?:pro)?/([\d\.]+)}i
|
44
|
+
|
45
|
+
match %r{ggpht}i do
|
46
|
+
name :gmail
|
47
|
+
engine %r{(trident|gecko|webkit|presto|blink|servo|edge)}i
|
48
|
+
engine_version %r{(?:rv:|trident|webkit|presto|blink
|
49
|
+
|servo|edge)[\s/]?([\d\.]+)}i
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# these are the same as above except with engine set to gecko and
|
54
|
+
# to look for engine_version using gecko version pattern
|
55
|
+
emails engine: :gecko, engine_version: %r{rv:\s?([\d\.]+)}i do
|
56
|
+
match %r{thunderbird}i, name: :thunderbird
|
57
|
+
match %r{postbox}i, name: :postbox
|
24
58
|
end
|
25
59
|
|
26
60
|
# automatically set type to :browser for each defined matcher
|
27
61
|
browsers do
|
28
|
-
# a single matcher that will create
|
29
|
-
#
|
62
|
+
# a single matcher that will create a matcher for a specific match
|
63
|
+
# matchers are added in an array in order of definition - higher is better
|
30
64
|
# aliasses are prepended to the list instead of appended (e.g. like blocks)
|
31
65
|
# this ensures that aliasses will be matched before any regular matcher
|
32
66
|
match %r{maxthon}i do
|
@@ -36,29 +70,14 @@ Browserino.config.define do
|
|
36
70
|
# saves the first capture group
|
37
71
|
# -- { blk } # => will create a dynamic method that returns the result
|
38
72
|
# of the block, it will be executed within an
|
39
|
-
# instantiated Client object
|
73
|
+
# instantiated Client object (right after creation)
|
40
74
|
name :maxthon
|
41
|
-
|
42
|
-
version %r{maxthon[/\s]([\d\.]+)}i
|
43
75
|
engine %r{(webkit|presto|gecko|trident)}i
|
44
|
-
engine_version %r{(?:webkit|presto|gecko|trident)/([\d\.]+)}i
|
45
|
-
end
|
46
|
-
|
47
|
-
match %r{retawq}i do
|
48
|
-
name :retawq
|
49
|
-
locale %r{\[(\w{2}(?:\-\w{2})?)\]}i
|
50
|
-
end
|
51
|
-
|
52
|
-
match %r{lynx}i do
|
53
|
-
name :lynx
|
54
76
|
end
|
55
77
|
|
56
78
|
match %r{ucbrowser}i do
|
57
79
|
name :ucbrowser
|
58
|
-
|
59
|
-
version %r{ucbrowser/?([\d\.]+)}i
|
60
80
|
engine %r{(trident|gecko|webkit|presto)}i
|
61
|
-
engine_version %r{(?:trident|gecko|webkit|presto)/([\d\.]+)}i
|
62
81
|
end
|
63
82
|
|
64
83
|
match %r{edge}i do
|
@@ -69,222 +88,470 @@ Browserino.config.define do
|
|
69
88
|
|
70
89
|
match %r{ope?ra?\smini}i do
|
71
90
|
name :opera_mini
|
72
|
-
|
73
91
|
version %r{ope?ra?\smini/([\d\.]+)}i
|
74
92
|
engine %r{(presto|webkit)}i
|
75
|
-
engine_version %r{(?:presto|webkit)/([\d\.]+)}i
|
76
93
|
end
|
77
94
|
|
78
95
|
match %r{opera[^\w]}i do
|
79
96
|
name :opera
|
80
|
-
|
81
97
|
version %r{(?:opera[\s/]|version/)([\d\.]+)}i
|
82
98
|
engine %r{(presto|webkit)}i
|
83
|
-
engine_version %r{(?:presto|webkit)/([\d\.]+)}i
|
84
99
|
end
|
85
100
|
|
101
|
+
# escape has to come before IE
|
102
|
+
match %r{escape}i, name: :escape
|
103
|
+
|
104
|
+
match %r{flock}i, name: :flock, engine: %r{(webkit|gecko|servo)}i,
|
105
|
+
engine_version: %r{(?:webkit|rv:|servo)[\s/]?([\d\.]+)}i
|
106
|
+
|
107
|
+
match %r{sunrise}i, name: :sunrise, engine: %r{(webkit|gecko|servo)}i,
|
108
|
+
engine_version: %r{(?:webkit|rv:|servo)[\s/]?([\d\.]+)}i
|
109
|
+
|
86
110
|
match %r{msie|trident}i do
|
87
111
|
name :ie
|
88
112
|
engine :trident
|
89
|
-
|
90
113
|
version %r{(?:(?:ms)?ie\s|rv:)([\d\.]+)}i
|
91
114
|
modern? { version >= 10 }
|
92
115
|
end
|
93
116
|
|
94
117
|
match %r{chrome(?:ium)?}i do
|
95
118
|
name :chrome
|
96
|
-
|
97
119
|
version %r{chrome(?:ium)?/([\d\.]+)}i
|
98
120
|
engine %r{(webkit|blink)}i
|
99
|
-
engine_version %r{(?:webkit|blink)/([\d\.]+)}i
|
100
121
|
modern? { version >= 50 }
|
101
122
|
end
|
102
123
|
|
103
|
-
match %r{
|
104
|
-
|
124
|
+
match %r{nintendobrowser}i, name: :nintendobrowser, engine: :webkit
|
125
|
+
match %r{deskbrowse}i, name: :deskbrowse, engine: :webkit
|
126
|
+
match %r{qupzilla}i, name: :qupzilla, engine: :webkit
|
127
|
+
match %r{midori}i, name: :midori, engine: :webkit
|
128
|
+
match %r{shiira}i, name: :shiira, engine: :webkit
|
129
|
+
match %r{amigavoyager}i, name: :amigavoyager
|
130
|
+
match %r{(?<!(?:net))surf}i, name: :surf
|
131
|
+
|
132
|
+
match %r{sundance}i, name: :sundance,
|
133
|
+
version: %r{(?:version/|sundance/)([\d\.]+)}i
|
134
|
+
|
135
|
+
match %r{inet\sbrowser}i, name: :inet_browser, platform: :star_blade_os,
|
136
|
+
version: %r{browser[\s/]?([\d\.]+)}i
|
105
137
|
|
138
|
+
match %r{ibm\swebexplorer}i, name: :ibm_webexplorer, platform: :os2,
|
139
|
+
version: %r{bexplorer\s?/v?([\d\.]+)}i
|
140
|
+
|
141
|
+
match %r{element\sbrowser}i, name: :element_browser, engine: :webkit,
|
142
|
+
version: %r{browser[\s/]([\d\.]+)}i
|
143
|
+
|
144
|
+
match %r{navscape}i, name: :navscape, engine: :webkit,
|
145
|
+
version: %r{navscape/(?:\w+-)?([\d\.]+)}i
|
146
|
+
|
147
|
+
match %r{firefox|phoenix}i do
|
148
|
+
name :firefox
|
106
149
|
engine %r{(gecko|servo)}i
|
107
150
|
engine_version %r{(?:rv:\s?|servo/)([\d\.]+)}i
|
108
151
|
modern? { version >= 50 }
|
109
152
|
end
|
110
153
|
|
111
|
-
match %r{konqueror}i do
|
112
|
-
name :konqueror
|
113
|
-
end
|
114
|
-
|
115
|
-
match %r{midori}i do
|
116
|
-
name :midori
|
117
|
-
engine :webkit
|
118
|
-
end
|
119
|
-
|
120
154
|
match %r{safari}i do
|
121
155
|
name :safari
|
122
156
|
engine :webkit
|
123
|
-
|
124
157
|
version %r{(?:safari|version)/([\d\.]+)}i
|
125
158
|
modern? { version >= 9 }
|
126
159
|
end
|
160
|
+
|
161
|
+
match %r{epiphany}i, name: :epiphany, engine: :webkit
|
162
|
+
match %r{uzbl}i, name: :uzbl, engine: :webkit
|
163
|
+
match %r{roccat}i, name: :roccat, engine: :webkit
|
164
|
+
match %r{adobeair}i, name: :adobeair, engine: :webkit
|
165
|
+
match %r{abrowse}i, name: :abrowse, engine: :webkit
|
166
|
+
match %r{vimprobable}i, name: :vimprobable, engine: :webkit
|
167
|
+
match %r{amaya}i, name: :amaya, text: true
|
168
|
+
match %r{lynx}i, name: :lynx, text: true
|
169
|
+
match %r{linemode}i, name: :linemode, text: true
|
170
|
+
match %r{elinks}i, name: :elinks, text: true
|
171
|
+
match %r{netpositive}i, name: :netpositive
|
172
|
+
match %r{onebrowser}i, name: :onebrowser
|
173
|
+
match %r{flashfire}i, name: :flashfire
|
174
|
+
match %r{konqueror}i, name: :konqueror
|
175
|
+
match %r{cyberdog}i, name: :cyberdog
|
176
|
+
match %r{hotjava}i, name: :hotjava
|
177
|
+
match %r{netsurf}i, name: :netsurf
|
178
|
+
match %r{contiki}i, name: :contiki
|
179
|
+
match %r{mosaic|ibrowse[^r]}i, name: :mosaic
|
180
|
+
match %r{dillo}i, name: :dillo
|
181
|
+
|
182
|
+
match %r{alienblue}i, name: :alienblue,
|
183
|
+
version: %r{alienblue(?:hd)?/([\d\.]+)}i
|
184
|
+
|
185
|
+
match %r{obigo}i, name: :obigo, engine: :webkit,
|
186
|
+
version: %r{obigo/w?([\d\.]+)}i
|
187
|
+
|
188
|
+
match %r{ovibrowser}i, name: :ovibrowser, engine: :gecko,
|
189
|
+
engine_version: %r{rv:\s?([\d\.]+)}i
|
190
|
+
|
191
|
+
match %r{osb\-browser}i, name: :osb_browser, engine: :webkit,
|
192
|
+
version: %r{\-browser/([\d\.]+)}i
|
193
|
+
|
194
|
+
match %r{links}i, name: :links,
|
195
|
+
version: %r{links\s\(([\d\.]+)}i
|
196
|
+
|
197
|
+
match %r{oregano}i, name: :oregano,
|
198
|
+
locale: %r{\[(\w{2}(?:\-\w{2})?)\]}i
|
199
|
+
|
200
|
+
match %r{dooble}i, name: :dooble, engine: :webkit,
|
201
|
+
locale: %r{\((\w{2}(?:[-_]\w{2})?)\)}i
|
202
|
+
|
203
|
+
match %r{retawq}i, name: :retawq, text: true,
|
204
|
+
locale: %r{\[(\w{2}(?:\-\w{2})?)\]}i
|
127
205
|
end
|
128
206
|
|
129
207
|
# automatically set type to :bot for each defined matcher
|
130
|
-
|
131
|
-
|
208
|
+
# additionally, set text to true to each of the matchers automatically
|
209
|
+
bots text: true do
|
210
|
+
match %r{huaweisymantecspider}i, name: :huaweisymantecspider
|
211
|
+
match %r{atomic_email_hunter}i, name: :atomic_email_hunter
|
212
|
+
match %r{netresearchserver}i, name: :netresearchserver
|
213
|
+
match %r{autoemailspider}i, name: :auto_email_spider
|
214
|
+
match %r{flaming\sattackbot}i, name: :flaming_attackbot
|
215
|
+
match %r{addsugarspiderbot}i, name: :addsugarspiderbot
|
216
|
+
match %r{dataparksearch}i, name: :dataparksearch
|
217
|
+
match %r{boston[_ ]project}i, name: :boston_project
|
218
|
+
match %r{emailcollector}i, name: :emailcollector
|
219
|
+
match %r{4anything}i, name: :four_anything
|
220
|
+
match %r{aqua_products}i, name: :aqua_products
|
221
|
+
match %r{arachnophilia}i, name: :arachnophilia
|
222
|
+
match %r{emeraldshield}i, name: :emeraldshield
|
223
|
+
match %r{issuecrawler}i, name: :issuecrawler
|
224
|
+
match %r{jaxified\sbot}i, name: :jaxified_bot
|
225
|
+
match %r{stackrambler}i, name: :stackrambler
|
226
|
+
match %r{turnitinbot}i, name: :turnitinbot
|
227
|
+
match %r{alkaline}i, name: :alkalinebot
|
132
228
|
match %r{yahoo\!\sslurp}i, name: :yahoo_slurp
|
133
|
-
match %r{
|
134
|
-
match %r{
|
229
|
+
match %r{emailsiphon}i, name: :emailsiphon
|
230
|
+
match %r{backdoorbot}i, name: :backdoorbot
|
231
|
+
match %r{terrawizbot}i, name: :terrawizbot
|
232
|
+
match %r{searchsight}i, name: :searchsight
|
135
233
|
match %r{baiduspider}i, name: :baiduspider
|
136
|
-
match %r{
|
234
|
+
match %r{linguee\sbot}i, name: :linguee_bot
|
235
|
+
match %r{sandcrawler}i, name: :sandcrawler
|
236
|
+
match %r{big\sbrother}i, name: :big_brother
|
237
|
+
match %r{noxtrumbot}i, name: :noxtrumbot
|
238
|
+
match %r{black\shole}i, name: :black_hole
|
239
|
+
match %r{blackwidow}i, name: :blackwidow
|
137
240
|
match %r{sosospider}i, name: :sosospider
|
138
|
-
match %r{exabot}i, name: :exabot
|
139
|
-
match %r{sogou\s?spider}i, name: :sogou_spider
|
140
|
-
match %r{nutch}i, name: :nutch
|
141
|
-
match %r{scrapy}i, name: :scrapy
|
142
|
-
match %r{dataparksearch}i, name: :dataparksearch
|
143
|
-
match %r{holmes}i, name: :holmes
|
144
|
-
match %r{(?:ask)\sjeeves}i, name: :ask
|
145
241
|
match %r{duckduckgo}i, name: :duckduckgo
|
146
242
|
match %r{beslistbot}i, name: :beslistbot
|
147
243
|
match %r{twitterbot}i, name: :twitterbot
|
148
|
-
match %r{linkedinbot}i, name: :linkedin
|
149
|
-
match %r{instagram}i, name: :instagram
|
150
|
-
match %r{pinterest}i, name: :pinterest
|
151
|
-
match %r{tumblr}i, name: :tumblr
|
152
|
-
match %r{ia_archiver}i, name: :alexa
|
153
|
-
match %r{4anything}i, name: :four_anything
|
154
|
-
match %r{autoemailspider}i, name: :auto_email_spider
|
155
|
-
match %r{boston[_ ]project}i, name: :boston_project
|
156
|
-
match %r{atomz}i, name: :atomz
|
157
|
-
match %r{atomic_email_hunter}i, name: :atomic_email_hunter
|
158
|
-
match %r{altavista}i, name: :altavista
|
159
|
-
match %r{alkaline}i, name: :alkalinebot
|
160
|
-
match %r{acoi}i, name: :acoi
|
161
|
-
match %r{acoon}i, name: :acoon
|
162
|
-
match %r{accoona}i, name: :accoona
|
163
|
-
match %r{face(?:bookexternalhit|bot)}i, name: :facebook
|
164
244
|
match %r{linkdexbot}i, name: :linkdexbot
|
165
245
|
match %r{aitcsrobot}i, name: :aitcsrobot
|
246
|
+
match %r{litefinder}i, name: :litefinder
|
247
|
+
match %r{linkwalker}i, name: :linkwalker
|
248
|
+
match %r{mabontland}i, name: :mabontland
|
249
|
+
match %r{ahrefsbot}i, name: :ahrefsbot
|
250
|
+
match %r{mojeekbot}i, name: :mojeekbot
|
251
|
+
match %r{seznambot}i, name: :seznambot
|
252
|
+
match %r{girafabot}i, name: :girafabot
|
253
|
+
match %r{becomebot}i, name: :becomebot
|
254
|
+
match %r{dts\sagent}i, name: :dts_agent
|
255
|
+
match %r{emailwolf}i, name: :emailwolf
|
256
|
+
match %r{googlebot}i, name: :googlebot
|
257
|
+
match %r{omgilibot}i, name: :omgilibot
|
258
|
+
match %r{altavista}i, name: :altavista
|
259
|
+
match %r{yandexbot}i, name: :yandexbot
|
260
|
+
match %r{newsgator}i, name: :newsgator
|
261
|
+
match %r{instagram}i, name: :instagram
|
262
|
+
match %r{pinterest}i, name: :pinterest
|
263
|
+
match %r{gurujibot}i, name: :gurujibot
|
264
|
+
match %r{lapozzbot}i, name: :lapozzbot
|
265
|
+
match %r{mvaclient}i, name: :mvaclient
|
266
|
+
match %r{ldspider}i, name: :ldspider
|
267
|
+
match %r{lexxebot}i, name: :lexxebot
|
268
|
+
match %r{scoutjet}i, name: :scoutjet
|
269
|
+
match %r{linkedinbot}i, name: :linkedin
|
270
|
+
match %r{bullseye}i, name: :bullseye
|
166
271
|
match %r{alexibot}i, name: :alexibot
|
167
|
-
match %r{
|
168
|
-
match %r{
|
169
|
-
match %r{aspider}i, name: :aspider
|
272
|
+
match %r{face(?:bookexternalhit|bot)}i, name: :facebook
|
273
|
+
match %r{getright}i, name: :getright
|
170
274
|
match %r{asterias}i, name: :asterias
|
275
|
+
match %r{catchbot}i, name: :catchbot
|
276
|
+
match %r{discobot}i, name: :discobot
|
277
|
+
match %r{geniebot}i, name: :geniebot
|
278
|
+
match %r{koepabot}i, name: :koepabot
|
279
|
+
match %r{synoobot}i, name: :synoobot
|
280
|
+
match %r{rufusbot}i, name: :rufusbot
|
281
|
+
match %r{rampybot}i, name: :rampybot
|
282
|
+
match %r{mogimogi}i, name: :mogimogi
|
283
|
+
match %r{jyxobot}i, name: :jyxobot
|
284
|
+
match %r{orbiter}i, name: :orbiter
|
285
|
+
match %r{polybot}i, name: :polybot
|
286
|
+
match %r{accoona}i, name: :accoona
|
287
|
+
match %r{mj12bot}i, name: :mj12bot
|
288
|
+
match %r{aspider}i, name: :aspider
|
289
|
+
match %r{blexbot}i, name: :blexbot
|
290
|
+
match %r{bspider}i, name: :bspider
|
171
291
|
match %r{auresys}i, name: :auresys
|
172
|
-
match %r{
|
173
|
-
match %r{
|
292
|
+
match %r{bingbot}i, name: :bingbot
|
293
|
+
match %r{gaisbot}i, name: :gaisbot
|
174
294
|
match %r{backrub}i, name: :backrub
|
175
|
-
match %r{
|
295
|
+
match %r{harvest}i, name: :harvest
|
296
|
+
match %r{nymesis}i, name: :nymesis
|
297
|
+
match %r{radian6}i, name: :radian6
|
298
|
+
match %r{scrubby}i, name: :scrubby
|
299
|
+
match %r{snappy}i, name: :snappy
|
300
|
+
match %r{vortex}i, name: :vortex
|
301
|
+
match %r{tineye}i, name: :tineye
|
302
|
+
match %r{sqworm}i, name: :sqworm
|
303
|
+
match %r{qseero}i, name: :qseero
|
304
|
+
match %r{pompos}i, name: :pompos
|
305
|
+
match %r{ichiro}i, name: :ichiro
|
176
306
|
match %r{bizbot}i, name: :bizbot
|
177
|
-
match %r{
|
178
|
-
match %r{
|
179
|
-
match %r{
|
180
|
-
match %r{
|
181
|
-
match %r{
|
182
|
-
match %r{emailcollector}i, name: :emailcollector
|
183
|
-
match %r{emailsiphon}i, name: :emailsiphon
|
184
|
-
match %r{emailwolf}i, name: :emailwolf
|
307
|
+
match %r{msnbot}i, name: :msnbot
|
308
|
+
match %r{exabot}i, name: :exabot
|
309
|
+
match %r{msrbot}i, name: :msrbot
|
310
|
+
match %r{dotbot}i, name: :dotbot
|
311
|
+
match %r{cosmos}i, name: :cosmos
|
185
312
|
match %r{ecatch}i, name: :ecatch
|
186
|
-
match %r{
|
187
|
-
match %r{
|
188
|
-
match %r{
|
189
|
-
match %r{
|
313
|
+
match %r{scrapy}i, name: :scrapy
|
314
|
+
match %r{holmes}i, name: :holmes
|
315
|
+
match %r{tumblr}i, name: :tumblr
|
316
|
+
match %r{mxbot}i, name: :mxbot
|
317
|
+
match %r{acoon}i, name: :acoon
|
318
|
+
match %r{nutch}i, name: :nutch
|
319
|
+
match %r{ia_archiver}i, name: :alexa
|
320
|
+
match %r{atomz}i, name: :atomz
|
321
|
+
match %r{acoi}i, name: :acoi
|
322
|
+
match %r{\sobot}i, name: :obot
|
323
|
+
match %r{(?:ask)\sjeeves}i, name: :ask
|
324
|
+
match %r{b2w}i, name: :b2w
|
325
|
+
|
326
|
+
match %r{oegp}i, name: :oegp,
|
327
|
+
version: %r{v\.\s([\d\.]+)}i
|
328
|
+
|
329
|
+
match %r{ng-search}i, name: :ng_search,
|
330
|
+
version: %r{-search/([\d\.]+)}i
|
331
|
+
|
332
|
+
match %r{morning\spaper}i, name: :morning_paper,
|
333
|
+
version: %r{\spaper\s([\d\.]+)}i
|
334
|
+
|
335
|
+
match %r{l\.webis}i, name: :lwebis,
|
336
|
+
version: %r{webis/([\d\.]+)}i
|
337
|
+
|
338
|
+
match %r{covario-ids}i, name: :covario_ids,
|
339
|
+
version: %r{io-ids/([\d\.]+)}i
|
190
340
|
|
191
|
-
match %r{
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
match %r{
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
341
|
+
match %r{cerberian\sdrtrs}i, name: :cerberian_drtrs,
|
342
|
+
version: %r{version[-/]([\d\.]+)}i
|
343
|
+
|
344
|
+
match %r{gigamega}i, name: :gigamega,
|
345
|
+
version: %r{mega\.bot/([\d\.]+)}i
|
346
|
+
|
347
|
+
match %r{sogou(?:\s\w+)?\s?spider}i, name: :sogou_spider,
|
348
|
+
version: %r{spider/([\d\.]+)}i
|
349
|
+
|
350
|
+
match %r{megaindex}i, name: :megaindex,
|
351
|
+
version: %r{index\.ru/([\d\.]+)}i
|
352
|
+
|
353
|
+
match %r{mass\sdownloader}i, name: :mass_downloader,
|
354
|
+
version: %r{downloader/([\d\.]+)}i
|
355
|
+
|
356
|
+
match %r{safetynet\srobot}i, name: :safetynet_robot,
|
357
|
+
version: %r{net\srobot\s([\d\.]+)}i
|
358
|
+
|
359
|
+
match %r{internet\sninja}i, name: :internet_ninja,
|
360
|
+
version: %r{ninja\s([\d\.]+)}i
|
361
|
+
|
362
|
+
match %r{go\!zilla}i, name: :gozilla,
|
363
|
+
version: %r{go\!zilla\s([\d\.]+)}i
|
364
|
+
|
365
|
+
match %r{larbin}i, name: :larbin,
|
366
|
+
version: %r{larbin_([\d\.]+)}i
|
367
|
+
|
368
|
+
match %r{download\sdemon}i, name: :download_demon,
|
369
|
+
version: %r{demon/([\d\.]+)}i
|
370
|
+
|
371
|
+
match %r{netseer}i, name: :netseer,
|
372
|
+
version: %r{\scrawler/([\d\.]+)}i
|
203
373
|
end
|
204
374
|
|
205
|
-
# automatically set type to :
|
206
|
-
|
375
|
+
# automatically set type to :validator for each defined matcher
|
376
|
+
# additionally, set text to true to each of the matchers automatically
|
377
|
+
validators text: true do
|
207
378
|
match %r{cse\shtml\svalidator}i, name: :cse_html_validator
|
208
|
-
match %r{csscheck}i, name: :csscheck
|
209
|
-
match %r{htmlparser}i, name: :htmlparser
|
210
379
|
match %r{p3p\svalidator}i, name: :p3p_validator
|
211
380
|
match %r{wdg_validator}i, name: :wdg_validator
|
212
381
|
match %r{w3c_validator}i, name: :w3c_validator
|
382
|
+
match %r{htmlparser}i, name: :htmlparser
|
383
|
+
match %r{csscheck}i, name: :csscheck
|
213
384
|
|
214
|
-
match %r{cynthia}i,
|
215
|
-
|
385
|
+
match %r{cynthia}i, name: :cynthia,
|
386
|
+
version: %r{cynthia\s([\d\.]+)}i
|
216
387
|
|
217
|
-
match %r{w3c_css_validator}i,
|
218
|
-
|
219
|
-
version: %r{w3c_css_validator_jfouffa/([\d\.]+)}i
|
388
|
+
match %r{w3c_css_validator}i, name: :w3c_css_validator,
|
389
|
+
version: %r{validator_jfouffa/([\d\.]+)}i
|
220
390
|
end
|
221
391
|
|
222
392
|
# automatically set type to :library for each defined matcher
|
223
|
-
|
224
|
-
|
225
|
-
match %r{
|
226
|
-
match %r{
|
227
|
-
match %r{
|
228
|
-
match %r{pycurl}i,
|
229
|
-
match %r{
|
393
|
+
# additionally, set text to true to each of the matchers automatically
|
394
|
+
libraries text: true do
|
395
|
+
match %r{Go-http-client}i, name: :golang, version: %r{-client/([\d\.]+)}i
|
396
|
+
match %r{python}i, name: :python, version: %r{-urllib/([\d\.]+)}i
|
397
|
+
match %r{webfetch}i, name: :webfetch
|
398
|
+
match %r{pycurl}i, name: :pycurl
|
399
|
+
match %r{perl}i, name: :perl
|
400
|
+
match %r{java}i, name: :java
|
401
|
+
match %r{curl}i, name: :curl
|
402
|
+
match %r{wget}i, name: :wget
|
403
|
+
match %r{php}i, name: :php
|
230
404
|
end
|
231
405
|
|
232
406
|
# inherit properties a standard set of properties by the name of a
|
233
407
|
# previously defined matcher, overwritten by properties added within matchers
|
234
|
-
# inherit properties from
|
235
|
-
like :chrome do
|
236
|
-
match %r{
|
237
|
-
match %r{
|
238
|
-
match %r{
|
239
|
-
match %r{
|
240
|
-
match %r{
|
241
|
-
|
242
|
-
match %r{
|
243
|
-
|
408
|
+
# inherit properties from matcher where name == :chrome, (except :version)
|
409
|
+
like :chrome, except: [:version] do
|
410
|
+
match %r{steam\sgame}i, name: :steam, version: %r{meoverlay/([\d\.]+)}i
|
411
|
+
match %r{comodo_dragon}i, name: :comodo_dragon
|
412
|
+
match %r{chromeplus}i, name: :chromeplus
|
413
|
+
match %r{bluechrome}i, name: :bluechrome
|
414
|
+
match %r{awesomium}i, name: :awesomium
|
415
|
+
match %r{qqbrowser}i, name: :qqbrowser
|
416
|
+
match %r{yabrowser}i, name: :yabrowser
|
417
|
+
match %r{rockmelt}i, name: :rockmelt
|
418
|
+
match %r{coolnovo}i, name: :coolnovo
|
419
|
+
match %r{vivaldi}i, name: :vivaldi
|
420
|
+
match %r{colibri}i, name: :colibri
|
421
|
+
match %r{iridium}i, name: :iridium
|
422
|
+
match %r{origin}i, name: :origin
|
423
|
+
match %r{puffin}i, name: :puffin
|
424
|
+
match %r{fluid}i, name: :fluid
|
425
|
+
match %r{brave}i, name: :brave
|
426
|
+
match %r{hana}i, name: :hana
|
427
|
+
match %r{(?<!env)iron}i, name: :iron
|
428
|
+
|
429
|
+
match %r{qtweb}i, name: :qtweb_browser,
|
430
|
+
version: %r{net\sbrowser/([\d\.]+)}i
|
244
431
|
end
|
245
432
|
|
246
|
-
# inherit properties from
|
247
|
-
like :safari do
|
248
|
-
match %r{
|
249
|
-
|
250
|
-
match %r{
|
251
|
-
|
252
|
-
match %r{
|
253
|
-
|
254
|
-
match %r{
|
255
|
-
|
256
|
-
|
257
|
-
match %r{
|
258
|
-
|
259
|
-
|
433
|
+
# inherit properties from matcher where name == :safari, (except :version)
|
434
|
+
like :safari, except: [:version] do
|
435
|
+
match %r{samsungbrowser}i, name: :samsungbrowser
|
436
|
+
match %r{stainless}i, name: :stainless
|
437
|
+
match %r{cheshire}i, name: :cheshire
|
438
|
+
match %r{omniweb}i, name: :omniweb
|
439
|
+
match %r{skyfire}i, name: :skyfire
|
440
|
+
match %r{mercury}i, name: :mercury
|
441
|
+
match %r{rekonq}i, name: :rekonq
|
442
|
+
match %r{arora}i, name: :arora
|
443
|
+
match %r{raptr}i, name: :raptr
|
444
|
+
match %r{icab}i, name: :icab
|
445
|
+
match %r{bolt}i, name: :bolt
|
446
|
+
match %r{silk}i, name: :silk
|
447
|
+
match %r{qt(?!web)}i, name: :qt
|
448
|
+
|
449
|
+
match %r{nook}i, name: :nook,
|
450
|
+
version: %r{build/\w+\s([\d\.]+)}i
|
451
|
+
|
452
|
+
match %r{kindle}i, name: :kindle,
|
453
|
+
version: %r{(?:kindle|version)/([\d\.]+)}i
|
454
|
+
|
455
|
+
match %r{leechcraft}i, name: :leechcraft,
|
456
|
+
version: %r{craft/(?:\w+\s)?([\d\.]+)}i
|
457
|
+
|
458
|
+
match %r{webos|wosbrowser}i, name: :webosbrowser,
|
459
|
+
version: %r{(?:version|osbrowser)/([\d\.]+)}i
|
460
|
+
|
461
|
+
match %r{blackberry.*?(?=safari)}i, name: :blackberry_browser,
|
462
|
+
version: %r{version/([\d\.]+)}i
|
260
463
|
end
|
261
464
|
|
262
|
-
# inherit properties from
|
263
|
-
like :firefox do
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
match %r{
|
270
|
-
match %r{
|
271
|
-
match %r{
|
272
|
-
match %r{
|
273
|
-
match %r{
|
274
|
-
|
465
|
+
# inherit properties from matcher where name == :firefox, (except :version)
|
466
|
+
like :firefox, except: [:version] do
|
467
|
+
# Minefield is firefox nightly, we can now do client.nightly?
|
468
|
+
# to find out wether this browser is bleeding edge
|
469
|
+
# this method will be caught by method missing if it isn't defined,
|
470
|
+
# therefore - this method can be used on every Browserino::Client
|
471
|
+
# instance
|
472
|
+
match %r{minefield}i, name: :minefield, nightly: true
|
473
|
+
match %r{k-meleon}i, name: :kmeleon, version: %r{leon/([\d\.]+)}i
|
474
|
+
match %r{k-ninja}i, name: :kninja, version: %r{ninja/([\d\.]+)}i
|
475
|
+
match %r{waterfox}i, name: :waterfox, architecture: :x64
|
476
|
+
match %r{granparadiso}i, name: :granparadiso
|
477
|
+
match %r{tenfourfox}i, name: :tenfourfox
|
478
|
+
match %r{enigmafox}i, name: :enigmafox
|
479
|
+
match %r{iceweasel}i, name: :iceweasel
|
480
|
+
match %r{seamonkey}i, name: :seamonkey
|
481
|
+
match %r{superswan}i, name: :superswan
|
482
|
+
match %r{lunascape}i, name: :lunascape
|
483
|
+
match %r{kazehakase}i, name: :kazehakase
|
484
|
+
match %r{shiretoko}i, name: :shiretoko
|
485
|
+
match %r{classilla}i, name: :classilla
|
486
|
+
match %r{cometbird}i, name: :cometbird
|
487
|
+
match %r{icedragon}i, name: :icedragon
|
488
|
+
match %r{palemoon}i, name: :palemoon
|
489
|
+
match %r{namoroka}i, name: :namoroka
|
490
|
+
match %r{songbird}i, name: :songbird
|
491
|
+
match %r{firebird}i, name: :firebird
|
492
|
+
match %r{vonkeror}i, name: :vonkeror
|
493
|
+
match %r{conkeror}i, name: :conkeror
|
494
|
+
match %r{netscape}i, name: :netscape
|
495
|
+
match %r{bonecho}i, name: :bonecho
|
496
|
+
match %r{chimera}i, name: :chimera
|
497
|
+
match %r{lolifox}i, name: :lolifox
|
498
|
+
match %r{lorentz}i, name: :lorentz
|
499
|
+
match %r{myibrow}i, name: :myibrow
|
500
|
+
match %r{sylera}i, name: :sylera
|
501
|
+
match %r{iceape}i, name: :iceape
|
502
|
+
match %r{madfox}i, name: :madfox
|
503
|
+
match %r{kapiko}i, name: :kapiko
|
504
|
+
match %r{kmlite}i, name: :kmlite
|
505
|
+
match %r{beonex}i, name: :beonex
|
506
|
+
match %r{icecat}i, name: :icecat
|
507
|
+
match %r{galeon}i, name: :galeon
|
508
|
+
match %r{vision}i, name: :vision
|
509
|
+
match %r{prism}i, name: :prism
|
510
|
+
match %r{pogo}i, name: :pogo
|
511
|
+
match %r{orca}i, name: :orca
|
512
|
+
|
513
|
+
match %r{camino}i, name: :camino,
|
514
|
+
locale: %r{\s(\w{2}(?:\-\w{2})?),}i
|
515
|
+
|
516
|
+
match %r{fireweb\snavigator}i, name: :fireweb_navigator, engine: :gecko,
|
517
|
+
version: %r{\snavigator/([\d\.]+)}i
|
275
518
|
end
|
276
519
|
|
277
520
|
# never thought a browser would want to be like IE...
|
278
521
|
like :ie do
|
279
522
|
# version does not have to be supplied because we simply want to use
|
280
523
|
# the version supplied by the MSIE token instead (there is no version on
|
281
|
-
# the avant browser or slimbrowser UA itself)
|
524
|
+
# the avant browser or slimbrowser etc... UA itself)
|
282
525
|
match %r{avant\sbrowser}i, name: :avant_browser
|
526
|
+
match %r{greenbrowser}i, name: :greenbrowser
|
283
527
|
match %r{slimbrowser}i, name: :slimbrowser
|
528
|
+
match %r{theworld}i, name: :theworld
|
529
|
+
match %r{browzar}i, name: :browzar
|
284
530
|
|
285
|
-
|
286
|
-
|
531
|
+
# below are special cases where we need to manually
|
532
|
+
# supply the version pattern
|
287
533
|
match %r{deepnet\sexplorer}i, name: :deepnet_explorer,
|
288
|
-
version: %r{
|
534
|
+
version: %r{explorer\s([\d\.]+)}i
|
535
|
+
|
536
|
+
match %r{crazy\sbrowser}i, name: :crazy_browser,
|
537
|
+
version: %r{browser\s([\d\.]+)}i
|
538
|
+
|
539
|
+
match %r{solid\score}i, name: :solid_core,
|
540
|
+
version: %r{d\score/([\d\.]+)}i
|
541
|
+
|
542
|
+
# we can exclude the default version which will then be replaced by
|
543
|
+
# the smart_matcher for :version which uses the :name token automatically
|
544
|
+
# upon creating it's pattern
|
545
|
+
preset except: [:version] do
|
546
|
+
match %r{tencenttraveler}i, name: :tencenttraveler
|
547
|
+
match %r{enigma\sbrowser}i, name: :enigma_browser
|
548
|
+
match %r{simulbrowse}i, name: :simulbrowse
|
549
|
+
match %r{netcaptor}i, name: :netcaptor
|
550
|
+
match %r{sleipnir}i, name: :sleipnir
|
551
|
+
match %r{irider}i, name: :irider
|
552
|
+
match %r{kkman}i, name: :kkman
|
553
|
+
match %r{lobo}i, name: :lobo
|
554
|
+
match %r{aol}i, name: :aol
|
555
|
+
end
|
289
556
|
end
|
290
557
|
end
|