browserino 4.0.0 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 set for the defined smart matcher
6
- smart_match :version, with: ':name/([\d\._]+)', flags: [:i]
7
- smart_match :engine_version, with: ':engine/([\d\._]+)', flags: [:i]
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 an identity the final client object is created
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](\w{2}(?:\-\w{2})?)[;)]}i
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|opera\sm(?:ob|in)i)}xi
17
- platform %r{.*(xbox|wii|nintendo\sds|playstation|windows(?:\sphone)?
18
- |macintosh|mac\sos\sx|android|tizen|ip(?:[ao]d|hone)
19
- |blackberry|linux|ubuntu|x11|bsd|s(?:unos|olaris)
20
- |w(?:eb)?os)}xi
21
- platform_version %r{(?:windows(?:\sphone(?:\sos)?)?|nt|mac\sos\sx|android
22
- |(?:cpu\s|ip(?:[ao]d|hone)\s)os|blackberry|bb
23
- |s(?:unos|olaris)/?|w(?:eb)?os/|tizen)\s?([\d\._]+)}xi
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 an Identity for a specific match
29
- # identities are added in an array in order of definition - higher is better
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{firefox}i do
104
- name :firefox
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
- bots do
131
- match %r{googlebot}i, name: :googlebot
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{msnbot}i, name: :msnbot
134
- match %r{bingbot}i, name: :bingbot
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{yandexbot}i, name: :yandexbot
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{aqua_products}i, name: :aqua_products
168
- match %r{arachnophilia}i, name: :arachnophilia
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{b2w}i, name: :b2w
173
- match %r{backdoorbot}i, name: :backdoorbot
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{big\sbrother}i, name: :big_brother
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{black\shole}i, name: :black_hole
178
- match %r{blackwidow}i, name: :blackwidow
179
- match %r{blexbot}i, name: :blexbot
180
- match %r{bspider}i, name: :bspider
181
- match %r{bullseye}i, name: :bullseye
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{flaming\sattackbot}i, name: :flaming_attackbot
187
- match %r{getright}i, name: :getright
188
- match %r{harvest}i, name: :harvest
189
- match %r{huaweisymantecspider}i, name: :huaweisymantecspider
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{mass\sdownloader}i, name: :mass_downloader,
192
- version: %r{mass\sdownloader/([\d\.]+)}i
193
- match %r{safetynet\srobot}i, name: :safetynet_robot,
194
- version: %r{safetynet\srobot\s([\d\.]+)}i
195
- match %r{internet\sninja}i, name: :internet_ninja,
196
- version: %r{internet\sninja\s([\d\.]+)}i
197
- match %r{go\!zilla}i, name: :gozilla,
198
- version: %r{go\!zilla\s([\d\.]+)}i
199
- match %r{larbin}i, name: :larbin,
200
- version: %r{larbin_([\d\.]+)}i
201
- match %r{download\sdemon}i, name: :download_demon,
202
- version: %r{download\sdemon/([\d\.]+)}i
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 :library for each defined matcher
206
- validators do
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, name: :cynthia,
215
- version: %r{cynthia\s([\d\.]+)}i
385
+ match %r{cynthia}i, name: :cynthia,
386
+ version: %r{cynthia\s([\d\.]+)}i
216
387
 
217
- match %r{w3c_css_validator}i,
218
- name: :w3c_css_validator,
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
- libraries do
224
- match %r{php}i, name: :php
225
- match %r{python}i, name: :python, version: %r{-urllib/([\d\.]+)}i
226
- match %r{perl}i, name: :perl
227
- match %r{java}i, name: :java
228
- match %r{pycurl}i, name: :pycurl
229
- match %r{curl}i, name: :curl
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 Identity where name == :chrome
235
- like :chrome do
236
- match %r{brave}i, name: :brave, version: %r{brave/([\d\.]+)}i
237
- match %r{vivaldi}i, name: :vivaldi, version: %r{vivaldi/([\d\.]+)}i
238
- match %r{colibri}i, name: :colibri, version: %r{colibri/([\d\.]+)}i
239
- match %r{rockmelt}i, name: :rockmelt, version: %r{rockmelt/([\d\.]+)}i
240
- match %r{flock}i, name: :flock, version: %r{flock/([\d\.]+)}i
241
-
242
- match %r{comodo_dragon}i, name: :comodo_dragon,
243
- version: %r{comodo_dragon/([\d\.]+)}i
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 Identity where name == :safari
247
- like :safari do
248
- match %r{bolt}i, name: :bolt, version: %r{bolt/([\d\.]+)}i
249
-
250
- match %r{stainless}i, name: :stainless,
251
- version: %r{stainless/([\d\.]+)}i
252
- match %r{samsungbrowser}i, name: :samsungbrowser,
253
- version: %r{samsungbrowser/([\d\.]+)}i
254
- match %r{omniweb}i, name: :omniweb,
255
- version: %r{omniweb/v([\d\.]+)}i
256
-
257
- match %r{webos|wosbrowser}i,
258
- name: :webosbrowser,
259
- version: %r{(?:version|w(?:eb)?osbrowser)/([\d\.]+)}i
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 Identity where name == :firefox
263
- like :firefox do
264
- match %r{prism}i, name: :prism, version: %r{prism/([\d\.]+)}i
265
- match %r{waterfox}i, name: :waterfox, version: %r{waterfox/([\d\.]+)}i
266
- match %r{firebird}i, name: :firebird, version: %r{firebird/([\d\.]+)}i
267
- match %r{netscape}i, name: :netscape, version: %r{netscape/([\d\.]+)}i
268
- match %r{icecat}i, name: :icecat, version: %r{icecat/([\d\.]+)}i
269
- match %r{iceweasel}i, name: :iceweasel, version: %r{iceweasel/([\d\.]+)}i
270
- match %r{seamonkey}i, name: :seamonkey, version: %r{seamonkey/([\d\.]+)}i
271
- match %r{superswan}i, name: :superswan, version: %r{superswan/([\d\.]+)}i
272
- match %r{lunascape}i, name: :lunascape, version: %r{lunascape/([\d\.]+)}i
273
- match %r{camino}i, name: :camino, version: %r{camino/([\d\.]+)}i,
274
- locale: %r{\s(\w{2}(?:\-\w{2})?),}i
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
- match %r{sleipnir}i, name: :sleipnir,
286
- version: %r{sleipnir/([\d\.]+)}i
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{deepnet\sexplorer ([\d\.]+)}i
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