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.
@@ -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