wurfl 1.0.2
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/.gitignore +2 -0
- data/LICENSE +35 -0
- data/README.rdoc +144 -0
- data/Rakefile +60 -0
- data/VERSION +1 -0
- data/bin/uaproftowurfl.rb +28 -0
- data/bin/uaprofwurflcomparator.rb +223 -0
- data/bin/wurflcomparator.rb +86 -0
- data/bin/wurflinspector.rb +141 -0
- data/bin/wurflloader.rb +127 -0
- data/bin/wurflsanitycheck.rb +39 -0
- data/lib/wurfl/handset.rb +117 -0
- data/lib/wurfl/loader.rb +130 -0
- data/lib/wurfl/uaproftowurfl.rb +1013 -0
- data/lib/wurfl/utils.rb +31 -0
- data/test/data/wurfl.simple.xml +38 -0
- data/test/handset_test.rb +70 -0
- data/test/loader_test.rb +29 -0
- data/wurfl.gemspec +59 -0
- metadata +79 -0
data/lib/wurfl/utils.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require "pstore"
|
2
|
+
|
3
|
+
module Wurfl; end
|
4
|
+
|
5
|
+
=begin
|
6
|
+
A simple module to hold commonly used methods for the WURFL.
|
7
|
+
This is currently just loading and saving a WURFL PStore database.
|
8
|
+
=end
|
9
|
+
module Wurfl::Utils
|
10
|
+
|
11
|
+
# Does not catch exception, but throws to the caller.
|
12
|
+
def load_wurfl_pstore(pstorefile)
|
13
|
+
pstore = PStore.new(pstorefile)
|
14
|
+
handsets = fallbacks = nil
|
15
|
+
pstore.transaction do |ps|
|
16
|
+
handsets = ps["handsets"]
|
17
|
+
fallbacks = ps["fallback"]
|
18
|
+
end
|
19
|
+
return handsets,fallbacks
|
20
|
+
end
|
21
|
+
|
22
|
+
#Also throws exceptions to the caller.
|
23
|
+
def save_wurfl_pstore(pstorefile,handsets,fallbacks)
|
24
|
+
store = PStore.new(pstorefile)
|
25
|
+
store.transaction do |ps|
|
26
|
+
ps["handsets"] = handsets
|
27
|
+
ps["fallback"] = fallbacks
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<wurfl>
|
3
|
+
<version>
|
4
|
+
<ver>Test Version</ver>
|
5
|
+
</version>
|
6
|
+
<devices>
|
7
|
+
<device id="generic" user_agent="" fall_back="root">
|
8
|
+
<group id="display">
|
9
|
+
<capability name="physical_screen_height" value="27"/>
|
10
|
+
<capability name="columns" value="11"/>
|
11
|
+
<capability name="physical_screen_width" value="27"/>
|
12
|
+
<capability name="rows" value="6"/>
|
13
|
+
<capability name="max_image_width" value="90"/>
|
14
|
+
<capability name="resolution_height" value="40"/>
|
15
|
+
<capability name="resolution_width" value="90"/>
|
16
|
+
<capability name="max_image_height" value="35"/>
|
17
|
+
</group>
|
18
|
+
</device>
|
19
|
+
<device id="generic_xhtml" user_agent="Mozz" fall_back="generic">
|
20
|
+
<group id="display">
|
21
|
+
<capability name="max_image_width" value="120"/>
|
22
|
+
<capability name="resolution_height" value="92"/>
|
23
|
+
<capability name="resolution_width" value="128"/>
|
24
|
+
<capability name="max_image_height" value="92"/>
|
25
|
+
</group>
|
26
|
+
</device>
|
27
|
+
<device id="apple_generic" user_agent="Mozilla/5.0 (iPhone;" fall_back="generic_xhtml">
|
28
|
+
<group id="display">
|
29
|
+
<capability name="columns" value="20"/>
|
30
|
+
<capability name="max_image_width" value="300"/>
|
31
|
+
<capability name="rows" value="20"/>
|
32
|
+
<capability name="resolution_width" value="300"/>
|
33
|
+
<capability name="resolution_height" value="300"/>
|
34
|
+
<capability name="max_image_height" value="300"/>
|
35
|
+
</group>
|
36
|
+
</device>
|
37
|
+
</devices>
|
38
|
+
</wurfl>
|
@@ -0,0 +1,70 @@
|
|
1
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
require 'wurfl/handset'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestHandset < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@f = Wurfl::Handset.new("f", "f", nil)
|
8
|
+
@h = Wurfl::Handset.new("h", "h", @f)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_f
|
12
|
+
assert_nil @h["capability"]
|
13
|
+
@f["k"] = "v"
|
14
|
+
assert_equal "v", @h["k"]
|
15
|
+
@h["k"] = nil
|
16
|
+
assert_nil @h["k"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_get_value_and_owner
|
20
|
+
assert_equal [nil, nil], @h.get_value_and_owner("k")
|
21
|
+
@f["k"] = "v"
|
22
|
+
assert_equal ["v", "f"], @h.get_value_and_owner("k")
|
23
|
+
@h["k"] = nil
|
24
|
+
assert_equal [nil, "h"], @h.get_value_and_owner("k")
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_keys
|
28
|
+
@h["k1"] = "v1"
|
29
|
+
@f["k2"] = "v2"
|
30
|
+
assert_equal(["k1", "k2"], @h.keys)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_each
|
34
|
+
@h["k1"] = "v1"
|
35
|
+
@f["k2"] = "v2"
|
36
|
+
a = []
|
37
|
+
@h.each {|k,v| a << [k,v]}
|
38
|
+
assert_equal [["k1","v1"], ["k2","v2"]], a
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_equivalence
|
42
|
+
assert @h != nil
|
43
|
+
assert @h != 1
|
44
|
+
assert @h != @f
|
45
|
+
assert @h == @h
|
46
|
+
h2 = Wurfl::Handset.new("h","h", @f)
|
47
|
+
assert @h == h2
|
48
|
+
h2["k"] = "v"
|
49
|
+
assert @h != h2
|
50
|
+
@f["k"] = "v"
|
51
|
+
assert @h == h2
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_compare
|
55
|
+
f2 = Wurfl::Handset.new("f2", "f2", nil)
|
56
|
+
h2 = Wurfl::Handset.new("h2","h2", f2)
|
57
|
+
assert @h.compare(@f).empty?
|
58
|
+
@h["k"] = "v"
|
59
|
+
|
60
|
+
assert_equal [["k", nil, nil]], @h.compare(h2)
|
61
|
+
|
62
|
+
h2["k"] = "v2"
|
63
|
+
assert_equal [["k", "v2", "h2"]], @h.compare(h2)
|
64
|
+
|
65
|
+
@f["j"] = "1"
|
66
|
+
f2["j"] = "2"
|
67
|
+
assert_equal [["k", "v2", "h2"], ["j", "2", "f2"]], @h.compare(h2)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
data/test/loader_test.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
require 'wurfl/loader'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestLoader < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@loader = Wurfl::Loader.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_load_wurfl
|
12
|
+
handsets, fallbacks = @loader.load_wurfl(File.join(File.dirname(__FILE__), "data", "wurfl.simple.xml"))
|
13
|
+
assert_equal("20", handsets["apple_generic"]["columns"])
|
14
|
+
assert_equal("11", handsets["generic_xhtml"]["columns"])
|
15
|
+
assert_equal("11", handsets["generic"]["columns"])
|
16
|
+
|
17
|
+
assert_equal("300", handsets["apple_generic"]["max_image_height"])
|
18
|
+
assert_equal("92", handsets["generic_xhtml"]["max_image_height"])
|
19
|
+
assert_equal("35", handsets["generic"]["max_image_height"])
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_load_wurfl_from_string
|
23
|
+
s = File.read(File.join(File.dirname(__FILE__), "data", "wurfl.simple.xml"))
|
24
|
+
handsets, fallbacks = @loader.parse_xml(s)
|
25
|
+
assert_equal("300", handsets["apple_generic"]["max_image_height"])
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
data/wurfl.gemspec
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{wurfl}
|
5
|
+
s.version = "1.0.2"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Paul McMahon", "Zev Blut"]
|
9
|
+
s.date = %q{2009-06-02}
|
10
|
+
s.description = %q{TODO}
|
11
|
+
s.email = %q{info@mobalean.com}
|
12
|
+
s.executables = ["uaproftowurfl.rb", "wurflsanitycheck.rb", "wurflinspector.rb", "wurflloader.rb", "uaprofwurflcomparator.rb", "wurflcomparator.rb"]
|
13
|
+
s.extra_rdoc_files = [
|
14
|
+
"LICENSE",
|
15
|
+
"README.rdoc"
|
16
|
+
]
|
17
|
+
s.files = [
|
18
|
+
".gitignore",
|
19
|
+
"LICENSE",
|
20
|
+
"README.rdoc",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION",
|
23
|
+
"bin/uaproftowurfl.rb",
|
24
|
+
"bin/uaprofwurflcomparator.rb",
|
25
|
+
"bin/wurflcomparator.rb",
|
26
|
+
"bin/wurflinspector.rb",
|
27
|
+
"bin/wurflloader.rb",
|
28
|
+
"bin/wurflsanitycheck.rb",
|
29
|
+
"lib/wurfl/handset.rb",
|
30
|
+
"lib/wurfl/loader.rb",
|
31
|
+
"lib/wurfl/uaproftowurfl.rb",
|
32
|
+
"lib/wurfl/utils.rb",
|
33
|
+
"test/data/wurfl.simple.xml",
|
34
|
+
"test/handset_test.rb",
|
35
|
+
"test/loader_test.rb",
|
36
|
+
"wurfl.gemspec"
|
37
|
+
]
|
38
|
+
s.has_rdoc = true
|
39
|
+
s.homepage = %q{http://github.com/pwim/wurfl}
|
40
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
41
|
+
s.require_paths = ["lib"]
|
42
|
+
s.rubyforge_project = %q{wurfl}
|
43
|
+
s.rubygems_version = %q{1.3.1}
|
44
|
+
s.summary = %q{Library and tools for manipulating the WURFL}
|
45
|
+
s.test_files = [
|
46
|
+
"test/loader_test.rb",
|
47
|
+
"test/handset_test.rb"
|
48
|
+
]
|
49
|
+
|
50
|
+
if s.respond_to? :specification_version then
|
51
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
52
|
+
s.specification_version = 2
|
53
|
+
|
54
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
55
|
+
else
|
56
|
+
end
|
57
|
+
else
|
58
|
+
end
|
59
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wurfl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Paul McMahon
|
8
|
+
- Zev Blut
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2009-06-02 00:00:00 +09:00
|
14
|
+
default_executable:
|
15
|
+
dependencies: []
|
16
|
+
|
17
|
+
description: TODO
|
18
|
+
email: info@mobalean.com
|
19
|
+
executables:
|
20
|
+
- uaproftowurfl.rb
|
21
|
+
- wurflsanitycheck.rb
|
22
|
+
- wurflinspector.rb
|
23
|
+
- wurflloader.rb
|
24
|
+
- uaprofwurflcomparator.rb
|
25
|
+
- wurflcomparator.rb
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files:
|
29
|
+
- LICENSE
|
30
|
+
- README.rdoc
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- LICENSE
|
34
|
+
- README.rdoc
|
35
|
+
- Rakefile
|
36
|
+
- VERSION
|
37
|
+
- bin/uaproftowurfl.rb
|
38
|
+
- bin/uaprofwurflcomparator.rb
|
39
|
+
- bin/wurflcomparator.rb
|
40
|
+
- bin/wurflinspector.rb
|
41
|
+
- bin/wurflloader.rb
|
42
|
+
- bin/wurflsanitycheck.rb
|
43
|
+
- lib/wurfl/handset.rb
|
44
|
+
- lib/wurfl/loader.rb
|
45
|
+
- lib/wurfl/uaproftowurfl.rb
|
46
|
+
- lib/wurfl/utils.rb
|
47
|
+
- test/data/wurfl.simple.xml
|
48
|
+
- test/handset_test.rb
|
49
|
+
- test/loader_test.rb
|
50
|
+
- wurfl.gemspec
|
51
|
+
has_rdoc: true
|
52
|
+
homepage: http://github.com/pwim/wurfl
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options:
|
55
|
+
- --charset=UTF-8
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
version:
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
version:
|
70
|
+
requirements: []
|
71
|
+
|
72
|
+
rubyforge_project: wurfl
|
73
|
+
rubygems_version: 1.3.1
|
74
|
+
signing_key:
|
75
|
+
specification_version: 2
|
76
|
+
summary: Library and tools for manipulating the WURFL
|
77
|
+
test_files:
|
78
|
+
- test/loader_test.rb
|
79
|
+
- test/handset_test.rb
|