vcx-browser 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,53 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ browser (0.1.3)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ actionpack (3.2.3)
10
+ activemodel (= 3.2.3)
11
+ activesupport (= 3.2.3)
12
+ builder (~> 3.0.0)
13
+ erubis (~> 2.7.0)
14
+ journey (~> 1.0.1)
15
+ rack (~> 1.4.0)
16
+ rack-cache (~> 1.2)
17
+ rack-test (~> 0.6.1)
18
+ sprockets (~> 2.1.2)
19
+ activemodel (3.2.3)
20
+ activesupport (= 3.2.3)
21
+ builder (~> 3.0.0)
22
+ activesupport (3.2.3)
23
+ i18n (~> 0.6)
24
+ multi_json (~> 1.0)
25
+ builder (3.0.0)
26
+ erubis (2.7.0)
27
+ hike (1.2.1)
28
+ i18n (0.6.0)
29
+ journey (1.0.3)
30
+ json (1.6.6)
31
+ multi_json (1.2.0)
32
+ rack (1.4.1)
33
+ rack-cache (1.2)
34
+ rack (>= 0.4)
35
+ rack-test (0.6.1)
36
+ rack (>= 1.0)
37
+ rake (0.9.2.2)
38
+ rdoc (3.12)
39
+ json (~> 1.4)
40
+ sprockets (2.1.2)
41
+ hike (~> 1.2)
42
+ rack (~> 1.0)
43
+ tilt (~> 1.1, != 1.3.0)
44
+ tilt (1.3.3)
45
+
46
+ PLATFORMS
47
+ ruby
48
+
49
+ DEPENDENCIES
50
+ actionpack (~> 3.0)
51
+ browser!
52
+ rake (~> 0.9)
53
+ rdoc (~> 3.12)
data/README.rdoc ADDED
@@ -0,0 +1,75 @@
1
+ = Update
2
+ Fixed the problem about the version capable
3
+ = Browser
4
+
5
+ Do some browser detection with Ruby. Includes ActionController integration.
6
+
7
+ == Installation
8
+
9
+ gem install browser
10
+
11
+ == Usage
12
+
13
+ require "rubygems"
14
+ require "browser"
15
+
16
+ browser = Browser.new(:ua => "some string", :accept_language => "en-us")
17
+ browser.safari?
18
+ browser.opera?
19
+ browser.mobile?
20
+ browser.firefox?
21
+ browser.ie?
22
+ browser.ie6? # this goes up to 9
23
+ browser.capable? # supports some CSS 3
24
+ browser.platform # return :mac, :windows, :linux or :other
25
+ browser.mac?
26
+ browser.windows?
27
+ browser.linux?
28
+ browser.meta # an array with several attributes
29
+ browser.to_s # the meta info joined by space
30
+
31
+ See the tests for more examples.
32
+
33
+ === Rails integration
34
+
35
+ Just add it to the Gemfile or `environment.rb`, depending of your Rails version.
36
+
37
+ gem "browser" #=> Rails 3
38
+ config.gem "browser" #=> Rails 2
39
+
40
+ This adds a helper method called `browser`, that inspects your current user agent.
41
+
42
+ <% if browser.ie6? %>
43
+ <p class="disclaimer">Your're running an older IE version. Please update it!</p>
44
+ <% end %>
45
+
46
+ == Maintainer
47
+
48
+ * Nando Vieira - http://nandovieira.com.br
49
+
50
+ == Contributors
51
+
52
+ * http://github.com/chrisyour/browser
53
+
54
+ == License
55
+
56
+ (The MIT License)
57
+
58
+ Permission is hereby granted, free of charge, to any person obtaining
59
+ a copy of this software and associated documentation files (the
60
+ 'Software'), to deal in the Software without restriction, including
61
+ without limitation the rights to use, copy, modify, merge, publish,
62
+ distribute, sublicense, and/or sell copies of the Software, and to
63
+ permit persons to whom the Software is furnished to do so, subject to
64
+ the following conditions:
65
+
66
+ The above copyright notice and this permission notice shall be
67
+ included in all copies or substantial portions of the Software.
68
+
69
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
70
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
71
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
72
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
73
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
74
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
75
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require "./lib/browser/version"
5
+
6
+ require "rake/testtask"
7
+ Rake::TestTask.new do |t|
8
+ t.libs << "lib"
9
+ t.libs << "test"
10
+ t.test_files = FileList["test/**/*_test.rb"]
11
+ t.verbose = true
12
+ t.ruby_opts = %w[-rubygems]
13
+ end
14
+
15
+ require 'rdoc/task'
16
+ RDoc::Task.new do |rdoc|
17
+ rdoc.main = "README.rdoc"
18
+ rdoc.rdoc_dir = "doc"
19
+ rdoc.title = "Browser API"
20
+ rdoc.options += %w[ --line-numbers --charset utf-8 ]
21
+ rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")
22
+ end
23
+
24
+ task :default => :test
@@ -0,0 +1,17 @@
1
+ class Browser
2
+ module ActionController # :nodoc: all
3
+ def self.included(base)
4
+ base.send :helper_method, :browser
5
+ end
6
+
7
+ private
8
+ def browser
9
+ @browser ||= Browser.new(
10
+ :accept_language => request.headers["Accept-Language"],
11
+ :ua => request.headers["User-Agent"]
12
+ )
13
+ end
14
+ end
15
+ end
16
+
17
+ ActionController::Base.send :include, Browser::ActionController
@@ -0,0 +1,8 @@
1
+ class Browser
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 1
5
+ PATCH = 8
6
+ STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
+ end
8
+ end
data/lib/browser.rb ADDED
@@ -0,0 +1,381 @@
1
+ class String
2
+ def to_version
3
+ Gem::Version.new(self)
4
+ end
5
+ end
6
+
7
+ class Browser
8
+ # Add Rails helper if ActionController::Base is available
9
+ require "browser/action_controller" if defined?(ActionController::Base)
10
+
11
+ # Set browser's UA string.
12
+ attr_accessor :user_agent
13
+
14
+ # Set browser's preferred language
15
+ attr_writer :accept_language
16
+
17
+ alias :ua :user_agent
18
+ alias :ua= :user_agent=
19
+
20
+ NAMES = {
21
+ :android => "Android",
22
+ :blackberry => "BlackBerry",
23
+ :chrome => "Chrome",
24
+ :firefox => "Firefox",
25
+ :ie => "Internet Explorer",
26
+ :ipad => "iPad",
27
+ :iphone => "iPhone",
28
+ :ipod => "iPod Touch",
29
+ :opera => "Opera",
30
+ :other => "Other",
31
+ :safari => "Safari",
32
+ :psp => "PlayStation Portable",
33
+ :quicktime => "QuickTime",
34
+ :core_media => "Apple CoreMedia"
35
+ }
36
+
37
+ VERSION_REGEX = /(?:Version|MSIE|Opera|Firefox|Chrome|QuickTime|BlackBerry[^\/]+|CoreMedia v)[\/ ]?([a-z0-9.]+)/i
38
+
39
+ TRIDENT_VERSION_REGEX = /Trident\/([0-9.]+)/
40
+
41
+ LANGUAGES = {
42
+ "af" => "Afrikaans",
43
+ "sq" => "Albanian",
44
+ "eu" => "Basque",
45
+ "bg" => "Bulgarian",
46
+ "be" => "Byelorussian",
47
+ "ca" => "Catalan",
48
+ "zh" => "Chinese",
49
+ "zh-cn" => "Chinese/China",
50
+ "zh-tw" => "Chinese/Taiwan",
51
+ "zh-hk" => "Chinese/Hong Kong",
52
+ "zh-sg" => "Chinese/singapore",
53
+ "hr" => "Croatian",
54
+ "cs" => "Czech",
55
+ "da" => "Danish",
56
+ "nl" => "Dutch",
57
+ "nl-nl" => "Dutch/Netherlands",
58
+ "nl-be" => "Dutch/Belgium",
59
+ "en" => "English",
60
+ "en-gb" => "English/United Kingdom",
61
+ "en-us" => "English/United States",
62
+ "en-au" => "English/Australian",
63
+ "en-ca" => "English/Canada",
64
+ "en-nz" => "English/New Zealand",
65
+ "en-ie" => "English/Ireland",
66
+ "en-za" => "English/South Africa",
67
+ "en-jm" => "English/Jamaica",
68
+ "en-bz" => "English/Belize",
69
+ "en-tt" => "English/Trinidad",
70
+ "et" => "Estonian",
71
+ "fo" => "Faeroese",
72
+ "fa" => "Farsi",
73
+ "fi" => "Finnish",
74
+ "fr" => "French",
75
+ "fr-be" => "French/Belgium",
76
+ "fr-fr" => "French/France",
77
+ "fr-ch" => "French/Switzerland",
78
+ "fr-ca" => "French/Canada",
79
+ "fr-lu" => "French/Luxembourg",
80
+ "gd" => "Gaelic",
81
+ "gl" => "Galician",
82
+ "de" => "German",
83
+ "de-at" => "German/Austria",
84
+ "de-de" => "German/Germany",
85
+ "de-ch" => "German/Switzerland",
86
+ "de-lu" => "German/Luxembourg",
87
+ "de-li" => "German/Liechtenstein",
88
+ "el" => "Greek",
89
+ "he" => "Hebrew",
90
+ "he-il" => "Hebrew/Israel",
91
+ "hi" => "Hindi",
92
+ "hu" => "Hungarian",
93
+ "ie-ee" => "Internet Explorer/Easter Egg",
94
+ "is" => "Icelandic",
95
+ "id" => "Indonesian",
96
+ "in" => "Indonesian",
97
+ "ga" => "Irish",
98
+ "it" => "Italian",
99
+ "it-ch" => "Italian/ Switzerland",
100
+ "ja" => "Japanese",
101
+ "km" => "Khmer",
102
+ "km-kh" => "Khmer/Cambodia",
103
+ "ko" => "Korean",
104
+ "lv" => "Latvian",
105
+ "lt" => "Lithuanian",
106
+ "mk" => "Macedonian",
107
+ "ms" => "Malaysian",
108
+ "mt" => "Maltese",
109
+ "no" => "Norwegian",
110
+ "pl" => "Polish",
111
+ "pt" => "Portuguese",
112
+ "pt-br" => "Portuguese/Brazil",
113
+ "rm" => "Rhaeto-Romanic",
114
+ "ro" => "Romanian",
115
+ "ro-mo" => "Romanian/Moldavia",
116
+ "ru" => "Russian",
117
+ "ru-mo" => "Russian /Moldavia",
118
+ "gd" => "Scots Gaelic",
119
+ "sr" => "Serbian",
120
+ "sk" => "Slovack",
121
+ "sl" => "Slovenian",
122
+ "sb" => "Sorbian",
123
+ "es" => "Spanish",
124
+ "es-do" => "Spanish",
125
+ "es-ar" => "Spanish/Argentina",
126
+ "es-co" => "Spanish/Colombia",
127
+ "es-mx" => "Spanish/Mexico",
128
+ "es-es" => "Spanish/Spain",
129
+ "es-gt" => "Spanish/Guatemala",
130
+ "es-cr" => "Spanish/Costa Rica",
131
+ "es-pa" => "Spanish/Panama",
132
+ "es-ve" => "Spanish/Venezuela",
133
+ "es-pe" => "Spanish/Peru",
134
+ "es-ec" => "Spanish/Ecuador",
135
+ "es-cl" => "Spanish/Chile",
136
+ "es-uy" => "Spanish/Uruguay",
137
+ "es-py" => "Spanish/Paraguay",
138
+ "es-bo" => "Spanish/Bolivia",
139
+ "es-sv" => "Spanish/El salvador",
140
+ "es-hn" => "Spanish/Honduras",
141
+ "es-ni" => "Spanish/Nicaragua",
142
+ "es-pr" => "Spanish/Puerto Rico",
143
+ "sx" => "Sutu",
144
+ "sv" => "Swedish",
145
+ "sv-se" => "Swedish/Sweden",
146
+ "sv-fi" => "Swedish/Finland",
147
+ "ts" => "Thai",
148
+ "tn" => "Tswana",
149
+ "tr" => "Turkish",
150
+ "uk" => "Ukrainian",
151
+ "ur" => "Urdu",
152
+ "vi" => "Vietnamese",
153
+ "xh" => "Xshosa",
154
+ "ji" => "Yiddish",
155
+ "zu" => "Zulu"
156
+ }
157
+
158
+ # Create a new browser instance and set
159
+ # the UA and Accept-Language headers.
160
+ #
161
+ # browser = Browser.new({
162
+ # :ua => "Safari",
163
+ # :accept_language => "pt-br"
164
+ # })
165
+ #
166
+ def initialize(options = {}, &block)
167
+ @user_agent = (options[:user_agent] || options[:ua]).to_s
168
+ @accept_language = options[:accept_language].to_s
169
+
170
+ yield self if block_given?
171
+ end
172
+
173
+ # Get readable browser name.
174
+ def name
175
+ NAMES[id]
176
+ end
177
+
178
+ # Return a symbol that identifies the browser.
179
+ def id
180
+ case
181
+ when chrome? then :chrome
182
+ when iphone? then :iphone
183
+ when ipad? then :ipad
184
+ when ipod? then :ipod
185
+ when ie? then :ie
186
+ when opera? then :opera
187
+ when firefox? then :firefox
188
+ when android? then :android
189
+ when blackberry? then :blackberry
190
+ when safari? then :safari
191
+ when psp? then :psp
192
+ when quicktime? then :quicktime
193
+ when core_media? then :core_media
194
+ else
195
+ :other
196
+ end
197
+ end
198
+
199
+ # Return an array with all preferred languages that this browser accepts.
200
+ def accept_language
201
+ @accept_language.gsub(/;q=[\d.]+/, "").split(",").collect {|l| l.downcase.gsub(/\s/m, "")}
202
+ end
203
+
204
+ # Return major version object.
205
+ def version_obj
206
+ Gem::Version.new(version)
207
+ end
208
+
209
+ # Return major version.
210
+ def version
211
+ full_version.to_s.split(".").first
212
+ end
213
+
214
+ # Return the full version.
215
+ def full_version
216
+ _, v = *ua.match(VERSION_REGEX)
217
+ v || "0.0"
218
+ end
219
+
220
+ # Return true if browser supports some CSS 3 (Safari, Firefox, Opera & IE7+).
221
+ def capable?
222
+ (chrome? && version_obj >= '16'.to_version) ||
223
+ (firefox? && version_obj >= '9'.to_version) ||
224
+ (safari? && version_obj >= '5.1.2'.to_version) ||
225
+ (ie? && version_obj >= '7'.to_version)
226
+ end
227
+
228
+ def compatibility_view?
229
+ ie? && ua.match(TRIDENT_VERSION_REGEX) && version.to_i < ($1.to_i + 4)
230
+ end
231
+
232
+ # Detect if browser is WebKit-based.
233
+ def webkit?
234
+ !!(ua =~ /AppleWebKit/i)
235
+ end
236
+
237
+ # Detect if browser is ios?.
238
+ def ios?
239
+ ipod? || ipad? || iphone?
240
+ end
241
+
242
+ # Detect if browser is mobile.
243
+ def mobile?
244
+ !!(ua =~ /(Mobile|Symbian|MIDP|Windows CE)/) || blackberry? || psp?
245
+ end
246
+
247
+ # Detect if browser is QuickTime
248
+ def quicktime?
249
+ !!(ua =~ /QuickTime/i)
250
+ end
251
+
252
+ # Detect if browser is BlackBerry
253
+ def blackberry?
254
+ !!(ua =~ /BlackBerry/)
255
+ end
256
+
257
+ # Detect if browser is Android.
258
+ def android?
259
+ !!(ua =~ /Android/)
260
+ end
261
+
262
+ # Detect if browser is Apple CoreMedia.
263
+ def core_media?
264
+ !!(ua =~ /CoreMedia/)
265
+ end
266
+
267
+ # Detect if browser is iPhone.
268
+ def iphone?
269
+ !!(ua =~ /iPhone/)
270
+ end
271
+
272
+ # Detect if browser is iPad.
273
+ def ipad?
274
+ !!(ua =~ /iPad/)
275
+ end
276
+
277
+ # Detect if browser is iPod.
278
+ def ipod?
279
+ !!(ua =~ /iPod/)
280
+ end
281
+
282
+ # Detect if browser is Safari.
283
+ def safari?
284
+ ua =~ /Safari/ && ua !~ /Chrome/
285
+ end
286
+
287
+ # Detect if browser is Firefox.
288
+ def firefox?
289
+ !!(ua =~ /Firefox/)
290
+ end
291
+
292
+ # Detect if browser is Chrome.
293
+ def chrome?
294
+ !!(ua =~ /Chrome/)
295
+ end
296
+
297
+ # Detect if browser is Internet Explorer.
298
+ def ie?
299
+ !!(ua =~ /MSIE/ && ua !~ /Opera/)
300
+ end
301
+
302
+ # Detect if browser is Internet Explorer 6.
303
+ def ie6?
304
+ ie? && version == "6"
305
+ end
306
+
307
+ # Detect if browser is Internet Explorer 7.
308
+ def ie7?
309
+ ie? && version == "7"
310
+ end
311
+
312
+ # Detect if browser is Internet Explorer 8.
313
+ def ie8?
314
+ ie? && version == "8"
315
+ end
316
+
317
+ # Detect if browser is Internet Explorer 9.
318
+ def ie9?
319
+ ie? && version == "9"
320
+ end
321
+
322
+ # Detect if browser is running from PSP.
323
+ def psp?
324
+ !!(ua =~ /PSP/)
325
+ end
326
+
327
+ # Detect if browser is Opera.
328
+ def opera?
329
+ !!(ua =~ /Opera/)
330
+ end
331
+
332
+ # Detect if current platform is Macintosh.
333
+ def mac?
334
+ !!(ua =~ /Mac OS X/)
335
+ end
336
+
337
+ # Detect if current platform is Windows.
338
+ def windows?
339
+ !!(ua =~ /Windows/)
340
+ end
341
+
342
+ # Detect if current platform is Linux flavor.
343
+ def linux?
344
+ !!(ua =~ /Linux/)
345
+ end
346
+
347
+ # Detect if browser is tablet (currently just iPad or Android).
348
+ def tablet?
349
+ ipad? || (android? && !mobile?)
350
+ end
351
+
352
+ # Return the platform.
353
+ def platform
354
+ case
355
+ when linux? then :linux
356
+ when mac? then :mac
357
+ when windows? then :windows
358
+ else
359
+ :other
360
+ end
361
+ end
362
+
363
+ # Return a meta info about this browser.
364
+ def meta
365
+ Array.new.tap do |m|
366
+ m << id
367
+ m << "webkit" if webkit?
368
+ m << "ios" if ios?
369
+ m << "safari safari#{version}" if safari?
370
+ m << "#{id}#{version}" unless safari? || chrome?
371
+ m << platform
372
+ m << "capable" if capable?
373
+ m << "mobile" if mobile?
374
+ end
375
+ end
376
+
377
+ # Return meta representation as string.
378
+ def to_s
379
+ meta.join(" ")
380
+ end
381
+ end
@@ -0,0 +1,370 @@
1
+ require "test_helper"
2
+
3
+ class BrowserTest < Test::Unit::TestCase
4
+ IPHONE = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/1A542a Safari/419.3"
5
+ IPOD = "Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3"
6
+ IPAD = "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10"
7
+ SAFARI = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8"
8
+ IE6 = "Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"
9
+ IE7 = "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"
10
+ IE8 = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
11
+ IE8_COMPAT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; Media Center PC 5.0; .NET CLR 3.5.21022)"
12
+ IE9 = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
13
+ IE9_COMPAT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)"
14
+ OPERA = "Opera/9.99 (Windows NT 5.1; U; pl) Presto/9.9.9"
15
+ FIREFOX = "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8"
16
+ CHROME = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4"
17
+ ANDROID = "Android SDK 1.5r3: Mozilla/5.0 (Linux; U; Android 1.5; de-; sdk Build/CUPCAKE) AppleWebkit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1"
18
+ TABLOID = "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13"
19
+ BLACKBERRY = "BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103"
20
+ PSP = "Mozilla/4.0 (PSP (PlayStation Portable); 2.00)"
21
+ QUICKTIME = "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
22
+ COREMEDIA = "Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569"
23
+
24
+ def setup
25
+ @browser = Browser.new
26
+ end
27
+
28
+ def test_yield_self_when_block_is_given
29
+ browser = nil
30
+ Browser.new {|b| browser = b }
31
+ assert_kind_of Browser, browser
32
+ end
33
+
34
+ def test_respond_to_ua_methods
35
+ assert @browser.respond_to?(:ua)
36
+ assert @browser.respond_to?(:ua=)
37
+ end
38
+
39
+ def test_delegate_ua_methods
40
+ @browser.user_agent = "Safari"
41
+ assert_equal "Safari", @browser.ua
42
+
43
+ @browser.ua = "Mozilla"
44
+ assert_equal "Mozilla", @browser.user_agent
45
+ end
46
+
47
+ def test_set_accept_language_while_instantiating_object
48
+ @browser = Browser.new(:accept_language => "pt-br")
49
+ assert_equal ["pt-br"], @browser.accept_language
50
+ end
51
+
52
+ def test_set_user_agent_while_instantianting_object
53
+ @browser = Browser.new(:ua => "Safari")
54
+ assert_equal "Safari", @browser.ua
55
+
56
+ @browser = Browser.new(:user_agent => "Chrome")
57
+ assert_equal "Chrome", @browser.ua
58
+ end
59
+
60
+ def test_detect_iphone
61
+ @browser.ua = IPHONE
62
+
63
+ assert_equal "iPhone", @browser.name
64
+ assert @browser.iphone?
65
+ assert @browser.safari?
66
+ assert @browser.webkit?
67
+ assert @browser.mobile?
68
+ assert @browser.capable?
69
+ assert @browser.ios?
70
+ assert @browser.tablet? == false
71
+ assert_equal "3.0", @browser.full_version
72
+ assert_equal "3", @browser.version
73
+ end
74
+
75
+ def test_detect_safari
76
+ @browser.ua = SAFARI
77
+
78
+ assert_equal "Safari", @browser.name
79
+ assert @browser.safari?
80
+ assert @browser.webkit?
81
+ assert @browser.capable?
82
+ assert_equal "5.0.1", @browser.full_version
83
+ assert_equal "5", @browser.version
84
+ end
85
+
86
+ def test_detect_ipod
87
+ @browser.ua = IPOD
88
+
89
+ assert_equal "iPod Touch", @browser.name
90
+ assert @browser.ipod?
91
+ assert @browser.safari?
92
+ assert @browser.webkit?
93
+ assert @browser.mobile?
94
+ assert @browser.capable?
95
+ assert @browser.ios?
96
+ assert @browser.tablet? == false
97
+ assert_equal "3.0", @browser.full_version
98
+ assert_equal "3", @browser.version
99
+ end
100
+
101
+ def test_detect_ipad
102
+ @browser.ua = IPAD
103
+
104
+ assert_equal "iPad", @browser.name
105
+ assert @browser.ipad?
106
+ assert @browser.safari?
107
+ assert @browser.webkit?
108
+ assert @browser.capable?
109
+ assert @browser.ios?
110
+ assert @browser.tablet?
111
+ assert_equal "4.0.4", @browser.full_version
112
+ assert_equal "4", @browser.version
113
+ end
114
+
115
+ def test_detect_ie6
116
+ @browser.ua = IE6
117
+
118
+ assert_equal "Internet Explorer", @browser.name
119
+ assert @browser.ie?
120
+ assert @browser.ie6?
121
+ assert @browser.capable? == false
122
+ assert_equal "6.0", @browser.full_version
123
+ assert_equal "6", @browser.version
124
+ end
125
+
126
+ def test_detect_ie7
127
+ @browser.ua = IE7
128
+
129
+ assert_equal "Internet Explorer", @browser.name
130
+ assert @browser.ie?
131
+ assert @browser.ie7?
132
+ assert @browser.capable?
133
+ assert_equal "7.0", @browser.full_version
134
+ assert_equal "7", @browser.version
135
+ end
136
+
137
+ def test_detect_ie8
138
+ @browser.ua = IE8
139
+
140
+ assert_equal "Internet Explorer", @browser.name
141
+ assert @browser.ie?
142
+ assert @browser.ie8?
143
+ assert @browser.capable?
144
+ assert @browser.compatibility_view? == false
145
+ assert_equal "8.0", @browser.full_version
146
+ assert_equal "8", @browser.version
147
+ end
148
+
149
+ def test_detect_ie8_in_compatibility_view
150
+ @browser.ua = IE8_COMPAT
151
+
152
+ assert_equal "Internet Explorer", @browser.name
153
+ assert @browser.ie?
154
+ assert @browser.ie7?
155
+ assert !@browser.ie8?
156
+ assert @browser.capable?
157
+ assert @browser.compatibility_view?
158
+ assert_equal "7.0", @browser.full_version
159
+ assert_equal "7", @browser.version
160
+ end
161
+
162
+ def test_detect_ie9
163
+ @browser.ua = IE9
164
+
165
+ assert_equal "Internet Explorer", @browser.name
166
+ assert @browser.ie?
167
+ assert @browser.ie9?
168
+ assert @browser.capable?
169
+ assert !@browser.compatibility_view?
170
+ assert_equal "9.0", @browser.full_version
171
+ assert_equal "9", @browser.version
172
+ end
173
+
174
+ def test_detect_ie9_in_compatibility_view
175
+ @browser.ua = IE9_COMPAT
176
+
177
+ assert_equal "Internet Explorer", @browser.name
178
+ assert @browser.ie?
179
+ assert @browser.ie7?
180
+ assert !@browser.ie9?
181
+ assert @browser.capable?
182
+ assert @browser.compatibility_view?
183
+ assert_equal "7.0", @browser.full_version
184
+ assert_equal "7", @browser.version
185
+ end
186
+
187
+ def test_detect_opera
188
+ @browser.ua = OPERA
189
+
190
+ assert_equal "Opera", @browser.name
191
+ assert @browser.opera?
192
+ assert @browser.capable?
193
+ assert_equal "9.99", @browser.full_version
194
+ assert_equal "9", @browser.version
195
+ end
196
+
197
+ def test_detect_firefox
198
+ @browser.ua = FIREFOX
199
+
200
+ assert_equal "Firefox", @browser.name
201
+ assert @browser.firefox?
202
+ assert @browser.capable?
203
+ assert_equal "3.8", @browser.full_version
204
+ assert_equal "3", @browser.version
205
+ end
206
+
207
+ def test_detect_chrome
208
+ @browser.ua = CHROME
209
+
210
+ assert_equal "Chrome", @browser.name
211
+ assert @browser.chrome?
212
+ assert !@browser.safari?
213
+ assert @browser.webkit?
214
+ assert @browser.capable?
215
+ assert_equal "5.0.375.99", @browser.full_version
216
+ assert_equal "5", @browser.version
217
+ end
218
+
219
+ def test_detect_android
220
+ @browser.ua = ANDROID
221
+
222
+ assert_equal "Android", @browser.name
223
+ assert @browser.android?
224
+ assert @browser.safari?
225
+ assert @browser.webkit?
226
+ assert @browser.mobile?
227
+ assert @browser.tablet? == false
228
+ assert @browser.capable?
229
+ assert_equal "3.1.2", @browser.full_version
230
+ assert_equal "3", @browser.version
231
+ end
232
+
233
+ def test_detect_android_tablet
234
+ @browser.ua = TABLOID
235
+
236
+ assert_equal "Android", @browser.name
237
+ assert @browser.android?
238
+ assert @browser.safari?
239
+ assert @browser.webkit?
240
+ assert @browser.mobile? == false
241
+ assert @browser.tablet?
242
+ assert @browser.capable?
243
+ assert_equal "4.0", @browser.full_version
244
+ assert_equal "4", @browser.version
245
+ end
246
+
247
+ def test_detect_blackberry
248
+ @browser.ua = BLACKBERRY
249
+
250
+ assert_equal "BlackBerry", @browser.name
251
+ assert @browser.blackberry?
252
+ assert @browser.tablet? == false
253
+ assert @browser.mobile?
254
+ assert @browser.capable? == false
255
+ assert_equal "4.1.0", @browser.full_version
256
+ assert_equal "4", @browser.version
257
+ end
258
+
259
+ def test_detect_quicktime
260
+ @browser.ua = QUICKTIME
261
+
262
+ assert_equal "QuickTime", @browser.name
263
+ assert @browser.quicktime?
264
+ assert_equal "7.6.8", @browser.full_version
265
+ assert_equal "7", @browser.version
266
+ end
267
+
268
+ def test_detect_core_media
269
+ @browser.ua = COREMEDIA
270
+
271
+ assert_equal "Apple CoreMedia", @browser.name
272
+ assert @browser.core_media?
273
+ assert_equal "1.0.0.10F569", @browser.full_version
274
+ assert_equal "1", @browser.version
275
+ end
276
+
277
+ def test_detect_psp
278
+ @browser.ua = PSP
279
+
280
+ assert_equal "PlayStation Portable", @browser.name
281
+ assert @browser.psp?
282
+ assert @browser.mobile?
283
+ end
284
+
285
+ def test_detect_other_mobiles
286
+ @browser.ua = "Symbian OS"
287
+ assert @browser.mobile?
288
+ assert @browser.tablet? == false
289
+
290
+ @browser.ua = "MIDP-2.0"
291
+ assert @browser.mobile?
292
+ assert @browser.tablet? == false
293
+
294
+ @browser.ua = "Windows CE"
295
+ assert @browser.mobile?
296
+ assert @browser.tablet? == false
297
+
298
+ end
299
+
300
+ def test_return_a_zero_version
301
+ @browser.ua = "Bot"
302
+ assert_equal "0.0", @browser.full_version
303
+ assert_equal "0", @browser.version
304
+ end
305
+
306
+ def test_meta
307
+ @browser.ua = CHROME
308
+ assert_kind_of Array, @browser.meta
309
+ end
310
+
311
+ def test_return_string_representation
312
+ @browser.ua = CHROME
313
+ assert_equal "chrome webkit mac capable", @browser.to_s
314
+ end
315
+
316
+ def test_return_string_representation_for_ios
317
+ @browser.ua = IPHONE
318
+ assert_equal "iphone webkit ios safari safari3 mac capable mobile", @browser.to_s
319
+ end
320
+
321
+ def test_return_string_representation_for_mobile
322
+ @browser.ua = BLACKBERRY
323
+ assert_equal "blackberry blackberry4 other mobile", @browser.to_s
324
+ end
325
+
326
+ def test_return_string_representation_for_handcap
327
+ @browser.ua = IE6
328
+ assert_equal "ie ie6 windows", @browser.to_s
329
+ end
330
+
331
+ def test_detect_unknown_id
332
+ @browser.ua = "Unknown"
333
+ assert_equal :other, @browser.id
334
+ end
335
+
336
+ def test_detect_unknown_name
337
+ @browser.ua = "Unknown"
338
+ assert_equal "Other", @browser.name
339
+ end
340
+
341
+ def test_detect_mac_platform
342
+ @browser.ua = "Mac OS X"
343
+ assert_equal :mac, @browser.platform
344
+ end
345
+
346
+ def test_detect_windows_platform
347
+ @browser.ua = "Windows"
348
+ assert_equal :windows, @browser.platform
349
+ end
350
+
351
+ def test_detect_linux_platform
352
+ @browser.ua = "Linux"
353
+ assert_equal :linux, @browser.platform
354
+ end
355
+
356
+ def test_detect_unknown_platform
357
+ @browser.ua = "Unknown"
358
+ assert_equal :other, @browser.platform
359
+ end
360
+
361
+ def test_return_all_known_languages
362
+ @browser.accept_language = "en-us,en;q=0.8,pt-br;q=0.5,pt;q=0.3"
363
+ assert_equal ["en-us", "en", "pt-br", "pt"], @browser.accept_language
364
+ end
365
+
366
+ def test_pimp_action_controller
367
+ methods = ActionController::Base.private_instance_methods.collect {|m| m.to_sym}
368
+ assert methods.include?(:browser)
369
+ end
370
+ end
@@ -0,0 +1,3 @@
1
+ require "test/unit"
2
+ require "action_controller"
3
+ require "browser"
Binary file
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "browser/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "vcx-browser"
7
+ s.version = Browser::Version::STRING
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Andrew Ken"]
10
+ s.email = ["andrewken@livegamer.com"]
11
+ s.homepage = "http://github.com/livegamervcxdevteam/vcx-browser"
12
+ s.summary = "Do some browser detection with Ruby."
13
+ s.description = s.summary
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_development_dependency "actionpack" , "~> 3.0"
21
+ s.add_development_dependency "rake" , "~> 0.9"
22
+ s.add_development_dependency "rdoc" , "~> 3.12"
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vcx-browser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-08 00:00:00.000000000 Z
12
+ date: 2012-08-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -65,7 +65,18 @@ email:
65
65
  executables: []
66
66
  extensions: []
67
67
  extra_rdoc_files: []
68
- files: []
68
+ files:
69
+ - Gemfile
70
+ - Gemfile.lock
71
+ - README.rdoc
72
+ - Rakefile
73
+ - lib/browser.rb
74
+ - lib/browser/action_controller.rb
75
+ - lib/browser/version.rb
76
+ - test/browser_test.rb
77
+ - test/test_helper.rb
78
+ - vcx-browser-0.1.7.gem
79
+ - vcx-browser.gemspec
69
80
  homepage: http://github.com/livegamervcxdevteam/vcx-browser
70
81
  licenses: []
71
82
  post_install_message:
@@ -90,4 +101,6 @@ rubygems_version: 1.8.24
90
101
  signing_key:
91
102
  specification_version: 3
92
103
  summary: Do some browser detection with Ruby.
93
- test_files: []
104
+ test_files:
105
+ - test/browser_test.rb
106
+ - test/test_helper.rb