brauser 3.2.6 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +29 -0
- data/.travis-gemfile +1 -1
- data/.travis.yml +2 -1
- data/Gemfile +3 -3
- data/README.md +6 -6
- data/brauser.gemspec +1 -1
- data/doc/Brauser.html +7 -7
- data/doc/Brauser/Browseable.html +127 -0
- data/doc/Brauser/{BrowserMethods → Browseable}/Attributes.html +34 -30
- data/doc/Brauser/Browseable/DefaultDefinitions.html +387 -0
- data/doc/Brauser/{BrowserMethods → Browseable}/General.html +9 -9
- data/doc/Brauser/{BrowserMethods → Browseable}/General/ClassMethods.html +33 -33
- data/doc/Brauser/{BrowserMethods → Browseable}/Parsing.html +23 -23
- data/doc/Brauser/{BrowserMethods → Browseable}/PartialQuerying.html +59 -53
- data/doc/Brauser/{BrowserMethods → Browseable}/Querying.html +43 -37
- data/doc/Brauser/{BrowserMethods → Browseable}/Register.html +9 -9
- data/doc/Brauser/Browseable/Register/ClassMethods.html +516 -0
- data/doc/Brauser/Browser.html +787 -1362
- data/doc/Brauser/Definition.html +230 -40
- data/doc/Brauser/Hooks.html +4 -4
- data/doc/Brauser/Hooks/RubyOnRails.html +4 -4
- data/doc/Brauser/Query.html +53 -53
- data/doc/Brauser/{BrowserMethods.html → Queryable.html} +13 -11
- data/doc/Brauser/{Chainers.html → Queryable/Chainers.html} +51 -45
- data/doc/Brauser/{Queries.html → Queryable/Queries.html} +47 -41
- data/doc/Brauser/Version.html +6 -6
- data/doc/_index.html +41 -27
- data/doc/class_list.html +1 -1
- data/doc/css/style.css +1 -0
- data/doc/file.README.html +10 -10
- data/doc/frames.html +1 -1
- data/doc/index.html +10 -10
- data/doc/method_list.html +68 -74
- data/doc/top-level-namespace.html +4 -4
- data/lib/brauser.rb +14 -3
- data/lib/brauser/browseable/attributes.rb +95 -0
- data/lib/brauser/browseable/general.rb +104 -0
- data/lib/brauser/browseable/parsing.rb +127 -0
- data/lib/brauser/browseable/partial_querying.rb +116 -0
- data/lib/brauser/browseable/querying.rb +63 -0
- data/lib/brauser/browseable/register.rb +73 -0
- data/lib/brauser/browser.rb +34 -741
- data/lib/brauser/definition.rb +30 -5
- data/lib/brauser/definitions/browsers.rb +66 -0
- data/lib/brauser/definitions/languages.rb +130 -0
- data/lib/brauser/definitions/platforms.rb +30 -0
- data/lib/brauser/query.rb +4 -99
- data/lib/brauser/queryable/chainers.rb +56 -0
- data/lib/brauser/queryable/queries.rb +60 -0
- data/lib/brauser/version.rb +3 -2
- data/spec/brauser/browser_spec.rb +26 -29
- data/spec/brauser/query_spec.rb +15 -13
- metadata +30 -17
- data/.bundle/install.log +0 -106
- data/doc/Brauser/BrowserMethods/Register/ClassMethods.html +0 -770
data/lib/brauser/definition.rb
CHANGED
@@ -38,12 +38,37 @@ module Brauser
|
|
38
38
|
# @param args [Array] Arguments to pass to the matcher. The first is the definition itself.
|
39
39
|
# @return [Object|NilClass] A match if matcher succeeded, `nil` otherwise.
|
40
40
|
def match(type, *args)
|
41
|
-
|
42
|
-
|
41
|
+
begin
|
42
|
+
matcher = send(type || :primary)
|
43
|
+
rescue NoMethodError
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
|
47
|
+
perform_match(matcher, args[1], args)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
43
51
|
|
44
|
-
|
52
|
+
# Recognizes a browser disambiguating against another.
|
53
|
+
#
|
54
|
+
# @param agent [String] The agent to match.
|
55
|
+
# @param positive_matcher [Regexp] The expression to match.
|
56
|
+
# @param negative_matcher [Regexp] The expression NOT to match.
|
57
|
+
# @return [Boolean] `true` if matching succeeded, `false otherwise`.
|
58
|
+
def self.disambiguate_browser(agent, positive_matcher, negative_matcher)
|
59
|
+
agent =~ positive_matcher && agent !~ negative_matcher
|
60
|
+
end
|
61
|
+
|
62
|
+
# Performs a match against a target.
|
63
|
+
#
|
64
|
+
# @param matcher [Object] The matcher to run, can be a `Regexp`, a `Proc` or a string.
|
65
|
+
# @param target [String] The string to match.
|
66
|
+
# @param args [Array] Arguments to pass to the matcher. The first is definition itself.
|
67
|
+
# @return [Object|NilClass] A match if matcher succeeded, `nil` otherwise.
|
68
|
+
def perform_match(matcher, target, args)
|
69
|
+
if matcher.is_a?(::Regexp)
|
45
70
|
matcher.match(target)
|
46
|
-
elsif matcher.respond_to?(:call)
|
71
|
+
elsif matcher.respond_to?(:call)
|
47
72
|
matcher.call(*args)
|
48
73
|
elsif target == matcher
|
49
74
|
target
|
@@ -52,4 +77,4 @@ module Brauser
|
|
52
77
|
end
|
53
78
|
end
|
54
79
|
end
|
55
|
-
end
|
80
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
4
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
5
|
+
#
|
6
|
+
|
7
|
+
module Brauser
|
8
|
+
# The interface of brauser browsers.
|
9
|
+
module Browseable
|
10
|
+
# The default browsers definitions.
|
11
|
+
module DefaultDefinitions
|
12
|
+
# Default mobile browsers.
|
13
|
+
MOBILE_BROWSERS = [
|
14
|
+
[:coremedia, "Apple CoreMedia", /coremedia/i, /.+CoreMedia v([a-z0-9.]+)/i],
|
15
|
+
|
16
|
+
[:opera_mobile, "Opera Mobile", /opera mobi/i, /.+Opera Mobi.+((.+Opera )|(Version\/))([a-z0-9.]+)/i],
|
17
|
+
[:opera, "Opera", /opera/i, proc { |_, agent|
|
18
|
+
version = ((agent !~ /wii/i) ? /((.+Opera )|(Version\/))(?<version>[a-z0-9.]+)/i : /(.+Nintendo Wii; U; ; )(?<version>[a-z0-9.]+)/i).match(agent)
|
19
|
+
version ? version["version"] : nil
|
20
|
+
}],
|
21
|
+
|
22
|
+
[:android, "Android", /android/i, /(.+Android )([a-z0-9.]+)/i],
|
23
|
+
[:blackberry, "RIM BlackBerry", /blackberry/i, /(.+Version\/)([a-z0-9.]+)/i],
|
24
|
+
[:kindle, "Amazon Kindle", /(kindle)/i, /(.+(Kindle|Silk)\/)([a-z0-9.]+)/i],
|
25
|
+
[:psp, "Sony Playstation Portable", /psp/i, /(.+PlayStation Portable\); )([a-z0-9.]+)/i],
|
26
|
+
[:ps3, "Sony Playstation 3", /playstation 3/i, /(.+PLAYSTATION 3; )([a-z0-9.]+)/i],
|
27
|
+
[:windows_phone, "Microsoft Windows Phone", /windows phone/i, /(.+IEMobile\/)([a-z0-9.]+)/i],
|
28
|
+
[:wii, "Nintendo Wii", /nintendo wii/, /(.+Nintendo Wii; U; ; )([a-z0-9.]+)/i],
|
29
|
+
|
30
|
+
[:chrome_ios, "Chrome iOS", /crios/i, /(.+CriOS\/)([a-z0-9.]+)/i],
|
31
|
+
[:ipod, "Apple iPod", /ipod/i, /(.+Version\/)([a-z0-9.]+)/i],
|
32
|
+
[:iphone, "Apple iPhone", /iphone/i, /(.+Version\/)([a-z0-9.]+)/i],
|
33
|
+
[:ipad, "Apple iPad", /ipad/i, /(.+Version\/)([a-z0-9.]+)/i],
|
34
|
+
|
35
|
+
[:mobile, "Other Mobile Browser", /(mobile|symbian|midp|windows ce)/i, /.+\/([a-z0-9.]+)/i]
|
36
|
+
]
|
37
|
+
|
38
|
+
# Default major desktop browsers.
|
39
|
+
MAJOR_DESKTOP_BROWSERS = [
|
40
|
+
[:chrome, "Google Chrome", /((chrome)|(chromium))/i, /(.+Chrom[a-z]+\/)([a-z0-9.]+)/i],
|
41
|
+
[:netscape, "Netscape Navigator", /(netscape|navigator)\//i, /((Netscape|Navigator)\/)([a-z0-9.]+)/i],
|
42
|
+
[:firefox, "Mozilla Firefox", /firefox/i, /(.+Firefox\/)([a-z0-9.]+)/i],
|
43
|
+
[:safari, "Apple Safari", proc { |_, agent|
|
44
|
+
Brauser::Definition.disambiguate_browser(agent, /safari/i, /((chrome)|(chromium)|(crios))/i)
|
45
|
+
}, /(.+Version\/)([a-z0-9.]+)/i]
|
46
|
+
]
|
47
|
+
|
48
|
+
# Default Microsoft Internet Explorer browsers.
|
49
|
+
MSIE_BROWSERS = [
|
50
|
+
[:msie_compatibility, "Microsoft Internet Explorer (Compatibility View)", /(msie 7\.0).+(trident)/i, proc { |_, agent|
|
51
|
+
version = /(.+trident\/)(?<version>[a-z0-9.]+)/i.match(agent)["version"].split(".")
|
52
|
+
version[0] = version[0].to_integer + 4
|
53
|
+
version.join(".")
|
54
|
+
}],
|
55
|
+
[:msie, "Microsoft Internet Explorer", proc { |_, agent| Brauser::Definition.disambiguate_browser(agent, /msie/i, /opera/i) }, /(.+MSIE )([a-z0-9.]+)/i]
|
56
|
+
]
|
57
|
+
|
58
|
+
# Default minor desktop browsers.
|
59
|
+
MINOR_DESKTOP_BROWSERS = [
|
60
|
+
[:quicktime, "Apple QuickTime", /quicktime/i, /(.+((QuickTime\/)|(qtver=)))([a-z0-9.]+)/i],
|
61
|
+
[:webkit, "WebKit Browser", /webkit/i, /(.+WebKit\/)([a-z0-9.]+)/i],
|
62
|
+
[:gecko, "Gecko Browser", /gecko/i, /(.+rv:|Gecko\/)([a-z0-9.]+)/i]
|
63
|
+
]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
4
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
5
|
+
#
|
6
|
+
|
7
|
+
module Brauser
|
8
|
+
# The interface of brauser browsers.
|
9
|
+
module Browseable
|
10
|
+
# The default browsers definitions.
|
11
|
+
module DefaultDefinitions
|
12
|
+
# Default languages.
|
13
|
+
LANGUAGES = {
|
14
|
+
"af" => "Afrikaans",
|
15
|
+
"sq" => "Albanian",
|
16
|
+
"eu" => "Basque",
|
17
|
+
"bg" => "Bulgarian",
|
18
|
+
"be" => "Byelorussian",
|
19
|
+
"ca" => "Catalan",
|
20
|
+
"zh" => "Chinese",
|
21
|
+
"zh-cn" => "Chinese/China",
|
22
|
+
"zh-tw" => "Chinese/Taiwan",
|
23
|
+
"zh-hk" => "Chinese/Hong Kong",
|
24
|
+
"zh-sg" => "Chinese/singapore",
|
25
|
+
"hr" => "Croatian",
|
26
|
+
"cs" => "Czech",
|
27
|
+
"da" => "Danish",
|
28
|
+
"nl" => "Dutch",
|
29
|
+
"nl-nl" => "Dutch/Netherlands",
|
30
|
+
"nl-be" => "Dutch/Belgium",
|
31
|
+
"en" => "English",
|
32
|
+
"en-gb" => "English/United Kingdom",
|
33
|
+
"en-us" => "English/United States",
|
34
|
+
"en-au" => "English/Australian",
|
35
|
+
"en-ca" => "English/Canada",
|
36
|
+
"en-nz" => "English/New Zealand",
|
37
|
+
"en-ie" => "English/Ireland",
|
38
|
+
"en-za" => "English/South Africa",
|
39
|
+
"en-jm" => "English/Jamaica",
|
40
|
+
"en-bz" => "English/Belize",
|
41
|
+
"en-tt" => "English/Trinidad",
|
42
|
+
"et" => "Estonian",
|
43
|
+
"fo" => "Faeroese",
|
44
|
+
"fa" => "Farsi",
|
45
|
+
"fi" => "Finnish",
|
46
|
+
"fr" => "French",
|
47
|
+
"fr-be" => "French/Belgium",
|
48
|
+
"fr-fr" => "French/France",
|
49
|
+
"fr-ch" => "French/Switzerland",
|
50
|
+
"fr-ca" => "French/Canada",
|
51
|
+
"fr-lu" => "French/Luxembourg",
|
52
|
+
"gd" => "Gaelic",
|
53
|
+
"gl" => "Galician",
|
54
|
+
"de" => "German",
|
55
|
+
"de-at" => "German/Austria",
|
56
|
+
"de-de" => "German/Germany",
|
57
|
+
"de-ch" => "German/Switzerland",
|
58
|
+
"de-lu" => "German/Luxembourg",
|
59
|
+
"de-li" => "German/Liechtenstein",
|
60
|
+
"el" => "Greek",
|
61
|
+
"he" => "Hebrew",
|
62
|
+
"he-il" => "Hebrew/Israel",
|
63
|
+
"hi" => "Hindi",
|
64
|
+
"hu" => "Hungarian",
|
65
|
+
"ie-ee" => "Internet Explorer/Easter Egg",
|
66
|
+
"is" => "Icelandic",
|
67
|
+
"id" => "Indonesian",
|
68
|
+
"in" => "Indonesian",
|
69
|
+
"ga" => "Irish",
|
70
|
+
"it" => "Italian",
|
71
|
+
"it-ch" => "Italian/ Switzerland",
|
72
|
+
"ja" => "Japanese",
|
73
|
+
"km" => "Khmer",
|
74
|
+
"km-kh" => "Khmer/Cambodia",
|
75
|
+
"ko" => "Korean",
|
76
|
+
"lv" => "Latvian",
|
77
|
+
"lt" => "Lithuanian",
|
78
|
+
"mk" => "Macedonian",
|
79
|
+
"ms" => "Malaysian",
|
80
|
+
"mt" => "Maltese",
|
81
|
+
"no" => "Norwegian",
|
82
|
+
"pl" => "Polish",
|
83
|
+
"pt" => "Portuguese",
|
84
|
+
"pt-br" => "Portuguese/Brazil",
|
85
|
+
"rm" => "Rhaeto-Romanic",
|
86
|
+
"ro" => "Romanian",
|
87
|
+
"ro-mo" => "Romanian/Moldavia",
|
88
|
+
"ru" => "Russian",
|
89
|
+
"ru-mo" => "Russian /Moldavia",
|
90
|
+
"sr" => "Serbian",
|
91
|
+
"sk" => "Slovack",
|
92
|
+
"sl" => "Slovenian",
|
93
|
+
"sb" => "Sorbian",
|
94
|
+
"es" => "Spanish",
|
95
|
+
"es-do" => "Spanish",
|
96
|
+
"es-ar" => "Spanish/Argentina",
|
97
|
+
"es-co" => "Spanish/Colombia",
|
98
|
+
"es-mx" => "Spanish/Mexico",
|
99
|
+
"es-es" => "Spanish/Spain",
|
100
|
+
"es-gt" => "Spanish/Guatemala",
|
101
|
+
"es-cr" => "Spanish/Costa Rica",
|
102
|
+
"es-pa" => "Spanish/Panama",
|
103
|
+
"es-ve" => "Spanish/Venezuela",
|
104
|
+
"es-pe" => "Spanish/Peru",
|
105
|
+
"es-ec" => "Spanish/Ecuador",
|
106
|
+
"es-cl" => "Spanish/Chile",
|
107
|
+
"es-uy" => "Spanish/Uruguay",
|
108
|
+
"es-py" => "Spanish/Paraguay",
|
109
|
+
"es-bo" => "Spanish/Bolivia",
|
110
|
+
"es-sv" => "Spanish/El salvador",
|
111
|
+
"es-hn" => "Spanish/Honduras",
|
112
|
+
"es-ni" => "Spanish/Nicaragua",
|
113
|
+
"es-pr" => "Spanish/Puerto Rico",
|
114
|
+
"sx" => "Sutu",
|
115
|
+
"sv" => "Swedish",
|
116
|
+
"sv-se" => "Swedish/Sweden",
|
117
|
+
"sv-fi" => "Swedish/Finland",
|
118
|
+
"ts" => "Thai",
|
119
|
+
"tn" => "Tswana",
|
120
|
+
"tr" => "Turkish",
|
121
|
+
"uk" => "Ukrainian",
|
122
|
+
"ur" => "Urdu",
|
123
|
+
"vi" => "Vietnamese",
|
124
|
+
"xh" => "Xshosa",
|
125
|
+
"ji" => "Yiddish",
|
126
|
+
"zu" => "Zulu"
|
127
|
+
}
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
4
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
5
|
+
#
|
6
|
+
|
7
|
+
module Brauser
|
8
|
+
# The interface of brauser browsers.
|
9
|
+
module Browseable
|
10
|
+
# The default browsers definitions.
|
11
|
+
module DefaultDefinitions
|
12
|
+
# Default platforms.
|
13
|
+
PLATFORMS = [
|
14
|
+
[:symbian, "Symbian", /s60|symb/i],
|
15
|
+
[:windows_phone, "Microsoft Windows Phone", /windows phone/i],
|
16
|
+
[:kindle, "Nokia Symbian", /kindle|silk/i],
|
17
|
+
[:ios, "Apple iOS", proc { |_, agent| [:iphone, :ipad, :ipod, :chrome_ios].include?(name) || agent =~ /ipad|iphone|ipod|crios/i }],
|
18
|
+
[:android, "Android", /android/i],
|
19
|
+
[:blackberry, "RIM BlackBerry", /blackberry/i],
|
20
|
+
[:psp, "Sony Playstation Portable", /psp/i],
|
21
|
+
[:ps3, "Sony Playstation 3", /playstation 3/i],
|
22
|
+
[:wii, "Nintendo Wii", /wii/i],
|
23
|
+
|
24
|
+
[:linux, "Linux", /linux/i],
|
25
|
+
[:osx, "Apple MacOS X", /mac|macintosh|mac os x/i],
|
26
|
+
[:windows, "Microsoft Windows", /windows/i]
|
27
|
+
]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/brauser/query.rb
CHANGED
@@ -4,106 +4,11 @@
|
|
4
4
|
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
5
5
|
#
|
6
6
|
|
7
|
-
# A framework agnostic browser detection and querying helper.
|
8
7
|
module Brauser
|
9
|
-
# Methods to chain queries.
|
10
|
-
module Chainers
|
11
|
-
# Checks if the browser is a specific name and optionally of a specific version and platform.
|
12
|
-
#
|
13
|
-
# @see #version?
|
14
|
-
# @see #on?
|
15
|
-
#
|
16
|
-
# @param names [Symbol|Array] A list of specific names to match. Also, this meta-names are supported: `:capable` and `:tablet`.
|
17
|
-
# @param versions [Hash] An hash with specific version to match against. Need to be in any form that {#v} understands.
|
18
|
-
# @param platforms [Symbol|Array] A list of specific platform to match. Valid values are all those possible for the platform attribute.
|
19
|
-
# @return [Query] The query itself.
|
20
|
-
def is(names = [], versions = {}, platforms = [])
|
21
|
-
@result = is?(names, versions, platforms)
|
22
|
-
self
|
23
|
-
end
|
24
|
-
|
25
|
-
# Checks if the browser is a specific version.
|
26
|
-
#
|
27
|
-
# @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against,
|
28
|
-
# in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
|
29
|
-
# @return [Query] The query itself.
|
30
|
-
def v(versions = {})
|
31
|
-
@result = v?(versions)
|
32
|
-
self
|
33
|
-
end
|
34
|
-
|
35
|
-
# Check if the browser is on a specific platform.
|
36
|
-
#
|
37
|
-
# @param platforms [Symbol|Array] A list of specific platform to match.
|
38
|
-
# @return [Query] The query itself.
|
39
|
-
def on(platforms = [])
|
40
|
-
@result = on?(platforms)
|
41
|
-
self
|
42
|
-
end
|
43
|
-
|
44
|
-
# Check if the browser accepts the specified languages.
|
45
|
-
#
|
46
|
-
# @param langs [String|Array] A list of languages to match against.
|
47
|
-
# @return [Query] The query itself.
|
48
|
-
def accepts(langs = [])
|
49
|
-
@result = accepts?(langs)
|
50
|
-
self
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# Methods to make queries.
|
55
|
-
module Queries
|
56
|
-
# Checks if the browser is a specific name and optionally of a specific version and platform.
|
57
|
-
#
|
58
|
-
# This version returns a boolean and it is equal to append a call to `#result` to the method `#is`.
|
59
|
-
#
|
60
|
-
# @see #v?
|
61
|
-
# @see #on?
|
62
|
-
#
|
63
|
-
# @param names [Symbol|Array] A list of specific names to match. Also, this meta-names are supported: `:capable` and `:tablet`.
|
64
|
-
# @param versions [Hash] An hash with specific version to match against. Need to be in any form that `#v` understands.
|
65
|
-
# @param platforms [Symbol|Array] A list of specific platform to match. Valid values are all those possible for the platform attribute.
|
66
|
-
# @return [Boolean] `true` if current browser matches, `false` otherwise.
|
67
|
-
def is?(names = [], versions = {}, platforms = [])
|
68
|
-
@result ? @target.is?(names, versions, platforms) : @result
|
69
|
-
end
|
70
|
-
|
71
|
-
# Checks if the browser is a specific version.
|
72
|
-
#
|
73
|
-
# This version returns a boolean and it is equal to append a call to `#result` to the method `#v`.
|
74
|
-
#
|
75
|
-
# @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against,
|
76
|
-
# in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
|
77
|
-
# @return [Boolean] `true` if current browser matches, `false` otherwise.
|
78
|
-
def v?(versions = {})
|
79
|
-
@result ? @target.v?(versions) : @result
|
80
|
-
end
|
81
|
-
|
82
|
-
# Check if the browser is on a specific platform.
|
83
|
-
#
|
84
|
-
# This version returns a boolean and it is equal to append a call to `#result` to the method `#on.
|
85
|
-
#
|
86
|
-
# @param platforms [Symbol|Array] A list of specific platform to match.
|
87
|
-
# @return [Boolean] `true` if current browser matches, `false` otherwise.
|
88
|
-
def on?(platforms = [])
|
89
|
-
@result ? @target.on?(platforms) : @result
|
90
|
-
end
|
91
|
-
|
92
|
-
# Check if the browser accepts the specified languages.
|
93
|
-
#
|
94
|
-
# This version returns a boolean and it is equal to append a call to `#result` to the method `#accepts.
|
95
|
-
#
|
96
|
-
# @param langs [String|Array] A list of languages to match against.
|
97
|
-
# @return [Boolean] `true` if current browser matches, `false` otherwise.
|
98
|
-
def accepts?(langs = [])
|
99
|
-
@result ? @target.accepts?(langs) : @result
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
8
|
# A query to a browser. This class enables concatenation, like:
|
104
9
|
#
|
105
10
|
# ```ruby
|
106
|
-
# Brauser::Browser.new.is(:msie).
|
11
|
+
# Brauser::Browser.new.is(:msie).version(">= 7").on?(:windows)
|
107
12
|
# ```
|
108
13
|
#
|
109
14
|
# To end concatenation, use the `?` form of the queries or call `.result`.
|
@@ -116,8 +21,8 @@ module Brauser
|
|
116
21
|
attr_accessor :target
|
117
22
|
attr_accessor :result
|
118
23
|
|
119
|
-
include Brauser::Chainers
|
120
|
-
include Brauser::Queries
|
24
|
+
include Brauser::Queryable::Chainers
|
25
|
+
include Brauser::Queryable::Queries
|
121
26
|
|
122
27
|
# Creates a new query.
|
123
28
|
#
|
@@ -128,4 +33,4 @@ module Brauser
|
|
128
33
|
@result = result
|
129
34
|
end
|
130
35
|
end
|
131
|
-
end
|
36
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of the brauser gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
4
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
5
|
+
#
|
6
|
+
|
7
|
+
module Brauser
|
8
|
+
# The interface of brauser queries.
|
9
|
+
module Queryable
|
10
|
+
# Methods to chain queries.
|
11
|
+
module Chainers
|
12
|
+
# Checks if the browser is a specific name and optionally of a specific version and platform.
|
13
|
+
#
|
14
|
+
# @see #version?
|
15
|
+
# @see #on?
|
16
|
+
#
|
17
|
+
# @param names [Symbol|Array] A list of specific names to match. Also, this meta-names are supported: `:capable` and `:tablet`.
|
18
|
+
# @param versions [Hash] An hash with specific version to match against. Need to be in any form that {#v} understands.
|
19
|
+
# @param platforms [Symbol|Array] A list of specific platform to match. Valid values are all those possible for the platform attribute.
|
20
|
+
# @return [Query] The query itself.
|
21
|
+
def is(names = [], versions = {}, platforms = [])
|
22
|
+
@result = is?(names, versions, platforms)
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
# Checks if the browser is a specific version.
|
27
|
+
#
|
28
|
+
# @param versions [String|Hash] A string in the form `operator version && ...` (example: `>= 7 && < 4`) or an hash with specific version to match against,
|
29
|
+
# in form `{:operator => version}`, where operator is one of `:lt, :lte, :eq, :gt, :gte`.
|
30
|
+
# @return [Query] The query itself.
|
31
|
+
def version(versions = {})
|
32
|
+
@result = version?(versions)
|
33
|
+
self
|
34
|
+
end
|
35
|
+
alias_method :v, :version
|
36
|
+
|
37
|
+
# Check if the browser is on a specific platform.
|
38
|
+
#
|
39
|
+
# @param platforms [Symbol|Array] A list of specific platform to match.
|
40
|
+
# @return [Query] The query itself.
|
41
|
+
def on(platforms = [])
|
42
|
+
@result = on?(platforms)
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
# Check if the browser accepts the specified languages.
|
47
|
+
#
|
48
|
+
# @param langs [String|Array] A list of languages to match against.
|
49
|
+
# @return [Query] The query itself.
|
50
|
+
def accepts(langs = [])
|
51
|
+
@result = accepts?(langs)
|
52
|
+
self
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|