browserino 4.1.0 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +19 -0
- data/.gitignore +2 -0
- data/.rspec +1 -1
- data/.rubocop.yml +10 -4
- data/.travis.yml +3 -2
- data/browserino.gemspec +4 -2
- data/lib/browserino/client.rb +89 -120
- data/lib/browserino/config.rb +20 -24
- data/lib/browserino/definitions/aliasses.rb +13 -8
- data/lib/browserino/definitions/filters.rb +40 -26
- data/lib/browserino/definitions/labels.rb +36 -35
- data/lib/browserino/definitions/matchers/bots.rb +208 -0
- data/lib/browserino/definitions/matchers/browsers.rb +377 -0
- data/lib/browserino/definitions/matchers/emails.rb +22 -0
- data/lib/browserino/definitions/matchers/global.rb +52 -0
- data/lib/browserino/definitions/matchers/libraries.rb +16 -0
- data/lib/browserino/definitions/matchers/mediaplayers.rb +12 -0
- data/lib/browserino/definitions/matchers/rss.rb +46 -0
- data/lib/browserino/definitions/matchers/validators.rb +37 -0
- data/lib/browserino/definitions/matchers.rb +7 -555
- data/lib/browserino/matcher.rb +5 -5
- data/lib/browserino/methods.rb +18 -17
- data/lib/browserino/options.rb +8 -0
- data/lib/browserino/version.rb +4 -4
- metadata +34 -11
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Browserino.config.emails do
|
4
|
+
match %r{outlook}i, name: :outlook
|
5
|
+
match %r{airmail}i, name: :airmail, engine: :webkit
|
6
|
+
match %r{barca}i, name: :barca, version: %r{barca(?:pro)?/([\d\.]+)}i
|
7
|
+
|
8
|
+
match %r{ggpht}i do
|
9
|
+
name :gmail
|
10
|
+
engine %r{(trident|gecko|webkit|presto|blink|servo|edge)}i
|
11
|
+
engine_version %r{(?:rv:|trident|webkit|presto|blink
|
12
|
+
|servo|edge)[\s/]?([\d\.]+)}i
|
13
|
+
end
|
14
|
+
|
15
|
+
# these are the same as above except with engine set to gecko and
|
16
|
+
# to look for engine_version using gecko version pattern
|
17
|
+
preset engine: :gecko, engine_version: %r{rv:\s?([\d\.]+)}i do
|
18
|
+
match %r{thunderbird}i, name: :thunderbird
|
19
|
+
match %r{spicebird}i, name: :spicebird
|
20
|
+
match %r{postbox}i, name: :postbox
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
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
|
+
|
10
|
+
# a set of global matchers that will use formatted properties found earlier
|
11
|
+
# they will also be applied to every matcher unless that matcher has it's own
|
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]
|
16
|
+
|
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
|
19
|
+
match do
|
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
|
+
|
23
|
+
smarttv %r{(?:smart[\-\s]|hbb|apple\s|google|g)(tv)}i
|
24
|
+
|
25
|
+
tablet %r{(ipad|transformer|slider|a\d+f;|tablet|lenovo
|
26
|
+
|\s\w+tab\s)}xi
|
27
|
+
|
28
|
+
mobile %r{(bolt|nokia|samsung(?!b)|mobi(?:le)?|i?p(?:[ao]d|hone)
|
29
|
+
|android|bb\d+|blackberry|iemobile|fennec|bada|meego
|
30
|
+
|tizen|vodafone|kindle|kf\w\w|palmos|huawei|moto|lumia
|
31
|
+
|oneplus|fxos|nexus|opera\sm(?:ob|in)i|zte|htc(?!\-))}xi
|
32
|
+
|
33
|
+
platform %r{.*(wiiu?|nintendo\sds|playstation|windows\sphone|windows
|
34
|
+
|kf\w\w|mac(?:intosh|\sos\sx)|android|ip(?:[ao]d|hone)
|
35
|
+
|blackberry|linux|ubuntu|beos|unix|bsd|s(?:unos|olaris)
|
36
|
+
|tizen|xbox|amigaos|w(?:eb)?os|(?<!mi)cros|bada|palmos
|
37
|
+
|kindle|symbiano?s?|sailfish|meego|darwin|syllable|fxos
|
38
|
+
|(?<!en)risc|rim\stablet\sos|haiku|morphos|debian)}xi
|
39
|
+
|
40
|
+
platform_version %r{(?:windows(?:\sphone(?:\sos)?)?|nt|android|linux/?|fxos
|
41
|
+
|mac\sos\sx(?:\s\w+\s)?|(?:cpu\s|ip(?:[ao]d|hone)\s)os
|
42
|
+
|blackberry|bb|s(?:unos|olaris)/?|w(?:eb)?os/|tizen
|
43
|
+
|risc\s*|amigaos/?|cros\s[\w-]+|ows\sxp|darwin|palmos
|
44
|
+
|bada/?|symbianos/?|rim\stablet\sos)\s?([\d\._]+)}xi
|
45
|
+
|
46
|
+
device %r{(alcatel|all(?:tell|view)|htc|kindle|kf\w\w|apple\s?tv
|
47
|
+
|iphone|ipad|a\d+f;|archos|transformer|slider|me\d+x|zte
|
48
|
+
|blackberry|\d+dl|venue|desire|oneplus|lenovo|lumia|moto
|
49
|
+
|huawei\b|motorola|nokia|nexus|\b\w+tab\b|lg[-l]
|
50
|
+
|(?<!p)hp)}xi
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# automatically set type to :library for each defined matcher
|
4
|
+
# additionally, set text to true to each of the matchers automatically
|
5
|
+
Browserino.config.libraries text: true do
|
6
|
+
match %r{Go-http-client}i, name: :golang, version: %r{-client/([\d\.]+)}i
|
7
|
+
match %r{python}i, name: :python, version: %r{-urllib/([\d\.]+)}i
|
8
|
+
match %r{luakit}i, name: :luakit, engine: :webkit
|
9
|
+
match %r{webfetch}i, name: :webfetch
|
10
|
+
match %r{pycurl}i, name: :pycurl
|
11
|
+
match %r{perl}i, name: :perl
|
12
|
+
match %r{java}i, name: :java
|
13
|
+
match %r{curl}i, name: :curl
|
14
|
+
match %r{wget}i, name: :wget
|
15
|
+
match %r{php}i, name: :php
|
16
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Browserino.config.mediaplayers do
|
4
|
+
match %r{itunes}i, name: :itunes
|
5
|
+
match %r{dailymotion}i, name: :dailymotion
|
6
|
+
match %r{flycast}i, name: :flycast
|
7
|
+
match %r{coreplayer}i, name: :coreplayer
|
8
|
+
match %r{banshee}i, name: :banshee
|
9
|
+
match %r{foobar2000}i, name: :foobar2000
|
10
|
+
match %r{boxee}i, name: :boxee
|
11
|
+
match %r{gomplayer}i, name: :gomplayer, version: %r{yer\s([\d,\s]+)}i
|
12
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Browserino.config.rss do
|
4
|
+
match %r{windows-rss}i, name: :windows_rss
|
5
|
+
match %r{apple-pubsub}i, name: :apple_pubsub
|
6
|
+
match %r{applesyndication}i, name: :safari_rss
|
7
|
+
match %r{sharpreader}i, name: :sharpreader
|
8
|
+
match %r{netnewswire}i, name: :netnewswire
|
9
|
+
match %r{omea\sreader}i, name: :omea_reader
|
10
|
+
match %r{rssbandit}i, name: :rssbandit
|
11
|
+
match %r{feeddemon}i, name: :feeddemon
|
12
|
+
match %r{lucknews}i, name: :lucknews
|
13
|
+
match %r{inoreader}i, name: :inoreader
|
14
|
+
match %r{rss\smenu}i, name: :rss_menu
|
15
|
+
match %r{rss\spopper}i, name: :rss_popper
|
16
|
+
match %r{homepage\srss\sread}i, name: :seznam_rss
|
17
|
+
match %r{nfreader}i, name: :nfreader
|
18
|
+
match %r{magpierss}i, name: :magpierss
|
19
|
+
match %r{gregarius}i, name: :gregarius
|
20
|
+
match %r{newsbreak}i, name: :newsbreak
|
21
|
+
match %r{blogbridge}i, name: :blogbridge
|
22
|
+
match %r{yeahreader}i, name: :yeahreader
|
23
|
+
match %r{newsbeuter}i, name: :newsbeuter
|
24
|
+
match %r{greatnews}i, name: :greatnews
|
25
|
+
match %r{bloglines}i, name: :bloglines
|
26
|
+
match %r{icatcher}i, name: :icatcher
|
27
|
+
match %r{newsfox}i, name: :newsfox
|
28
|
+
match %r{quiterss}i, name: :quiterss
|
29
|
+
match %r{liferea}i, name: :liferea
|
30
|
+
match %r{aiderss}i, name: :aiderss
|
31
|
+
match %r{reeder}i, name: :reeder
|
32
|
+
match %r{rssowl}i, name: :rssowl
|
33
|
+
match %r{feedly}i, name: :feedly
|
34
|
+
match %r{abilon}i, name: :abilon
|
35
|
+
match %r{shrook}i, name: :shrook
|
36
|
+
match %r{awasu}i, name: :awasu
|
37
|
+
match %r{sage}i, name: :sage
|
38
|
+
match %r{akregator}i, name: :akregator
|
39
|
+
match %r{trileet\snewsroom}i, name: :trileet_newsroom
|
40
|
+
match %r{dragonfly\srss}i, name: :dragonfly_rss
|
41
|
+
match %r{digg\sfeed\sfetcher}i, name: :digg_feed_fetcher
|
42
|
+
match %r{yahoofeedseeker}i, name: :yahoofeedseeker
|
43
|
+
match %r{universalfeedparser}i, name: :universalfeedparser
|
44
|
+
match %r{feedfetcher-google}i, name: :feedfetcher_google
|
45
|
+
match %r{fastladder\sfeed}i, name: :fastladder_feedfetcher
|
46
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# automatically set type to :validator for each defined matcher
|
4
|
+
# additionally, set text to true to each of the matchers automatically
|
5
|
+
Browserino.config.validators do
|
6
|
+
match %r{xenu\slink\ssleuth}i, name: :xenu_link_sleuth
|
7
|
+
match %r{screaming\sfrog\sseo}i, name: :screaming_frog_seo_spider
|
8
|
+
match %r{rel\slink\schecker}i, name: :rel_link_checker_lite
|
9
|
+
match %r{a1\swebsite\sanalyze}i, name: :a1_website_analyzer
|
10
|
+
match %r{w3c_multipage_valida}i, name: :w3c_multipage_validator
|
11
|
+
match %r{cse\shtml\svalidator}i, name: :cse_html_validator
|
12
|
+
match %r{p3p\svalidator}i, name: :p3p_validator
|
13
|
+
match %r{w3c-checklink}i, name: :w3c_checklink
|
14
|
+
match %r{w3c_i18n-checker}i, name: :w3c_i18n_checker
|
15
|
+
match %r{w3c_unicorn}i, name: :w3c_unicorn
|
16
|
+
match %r{w3c-mobileok}i, name: :w3c_mobileok
|
17
|
+
match %r{wdg_validator}i, name: :wdg_validator
|
18
|
+
match %r{w3c_validator}i, name: :w3c_validator
|
19
|
+
match %r{fplinkchecker}i, name: :fplinkchecker
|
20
|
+
match %r{linkchecker}i, name: :linkchecker
|
21
|
+
match %r{linkwalker}i, name: :linkwalker
|
22
|
+
match %r{linkexaminer}i, name: :linkexaminer
|
23
|
+
match %r{feedvalidator}i, name: :feedvalidator
|
24
|
+
match %r{htmlparser}i, name: :htmlparser
|
25
|
+
match %r{csscheck}i, name: :csscheck
|
26
|
+
match %r{checkbot}i, name: :checkbot
|
27
|
+
match %r{cynthia}i, name: :cynthia
|
28
|
+
|
29
|
+
match %r{validator\.nu}i, name: :validator_nu,
|
30
|
+
version: %r{idator\.nu/([\d\.]+)}i
|
31
|
+
|
32
|
+
match %r{htmlchecker}i, name: :anw_htmlchecker,
|
33
|
+
version: %r{htmlchecker/([\d\.]+)}i
|
34
|
+
|
35
|
+
match %r{w3c_css_validator}i, name: :w3c_css_validator,
|
36
|
+
version: %r{validator_jfouffa/([\d\.]+)}i
|
37
|
+
end
|
@@ -1,557 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
# a set of global matchers that will use formatted properties found earlier
|
11
|
-
# they will also be applied to every matcher unless that matcher has it's own
|
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]
|
16
|
-
|
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
|
19
|
-
match do
|
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
|
-
|
23
|
-
mobile %r{(bolt|nokia|samsung(?!b)|mobi(?:le)?|i?p(?:[ao]d|hone)
|
24
|
-
|android|bb\d+|blackberry|iemobile|fennec|bada|meego
|
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
|
58
|
-
end
|
59
|
-
|
60
|
-
# automatically set type to :browser for each defined matcher
|
61
|
-
browsers do
|
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
|
64
|
-
# aliasses are prepended to the list instead of appended (e.g. like blocks)
|
65
|
-
# this ensures that aliasses will be matched before any regular matcher
|
66
|
-
match %r{maxthon}i do
|
67
|
-
# define properties by calling a method with the desired name and:
|
68
|
-
# -- value # => will create a static method that returns that value
|
69
|
-
# -- /(pat)/ # => will create a method that scans the UA and
|
70
|
-
# saves the first capture group
|
71
|
-
# -- { blk } # => will create a dynamic method that returns the result
|
72
|
-
# of the block, it will be executed within an
|
73
|
-
# instantiated Client object (right after creation)
|
74
|
-
name :maxthon
|
75
|
-
engine %r{(webkit|presto|gecko|trident)}i
|
76
|
-
end
|
77
|
-
|
78
|
-
match %r{ucbrowser}i do
|
79
|
-
name :ucbrowser
|
80
|
-
engine %r{(trident|gecko|webkit|presto)}i
|
81
|
-
end
|
82
|
-
|
83
|
-
match %r{edge}i do
|
84
|
-
name :edge
|
85
|
-
engine :edge
|
86
|
-
modern? true
|
87
|
-
end
|
88
|
-
|
89
|
-
match %r{ope?ra?\smini}i do
|
90
|
-
name :opera_mini
|
91
|
-
version %r{ope?ra?\smini/([\d\.]+)}i
|
92
|
-
engine %r{(presto|webkit)}i
|
93
|
-
end
|
94
|
-
|
95
|
-
match %r{opera[^\w]}i do
|
96
|
-
name :opera
|
97
|
-
version %r{(?:opera[\s/]|version/)([\d\.]+)}i
|
98
|
-
engine %r{(presto|webkit)}i
|
99
|
-
end
|
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
|
-
|
110
|
-
match %r{msie|trident}i do
|
111
|
-
name :ie
|
112
|
-
engine :trident
|
113
|
-
version %r{(?:(?:ms)?ie\s|rv:)([\d\.]+)}i
|
114
|
-
modern? { version >= 10 }
|
115
|
-
end
|
116
|
-
|
117
|
-
match %r{chrome(?:ium)?}i do
|
118
|
-
name :chrome
|
119
|
-
version %r{chrome(?:ium)?/([\d\.]+)}i
|
120
|
-
engine %r{(webkit|blink)}i
|
121
|
-
modern? { version >= 50 }
|
122
|
-
end
|
123
|
-
|
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
|
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
|
149
|
-
engine %r{(gecko|servo)}i
|
150
|
-
engine_version %r{(?:rv:\s?|servo/)([\d\.]+)}i
|
151
|
-
modern? { version >= 50 }
|
152
|
-
end
|
153
|
-
|
154
|
-
match %r{safari}i do
|
155
|
-
name :safari
|
156
|
-
engine :webkit
|
157
|
-
version %r{(?:safari|version)/([\d\.]+)}i
|
158
|
-
modern? { version >= 9 }
|
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
|
205
|
-
end
|
206
|
-
|
207
|
-
# automatically set type to :bot for each defined matcher
|
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
|
228
|
-
match %r{yahoo\!\sslurp}i, name: :yahoo_slurp
|
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
|
233
|
-
match %r{baiduspider}i, name: :baiduspider
|
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
|
240
|
-
match %r{sosospider}i, name: :sosospider
|
241
|
-
match %r{duckduckgo}i, name: :duckduckgo
|
242
|
-
match %r{beslistbot}i, name: :beslistbot
|
243
|
-
match %r{twitterbot}i, name: :twitterbot
|
244
|
-
match %r{linkdexbot}i, name: :linkdexbot
|
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
|
271
|
-
match %r{alexibot}i, name: :alexibot
|
272
|
-
match %r{face(?:bookexternalhit|bot)}i, name: :facebook
|
273
|
-
match %r{getright}i, name: :getright
|
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
|
291
|
-
match %r{auresys}i, name: :auresys
|
292
|
-
match %r{bingbot}i, name: :bingbot
|
293
|
-
match %r{gaisbot}i, name: :gaisbot
|
294
|
-
match %r{backrub}i, name: :backrub
|
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
|
306
|
-
match %r{bizbot}i, name: :bizbot
|
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
|
312
|
-
match %r{ecatch}i, name: :ecatch
|
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
|
340
|
-
|
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
|
373
|
-
end
|
374
|
-
|
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
|
378
|
-
match %r{cse\shtml\svalidator}i, name: :cse_html_validator
|
379
|
-
match %r{p3p\svalidator}i, name: :p3p_validator
|
380
|
-
match %r{wdg_validator}i, name: :wdg_validator
|
381
|
-
match %r{w3c_validator}i, name: :w3c_validator
|
382
|
-
match %r{htmlparser}i, name: :htmlparser
|
383
|
-
match %r{csscheck}i, name: :csscheck
|
384
|
-
|
385
|
-
match %r{cynthia}i, name: :cynthia,
|
386
|
-
version: %r{cynthia\s([\d\.]+)}i
|
387
|
-
|
388
|
-
match %r{w3c_css_validator}i, name: :w3c_css_validator,
|
389
|
-
version: %r{validator_jfouffa/([\d\.]+)}i
|
390
|
-
end
|
391
|
-
|
392
|
-
# automatically set type to :library for each defined matcher
|
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
|
404
|
-
end
|
405
|
-
|
406
|
-
# inherit properties a standard set of properties by the name of a
|
407
|
-
# previously defined matcher, overwritten by properties added within matchers
|
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
|
431
|
-
end
|
432
|
-
|
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
|
463
|
-
end
|
464
|
-
|
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
|
518
|
-
end
|
519
|
-
|
520
|
-
# never thought a browser would want to be like IE...
|
521
|
-
like :ie do
|
522
|
-
# version does not have to be supplied because we simply want to use
|
523
|
-
# the version supplied by the MSIE token instead (there is no version on
|
524
|
-
# the avant browser or slimbrowser etc... UA itself)
|
525
|
-
match %r{avant\sbrowser}i, name: :avant_browser
|
526
|
-
match %r{greenbrowser}i, name: :greenbrowser
|
527
|
-
match %r{slimbrowser}i, name: :slimbrowser
|
528
|
-
match %r{theworld}i, name: :theworld
|
529
|
-
match %r{browzar}i, name: :browzar
|
530
|
-
|
531
|
-
# below are special cases where we need to manually
|
532
|
-
# supply the version pattern
|
533
|
-
match %r{deepnet\sexplorer}i, name: :deepnet_explorer,
|
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
|
556
|
-
end
|
557
|
-
end
|
3
|
+
require_relative 'matchers/global'
|
4
|
+
require_relative 'matchers/emails'
|
5
|
+
require_relative 'matchers/browsers'
|
6
|
+
require_relative 'matchers/bots'
|
7
|
+
require_relative 'matchers/validators'
|
8
|
+
require_relative 'matchers/rss'
|
9
|
+
require_relative 'matchers/libraries'
|