browser 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -45,6 +45,10 @@ This adds a helper method called `browser`, that inspects your current user agen
45
45
 
46
46
  * Nando Vieira - http://nandovieira.com.br
47
47
 
48
+ == Contributors
49
+
50
+ * http://github.com/chrisyour/browser
51
+
48
52
  == License
49
53
 
50
54
  (The MIT License)
data/Rakefile CHANGED
@@ -1,17 +1,7 @@
1
- require "rcov/rcovtask"
2
1
  require "rake/testtask"
3
2
  require "rake/rdoctask"
4
3
  require "./lib/browser/version"
5
4
 
6
- Rcov::RcovTask.new do |t|
7
- t.test_files = FileList["test/**/*_test.rb"]
8
- t.rcov_opts = ["--sort coverage", "--exclude .gem"]
9
-
10
- t.output_dir = "coverage"
11
- t.libs << "test"
12
- t.verbose = true
13
- end
14
-
15
5
  Rake::TestTask.new do |t|
16
6
  t.libs << "lib"
17
7
  t.libs << "test"
data/lib/browser.rb CHANGED
@@ -23,9 +23,13 @@ class Browser
23
23
  :opera => "Opera",
24
24
  :other => "Other",
25
25
  :safari => "Safari",
26
- :psp => "PlayStation Portable"
26
+ :psp => "PlayStation Portable",
27
+ :quicktime => "QuickTime",
28
+ :core_media => "Apple CoreMedia"
27
29
  }
28
30
 
31
+ VERSION_REGEX = /(?:Version|MSIE|Opera|Firefox|Chrome|QuickTime|BlackBerry[^\/]+|CoreMedia v)[\/ ]?([a-z0-9.]+)/i
32
+
29
33
  LANGUAGES = {
30
34
  "af" => "Afrikaans",
31
35
  "sq" => "Albanian",
@@ -177,6 +181,8 @@ class Browser
177
181
  when blackberry? then :blackberry
178
182
  when safari? then :safari
179
183
  when psp? then :psp
184
+ when quicktime? then :quicktime
185
+ when core_media? then :core_media
180
186
  else
181
187
  :other
182
188
  end
@@ -194,13 +200,13 @@ class Browser
194
200
 
195
201
  # Return the full version.
196
202
  def full_version
197
- _, v = *ua.match(/(?:Version|MSIE|Opera|Firefox|Chrome|BlackBerry[^\/]+)[\/ ]([\d.]+)/)
203
+ _, v = *ua.match(VERSION_REGEX)
198
204
  v || "0.0"
199
205
  end
200
206
 
201
207
  # Return true if browser supports some CSS 3 (Safari, Firefox, Opera & IE7+).
202
208
  def capable?
203
- safari? || firefox? || opera? || (ie? && version >= "7")
209
+ webkit? || firefox? || opera? || (ie? && version >= "7")
204
210
  end
205
211
 
206
212
  # Detect if browser is WebKit-based.
@@ -208,11 +214,21 @@ class Browser
208
214
  !!(ua =~ /AppleWebKit/i)
209
215
  end
210
216
 
217
+ # Detect if browser is ios?.
218
+ def ios?
219
+ ipod? || ipad? || iphone?
220
+ end
221
+
211
222
  # Detect if browser is mobile.
212
223
  def mobile?
213
224
  !!(ua =~ /(Mobile|Symbian|MIDP|Windows CE)/) || blackberry? || psp?
214
225
  end
215
226
 
227
+ # Detect if browser is QuickTime
228
+ def quicktime?
229
+ !!(ua =~ /QuickTime/i)
230
+ end
231
+
216
232
  # Detect if browser is BlackBerry
217
233
  def blackberry?
218
234
  !!(ua =~ /BlackBerry/)
@@ -223,6 +239,11 @@ class Browser
223
239
  !!(ua =~ /Android/)
224
240
  end
225
241
 
242
+ # Detect if browser is Apple CoreMedia.
243
+ def core_media?
244
+ !!(ua =~ /CoreMedia/)
245
+ end
246
+
226
247
  # Detect if browser is iPhone.
227
248
  def iphone?
228
249
  !!(ua =~ /iPhone/)
@@ -240,7 +261,7 @@ class Browser
240
261
 
241
262
  # Detect if browser is Safari.
242
263
  def safari?
243
- !!(ua =~ /Safari/)
264
+ ua =~ /Safari/ && ua !~ /Chrome/
244
265
  end
245
266
 
246
267
  # Detect if browser is Firefox.
@@ -318,8 +339,10 @@ class Browser
318
339
  def meta
319
340
  Array.new.tap do |m|
320
341
  m << id
321
- m << "webkit safari safari#{version}" if safari?
322
- m << "#{id}#{version}" unless safari?
342
+ m << "webkit" if webkit?
343
+ m << "ios" if ios?
344
+ m << "safari safari#{version}" if safari?
345
+ m << "#{id}#{version}" unless safari? || chrome?
323
346
  m << platform
324
347
  m << "capable" if capable?
325
348
  m << "mobile" if mobile?
@@ -2,7 +2,7 @@ class Browser
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- PATCH = 1
5
+ PATCH = 2
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
data/test/browser_test.rb CHANGED
@@ -25,6 +25,8 @@ class BrowserTest < Test::Unit::TestCase
25
25
  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"
26
26
  BLACKBERRY = "BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103"
27
27
  PSP = "Mozilla/4.0 (PSP (PlayStation Portable); 2.00)"
28
+ QUICKTIME = "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
29
+ COREMEDIA = "Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569"
28
30
 
29
31
  def setup
30
32
  @browser = Browser.new
@@ -71,6 +73,7 @@ class BrowserTest < Test::Unit::TestCase
71
73
  assert @browser.webkit?
72
74
  assert @browser.mobile?
73
75
  assert @browser.capable?
76
+ assert @browser.ios?
74
77
  assert_equal "3.0", @browser.full_version
75
78
  assert_equal "3", @browser.version
76
79
  end
@@ -95,6 +98,7 @@ class BrowserTest < Test::Unit::TestCase
95
98
  assert @browser.webkit?
96
99
  assert @browser.mobile?
97
100
  assert @browser.capable?
101
+ assert @browser.ios?
98
102
  assert_equal "3.0", @browser.full_version
99
103
  assert_equal "3", @browser.version
100
104
  end
@@ -107,6 +111,7 @@ class BrowserTest < Test::Unit::TestCase
107
111
  assert @browser.safari?
108
112
  assert @browser.webkit?
109
113
  assert @browser.capable?
114
+ assert @browser.ios?
110
115
  assert_equal "4.0.4", @browser.full_version
111
116
  assert_equal "4", @browser.version
112
117
  end
@@ -180,7 +185,7 @@ class BrowserTest < Test::Unit::TestCase
180
185
 
181
186
  assert_equal "Chrome", @browser.name
182
187
  assert @browser.chrome?
183
- assert @browser.safari?
188
+ assert !@browser.safari?
184
189
  assert @browser.webkit?
185
190
  assert @browser.capable?
186
191
  assert_equal "5.0.375.99", @browser.full_version
@@ -211,6 +216,24 @@ class BrowserTest < Test::Unit::TestCase
211
216
  assert_equal "4", @browser.version
212
217
  end
213
218
 
219
+ def test_detect_quicktime
220
+ @browser.ua = QUICKTIME
221
+
222
+ assert_equal "QuickTime", @browser.name
223
+ assert @browser.quicktime?
224
+ assert_equal "7.6.8", @browser.full_version
225
+ assert_equal "7", @browser.version
226
+ end
227
+
228
+ def test_detect_core_media
229
+ @browser.ua = COREMEDIA
230
+
231
+ assert_equal "Apple CoreMedia", @browser.name
232
+ assert @browser.core_media?
233
+ assert_equal "1.0.0.10F569", @browser.full_version
234
+ assert_equal "1", @browser.version
235
+ end
236
+
214
237
  def test_detect_psp
215
238
  @browser.ua = PSP
216
239
 
@@ -243,12 +266,17 @@ class BrowserTest < Test::Unit::TestCase
243
266
 
244
267
  def test_return_string_representation
245
268
  @browser.ua = CHROME
246
- assert_equal "chrome webkit safari safari5 mac capable", @browser.to_s
269
+ assert_equal "chrome webkit mac capable", @browser.to_s
247
270
  end
248
271
 
249
- def test_return_string_representation_for_mobile
272
+ def test_return_string_representation_for_ios
250
273
  @browser.ua = IPHONE
251
- assert_equal "iphone webkit safari safari3 mac capable mobile", @browser.to_s
274
+ assert_equal "iphone webkit ios safari safari3 mac capable mobile", @browser.to_s
275
+ end
276
+
277
+ def test_return_string_representation_for_mobile
278
+ @browser.ua = BLACKBERRY
279
+ assert_equal "blackberry blackberry4 other mobile", @browser.to_s
252
280
  end
253
281
 
254
282
  def test_return_string_representation_for_handcap
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 1
9
- version: 0.1.1
8
+ - 2
9
+ version: 0.1.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nando Vieira
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-13 00:00:00 -03:00
17
+ date: 2010-10-28 00:00:00 -02:00
18
18
  default_executable:
19
19
  dependencies: []
20
20