browscapper 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +17 -0
- data/Guardfile +17 -0
- data/MIT-LICENSE +1 -1
- data/README.rdoc +4 -0
- data/Rakefile +4 -28
- data/browscapper.gemspec +1 -3
- data/lib/browscapper.rb +3 -0
- data/lib/browscapper/reader.rb +2 -2
- data/lib/browscapper/reader/csv_reader.rb +1 -1
- data/lib/browscapper/user_agent.rb +4 -2
- data/lib/browscapper/version.rb +1 -1
- data/lib/tasks/dump.rake +60 -0
- data/test/browscapper/reader_tests.rb +52 -0
- data/test/browscapper_tests.rb +10 -12
- data/test/test_helper.rb +26 -0
- data/vendor/browscap.ini +106 -0
- metadata +19 -66
- data/test/reader_tests.rb +0 -37
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ede4118b2f3bcec3b30148e6bac3265215ca7c31
|
4
|
+
data.tar.gz: aa5ba1d31e8fae077eb4dd933f21e96d71d6ebb3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d943570726015c59daf03b4fb53e3addfe266350bf4802827eee56bf01f1df472c33bc9b831fea74bbb6b65eba03e70df30292989f700f56ceafc683e07b6252
|
7
|
+
data.tar.gz: ceece896924cd926fd69aa2943060d421374728688e85a91a250786ce7b4939171dd8008c4d67621c0e657af3d778574e753a7b071c99fdb853ff7a543127211
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -1,3 +1,20 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
gemspec
|
4
|
+
|
5
|
+
gem "rdoc", "~> 3.12"
|
6
|
+
gem "rake", "~> 10.0"
|
7
|
+
gem "minitest"
|
8
|
+
gem "minitest-reporters"
|
9
|
+
gem "guard-minitest"
|
10
|
+
gem "simplecov"
|
11
|
+
|
12
|
+
if RbConfig::CONFIG['host_os'] =~ /^darwin/
|
13
|
+
gem "rb-fsevent"
|
14
|
+
gem "growl"
|
15
|
+
end
|
16
|
+
|
17
|
+
if File.exists?('Gemfile.local')
|
18
|
+
instance_eval File.read('Gemfile.local')
|
19
|
+
end
|
20
|
+
|
data/Guardfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
guard 'minitest', :test_folders => 'test', :test_file_patterns => '*_tests.rb' do
|
3
|
+
watch(%r|^test/(.+)_tests\.rb|)
|
4
|
+
|
5
|
+
watch(%r|^lib/(.+)\.rb$|) do |m|
|
6
|
+
"test/#{m[1]}_tests.rb"
|
7
|
+
end
|
8
|
+
|
9
|
+
watch(%r|^test/test_helper\.rb|) do
|
10
|
+
"test"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
if File.exists?('Guardfile.local')
|
15
|
+
instance_eval File.read('Guardfile.local')
|
16
|
+
end
|
17
|
+
|
data/MIT-LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -38,6 +38,10 @@ rake task thusly:
|
|
38
38
|
|
39
39
|
rake browscapper:dump IN=browscap.ini OUT=browscap.dump
|
40
40
|
|
41
|
+
You can also convert between formats using the `browscapper:convert` task:
|
42
|
+
|
43
|
+
rake browscapper:convert IN=browscap.dump OUT=browscap.yml
|
44
|
+
|
41
45
|
== License
|
42
46
|
|
43
47
|
See the MIT-LICENSE file for details.
|
data/Rakefile
CHANGED
@@ -1,23 +1,16 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
|
5
|
-
gem 'rdoc', '~> 3.12'
|
6
|
-
|
7
4
|
require 'rubygems/package_task'
|
8
5
|
require 'rake/testtask'
|
9
6
|
require 'rdoc/task'
|
10
7
|
require 'bundler/gem_tasks'
|
11
8
|
|
12
|
-
|
13
|
-
begin
|
14
|
-
gem 'psych'
|
15
|
-
rescue Exception => e
|
16
|
-
# it's okay, fall back on the bundled psych
|
17
|
-
end
|
18
|
-
end
|
9
|
+
$:.push File.expand_path(File.dirname(__FILE__), 'lib')
|
19
10
|
|
20
|
-
|
11
|
+
FileList['lib/tasks/*.rake'].each do |task|
|
12
|
+
import task
|
13
|
+
end
|
21
14
|
|
22
15
|
version = Browscapper::VERSION
|
23
16
|
|
@@ -36,20 +29,3 @@ Rake::RDocTask.new do |t|
|
|
36
29
|
t.rdoc_files.include('README.rdoc', 'MIT-LICENSE', 'lib/**/*.rb')
|
37
30
|
end
|
38
31
|
|
39
|
-
desc "Converts a browscap file to another format"
|
40
|
-
task "browscapper:dump" do
|
41
|
-
require File.join(File.dirname(__FILE__), %w{ lib browscapper })
|
42
|
-
|
43
|
-
if !ENV['IN'] || !ENV['OUT']
|
44
|
-
puts "Usage: IN=browscap OUT=browscap.dump"
|
45
|
-
puts
|
46
|
-
puts "Converts a browscap file to a ruby Marshal'd format. These files"
|
47
|
-
puts "are much quicker to load than CSV or INI files."
|
48
|
-
exit
|
49
|
-
end
|
50
|
-
|
51
|
-
Browscapper.load(ENV['IN'])
|
52
|
-
File.open(ENV['OUT'], 'wb') do |fp|
|
53
|
-
fp.write(Marshal.dump(Browscapper.entries))
|
54
|
-
end
|
55
|
-
end
|
data/browscapper.gemspec
CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.description = "A browscap file parser and matcher."
|
12
12
|
s.summary = s.description
|
13
13
|
s.email = "dark.panda@gmail.com"
|
14
|
+
s.license = "MIT"
|
14
15
|
s.extra_rdoc_files = [
|
15
16
|
"README.rdoc"
|
16
17
|
]
|
@@ -20,9 +21,6 @@ Gem::Specification.new do |s|
|
|
20
21
|
s.homepage = "http://github.com/dark-panda/browscapper"
|
21
22
|
s.require_paths = ["lib"]
|
22
23
|
|
23
|
-
s.add_dependency("rdoc")
|
24
|
-
s.add_dependency("rake", ["~> 0.9"])
|
25
|
-
s.add_dependency("minitest")
|
26
24
|
s.add_dependency("inifile")
|
27
25
|
end
|
28
26
|
|
data/lib/browscapper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# encoding: BINARY
|
2
2
|
|
3
|
+
require 'browscapper/version'
|
4
|
+
|
3
5
|
module Browscapper
|
4
6
|
autoload :UserAgent, 'browscapper/user_agent'
|
5
7
|
autoload :Reader, 'browscapper/reader'
|
@@ -30,6 +32,7 @@ module Browscapper
|
|
30
32
|
|
31
33
|
@file = file
|
32
34
|
@entries = reader.load(file)
|
35
|
+
clear_cache
|
33
36
|
self
|
34
37
|
end
|
35
38
|
|
data/lib/browscapper/reader.rb
CHANGED
@@ -10,9 +10,9 @@ module Browscapper
|
|
10
10
|
end
|
11
11
|
|
12
12
|
pattern.downcase!
|
13
|
-
pattern.gsub!(/([\^\$\(\)\[\]
|
13
|
+
pattern.gsub!(/([\^\$\(\)\[\]\.\-\+])/, "\\\\\\1")
|
14
14
|
pattern.gsub!('?', '.')
|
15
|
-
pattern.gsub!(
|
15
|
+
pattern.gsub!(/\*+/, '.*?')
|
16
16
|
|
17
17
|
Regexp.new("^#{pattern}$")
|
18
18
|
end
|
@@ -8,7 +8,7 @@ module Browscapper
|
|
8
8
|
:parent, :user_agent, :comment, :browser, :version, :major_version,
|
9
9
|
:minor_version, :platform, :platform_version, :alpha, :beta, :win16, :win32, :win64,
|
10
10
|
:frames, :iframes, :tables, :cookies, :background_sounds, :vbscript,
|
11
|
-
:javascript, :java_applets, :activex_controls, :banned, :mobile_device,
|
11
|
+
:javascript, :java_applets, :activex_controls, :banned, :mobile_device, :tablet,
|
12
12
|
:syndication_reader, :crawler, :css_version, :aol_version, :user_agent_id,
|
13
13
|
:css, :cdf, :aol, :device_name, :device_maker, :rendering_engine_name,
|
14
14
|
:rendering_engine_version, :rendering_engine_description
|
@@ -23,6 +23,7 @@ module Browscapper
|
|
23
23
|
attr_accessor :pattern
|
24
24
|
|
25
25
|
MAP = {
|
26
|
+
'propertyname' => :property_name,
|
26
27
|
'useragent' => :user_agent,
|
27
28
|
'version' => :version,
|
28
29
|
'majorver' => :major_version,
|
@@ -43,7 +44,8 @@ module Browscapper
|
|
43
44
|
'supportscss' => :css,
|
44
45
|
'renderingengine_name' => :rendering_engine_name,
|
45
46
|
'renderingengine_version' => :rendering_engine_version,
|
46
|
-
'renderingengine_description' => :rendering_engine_description
|
47
|
+
'renderingengine_description' => :rendering_engine_description,
|
48
|
+
'istablet' => :tablet
|
47
49
|
}
|
48
50
|
|
49
51
|
def initialize(hash = {})
|
data/lib/browscapper/version.rb
CHANGED
data/lib/tasks/dump.rake
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
|
2
|
+
desc "Converts a browscap file to the Marshal format"
|
3
|
+
task "browscapper:dump" do
|
4
|
+
require 'browscapper'
|
5
|
+
|
6
|
+
if !ENV['IN'] || !ENV['OUT']
|
7
|
+
puts "Usage: IN=browscap OUT=browscap.dump"
|
8
|
+
puts
|
9
|
+
puts "Converts a browscap file to a ruby Marshal'd format. These files"
|
10
|
+
puts "are much quicker to load than CSV or INI files."
|
11
|
+
exit
|
12
|
+
end
|
13
|
+
|
14
|
+
Browscapper.load(ENV['IN'])
|
15
|
+
File.open(ENV['OUT'], 'wb') do |fp|
|
16
|
+
fp.write(Marshal.dump(Browscapper.entries))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Converts a browscap file to another format"
|
21
|
+
task "browscapper:convert" do
|
22
|
+
require 'browscapper'
|
23
|
+
|
24
|
+
if !ENV['IN'] || !ENV['OUT']
|
25
|
+
puts "Usage: IN=browscap OUT=output.ext"
|
26
|
+
puts
|
27
|
+
puts "Converts a browscap file to another format. The output format"
|
28
|
+
puts "is based on the output extension, which can be one of yml, yaml,"
|
29
|
+
puts "csv, ini or dump. The \"dump\" extension uses the Marshal format."
|
30
|
+
exit
|
31
|
+
end
|
32
|
+
|
33
|
+
Browscapper.load(ENV['IN'])
|
34
|
+
|
35
|
+
case ENV['OUT']
|
36
|
+
when /\.dump$/i
|
37
|
+
File.open(ENV['OUT'], 'wb:BINARY') do |fp|
|
38
|
+
fp.write(Marshal.dump(Browscapper.entries))
|
39
|
+
end
|
40
|
+
|
41
|
+
when /\.ya?ml$/i
|
42
|
+
File.open(ENV['OUT'], 'wb:BINARY') do |fp|
|
43
|
+
fp.write(YAML.dump(Browscaper.entries))
|
44
|
+
end
|
45
|
+
|
46
|
+
when /\.csv$/i
|
47
|
+
Browscapper.load(ENV['IN'])
|
48
|
+
Browscapper::CSVReader::CSV_ENGINE.open(ENV['OUT'], 'wb:BINARY') do |csv|
|
49
|
+
keys = Browscapper.entries['DefaultProperties'].to_hash.keys
|
50
|
+
csv << keys
|
51
|
+
Browscapper.entries.each do |k, v|
|
52
|
+
hash = v.to_hash
|
53
|
+
|
54
|
+
csv << keys.collect { |kk|
|
55
|
+
hash[kk]
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
|
2
|
+
# encoding: BINARY
|
3
|
+
|
4
|
+
$: << File.dirname(__FILE__)
|
5
|
+
require 'test_helper'
|
6
|
+
require 'benchmark'
|
7
|
+
|
8
|
+
class Browscapper::ReaderTests < MiniTest::Unit::TestCase
|
9
|
+
include Browscapper::Reader
|
10
|
+
|
11
|
+
def test_pattern_to_regexp
|
12
|
+
assert_equal(
|
13
|
+
/^mozilla\/5\.0 \(foo.*?\) \+http:\/\/example\.com chrome.*?\/..$/,
|
14
|
+
pattern_to_regexp("Mozilla/5.0 (Foo*) +http://example.com Chrome*/??")
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
if ENV['BENCH']
|
19
|
+
def test_csv
|
20
|
+
Benchmark.bmbm do |bmbm|
|
21
|
+
bmbm.report('csv') do
|
22
|
+
Browscapper.load('vendor/browscap.csv')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_yaml
|
28
|
+
Benchmark.bmbm do |bmbm|
|
29
|
+
bmbm.report('yaml') do
|
30
|
+
Browscapper.load('vendor/browscap.yml')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_ini
|
36
|
+
Benchmark.bmbm do |bmbm|
|
37
|
+
bmbm.report('ini') do
|
38
|
+
Browscapper.load('vendor/browscap.ini')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_marshal
|
44
|
+
Benchmark.bmbm do |bmbm|
|
45
|
+
bmbm.report('marshal') do
|
46
|
+
Browscapper.load('vendor/browscap.dump')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
data/test/browscapper_tests.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
# encoding: BINARY
|
2
2
|
|
3
|
-
$: <<
|
4
|
-
|
5
|
-
require 'rubygems'
|
6
|
-
require 'minitest/autorun'
|
7
|
-
require './lib/browscapper'
|
3
|
+
$: << File.dirname(__FILE__)
|
4
|
+
require 'test_helper'
|
8
5
|
|
9
6
|
class BrowscapperTest < MiniTest::Unit::TestCase
|
10
7
|
FIREFOX_ON_OSX = Browscapper::UserAgent.new({
|
@@ -18,8 +15,8 @@ class BrowscapperTest < MiniTest::Unit::TestCase
|
|
18
15
|
:cookies => true,
|
19
16
|
:crawler => false,
|
20
17
|
:css_version => 3,
|
21
|
-
:device_name => "
|
22
|
-
:device_maker => "
|
18
|
+
:device_name => "Macintosh",
|
19
|
+
:device_maker => "Apple Inc",
|
23
20
|
:frames => true,
|
24
21
|
:iframes => true,
|
25
22
|
:java_applets => true,
|
@@ -29,16 +26,17 @@ class BrowscapperTest < MiniTest::Unit::TestCase
|
|
29
26
|
:mobile_device => false,
|
30
27
|
:parent => "Firefox 3.6",
|
31
28
|
:platform => "MacOSX",
|
32
|
-
:platform_version =>
|
29
|
+
:platform_version => 10.6,
|
33
30
|
:rendering_engine_name => "Gecko",
|
34
|
-
:rendering_engine_version => "
|
31
|
+
:rendering_engine_version => "1.9.2",
|
35
32
|
:rendering_engine_description => "For Firefox, Camino, K-Meleon, SeaMonkey, Netscape, and other Gecko-based browsers.",
|
36
33
|
:syndication_reader => false,
|
37
34
|
:tables => true,
|
38
|
-
:
|
35
|
+
:tablet => false,
|
36
|
+
:user_agent => "Mozilla/5.0 (*Mac OS X 10.6*) Gecko/* Firefox/3.6*",
|
39
37
|
:user_agent_id => nil,
|
40
38
|
:vbscript => false,
|
41
|
-
:version =>
|
39
|
+
:version => 3.6,
|
42
40
|
:win16 => false,
|
43
41
|
:win32 => false,
|
44
42
|
:win64 => false,
|
@@ -47,7 +45,7 @@ class BrowscapperTest < MiniTest::Unit::TestCase
|
|
47
45
|
FIREFOX_ON_OSX.pattern = /^mozilla\/5\.0 \(macintosh; .*; .*mac os x.*; .*; rv:1\.9\.2.*\) gecko\/.* firefox\/3\.6.*$/
|
48
46
|
|
49
47
|
def test_browscap_ini
|
50
|
-
Browscapper.load(File.join('vendor', 'browscap.
|
48
|
+
Browscapper.load(File.join('vendor', 'browscap.ini'))
|
51
49
|
match = Browscapper.match('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8')
|
52
50
|
|
53
51
|
FIREFOX_ON_OSX.each do |k, v|
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
# encoding: BINARY
|
3
|
+
|
4
|
+
if RUBY_VERSION >= '1.9'
|
5
|
+
require 'simplecov'
|
6
|
+
|
7
|
+
SimpleCov.command_name('Unit Tests')
|
8
|
+
SimpleCov.start do
|
9
|
+
add_filter '/test/'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'minitest/autorun'
|
15
|
+
|
16
|
+
if RUBY_VERSION >= '1.9'
|
17
|
+
require 'minitest/reporters'
|
18
|
+
end
|
19
|
+
|
20
|
+
require File.join(File.dirname(__FILE__), *%w{ .. lib browscapper })
|
21
|
+
|
22
|
+
if RUBY_VERSION >= '1.9'
|
23
|
+
MiniTest::Reporters.use!(MiniTest::Reporters::SpecReporter.new)
|
24
|
+
end
|
25
|
+
|
26
|
+
|
data/vendor/browscap.ini
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
;;; Provided courtesy of http://browscap.org/
|
2
|
+
;;; Created on Wednesday, November 19, 2014 at 09:12 PM UTC
|
3
|
+
;;; Keep up with the latest goings-on with the project:
|
4
|
+
;;; Follow us on Twitter <https://twitter.com/browscap>, or...
|
5
|
+
;;; Like us on Facebook <https://facebook.com/browscap>, or...
|
6
|
+
;;; Collaborate on GitHub <https://github.com/browscap>, or...
|
7
|
+
;;; Discuss on Google Groups <https://groups.google.com/forum/#!forum/browscap>.
|
8
|
+
|
9
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Version
|
10
|
+
|
11
|
+
[GJK_Browscap_Version]
|
12
|
+
Version=5036
|
13
|
+
Released=Wed, 19 Nov 2014 21:12:38 +0000
|
14
|
+
Format=php
|
15
|
+
Type=FULL
|
16
|
+
|
17
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties
|
18
|
+
|
19
|
+
[DefaultProperties]
|
20
|
+
Comment="DefaultProperties"
|
21
|
+
Browser="DefaultProperties"
|
22
|
+
Browser_Type=unknown
|
23
|
+
Browser_Bits=0
|
24
|
+
Browser_Maker="unknown"
|
25
|
+
Browser_Modus="unknown"
|
26
|
+
Version=0.0
|
27
|
+
MajorVer=0
|
28
|
+
MinorVer=0
|
29
|
+
Platform="unknown"
|
30
|
+
Platform_Version=unknown
|
31
|
+
Platform_Description="unknown"
|
32
|
+
Platform_Bits=0
|
33
|
+
Platform_Maker="unknown"
|
34
|
+
Alpha=false
|
35
|
+
Beta=false
|
36
|
+
Win16=false
|
37
|
+
Win32=false
|
38
|
+
Win64=false
|
39
|
+
Frames=false
|
40
|
+
IFrames=false
|
41
|
+
Tables=false
|
42
|
+
Cookies=false
|
43
|
+
BackgroundSounds=false
|
44
|
+
JavaScript=false
|
45
|
+
VBScript=false
|
46
|
+
JavaApplets=false
|
47
|
+
ActiveXControls=false
|
48
|
+
isMobileDevice=false
|
49
|
+
isTablet=false
|
50
|
+
isSyndicationReader=false
|
51
|
+
Crawler=false
|
52
|
+
CssVersion=0
|
53
|
+
AolVersion=0
|
54
|
+
Device_Name="unknown"
|
55
|
+
Device_Maker="unknown"
|
56
|
+
Device_Type=unknown
|
57
|
+
Device_Pointing_Method=unknown
|
58
|
+
Device_Code_Name="unknown"
|
59
|
+
Device_Brand_Name="unknown"
|
60
|
+
RenderingEngine_Name="unknown"
|
61
|
+
RenderingEngine_Version=unknown
|
62
|
+
RenderingEngine_Description="unknown"
|
63
|
+
RenderingEngine_Maker="unknown"
|
64
|
+
|
65
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.6
|
66
|
+
|
67
|
+
[Firefox 3.6]
|
68
|
+
Parent="DefaultProperties"
|
69
|
+
Comment="Firefox 3.6"
|
70
|
+
Browser="Firefox"
|
71
|
+
Browser_Type=Browser
|
72
|
+
Browser_Maker="Mozilla Foundation"
|
73
|
+
Version=3.6
|
74
|
+
MajorVer=3
|
75
|
+
MinorVer=6
|
76
|
+
Win32=true
|
77
|
+
Frames=true
|
78
|
+
IFrames=true
|
79
|
+
Tables=true
|
80
|
+
Cookies=true
|
81
|
+
JavaScript=true
|
82
|
+
JavaApplets=true
|
83
|
+
CssVersion=3
|
84
|
+
Device_Name="PC"
|
85
|
+
Device_Maker="Various"
|
86
|
+
Device_Type=Desktop
|
87
|
+
Device_Pointing_Method=mouse
|
88
|
+
RenderingEngine_Name="Gecko"
|
89
|
+
RenderingEngine_Version=1.9.2
|
90
|
+
RenderingEngine_Description="For Firefox, Camino, K-Meleon, SeaMonkey, Netscape, and other Gecko-based browsers."
|
91
|
+
RenderingEngine_Maker="Mozilla Foundation"
|
92
|
+
|
93
|
+
[Mozilla/5.0 (*Mac OS X 10.6*) Gecko/* Firefox/3.6*]
|
94
|
+
Parent="Firefox 3.6"
|
95
|
+
Browser_Bits=32
|
96
|
+
Platform="MacOSX"
|
97
|
+
Platform_Version=10.6
|
98
|
+
Platform_Description="Mac OS X"
|
99
|
+
Platform_Bits=32
|
100
|
+
Platform_Maker="Apple Inc"
|
101
|
+
Win32=false
|
102
|
+
Device_Name="Macintosh"
|
103
|
+
Device_Maker="Apple Inc"
|
104
|
+
Device_Code_Name="Macintosh"
|
105
|
+
Device_Brand_Name="Apple"
|
106
|
+
|
metadata
CHANGED
@@ -1,79 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browscapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
MC4wLjE=
|
6
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
7
5
|
platform: ruby
|
8
6
|
authors:
|
9
7
|
- J Smith
|
10
8
|
autorequire:
|
11
9
|
bindir: bin
|
12
10
|
cert_chain: []
|
13
|
-
date:
|
11
|
+
date: 2014-12-02 00:00:00.000000000 Z
|
14
12
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: rdoc
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
|
-
requirements:
|
20
|
-
- - ! '>='
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '0'
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
|
-
requirements:
|
28
|
-
- - ! '>='
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: '0'
|
31
|
-
- !ruby/object:Gem::Dependency
|
32
|
-
name: rake
|
33
|
-
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
|
-
requirements:
|
36
|
-
- - ~>
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
version: '0.9'
|
39
|
-
type: :runtime
|
40
|
-
prerelease: false
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
|
-
requirements:
|
44
|
-
- - ~>
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '0.9'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: minitest
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
|
-
requirements:
|
52
|
-
- - ! '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
type: :runtime
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
|
-
requirements:
|
60
|
-
- - ! '>='
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
13
|
- !ruby/object:Gem::Dependency
|
64
14
|
name: inifile
|
65
15
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
16
|
requirements:
|
68
|
-
- -
|
17
|
+
- - ">="
|
69
18
|
- !ruby/object:Gem::Version
|
70
19
|
version: '0'
|
71
20
|
type: :runtime
|
72
21
|
prerelease: false
|
73
22
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
23
|
requirements:
|
76
|
-
- -
|
24
|
+
- - ">="
|
77
25
|
- !ruby/object:Gem::Version
|
78
26
|
version: '0'
|
79
27
|
description: A browscap file parser and matcher.
|
@@ -83,8 +31,9 @@ extensions: []
|
|
83
31
|
extra_rdoc_files:
|
84
32
|
- README.rdoc
|
85
33
|
files:
|
86
|
-
- .gitignore
|
34
|
+
- ".gitignore"
|
87
35
|
- Gemfile
|
36
|
+
- Guardfile
|
88
37
|
- MIT-LICENSE
|
89
38
|
- README.rdoc
|
90
39
|
- Rakefile
|
@@ -97,32 +46,36 @@ files:
|
|
97
46
|
- lib/browscapper/reader/yaml_reader.rb
|
98
47
|
- lib/browscapper/user_agent.rb
|
99
48
|
- lib/browscapper/version.rb
|
49
|
+
- lib/tasks/dump.rake
|
50
|
+
- test/browscapper/reader_tests.rb
|
100
51
|
- test/browscapper_tests.rb
|
101
|
-
- test/
|
52
|
+
- test/test_helper.rb
|
53
|
+
- vendor/browscap.ini
|
102
54
|
homepage: http://github.com/dark-panda/browscapper
|
103
|
-
licenses:
|
55
|
+
licenses:
|
56
|
+
- MIT
|
57
|
+
metadata: {}
|
104
58
|
post_install_message:
|
105
59
|
rdoc_options: []
|
106
60
|
require_paths:
|
107
61
|
- lib
|
108
62
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
-
none: false
|
110
63
|
requirements:
|
111
|
-
- -
|
64
|
+
- - ">="
|
112
65
|
- !ruby/object:Gem::Version
|
113
66
|
version: '0'
|
114
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
68
|
requirements:
|
117
|
-
- -
|
69
|
+
- - ">="
|
118
70
|
- !ruby/object:Gem::Version
|
119
71
|
version: '0'
|
120
72
|
requirements: []
|
121
73
|
rubyforge_project:
|
122
|
-
rubygems_version:
|
74
|
+
rubygems_version: 2.2.2
|
123
75
|
signing_key:
|
124
|
-
specification_version:
|
76
|
+
specification_version: 4
|
125
77
|
summary: A browscap file parser and matcher.
|
126
78
|
test_files:
|
79
|
+
- test/browscapper/reader_tests.rb
|
127
80
|
- test/browscapper_tests.rb
|
128
|
-
- test/
|
81
|
+
- test/test_helper.rb
|
data/test/reader_tests.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
|
2
|
-
# encoding: BINARY
|
3
|
-
|
4
|
-
$: << './lib'
|
5
|
-
|
6
|
-
require 'rubygems'
|
7
|
-
require 'minitest/autorun'
|
8
|
-
require 'minitest/benchmark' if ENV['BENCH']
|
9
|
-
require './lib/browscapper'
|
10
|
-
require 'benchmark'
|
11
|
-
|
12
|
-
class ReaderTests < MiniTest::Unit::TestCase
|
13
|
-
def bench_csv
|
14
|
-
assert_performance_constant do |n|
|
15
|
-
Browscapper.load('vendor/browscap.csv')
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def bench_yaml
|
20
|
-
assert_performance_constant do |n|
|
21
|
-
Browscapper.load('vendor/browscap.yml')
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def bench_ini
|
26
|
-
assert_performance_constant do |n|
|
27
|
-
Browscapper.load('vendor/browscap.ini')
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def bench_marshal
|
32
|
-
assert_performance_constant do |n|
|
33
|
-
Browscapper.load('vendor/browscap.dump')
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|