vcx-browser 0.1.7 → 0.1.8

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