browserino 4.0.0 → 4.1.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 +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
|