xmlelements 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/XmlElements.rb +86 -0
- data/XmlElementsTest.rb +82 -0
- data/project.xml +67 -0
- data/rakefile.rb +36 -0
- data/test.xml +1 -0
- data/xmldemo.rb +12 -0
- metadata +42 -0
data/XmlElements.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
=begin
|
4
|
+
this is a mind bending class. xmlelements is always initialized with an array of
|
5
|
+
nodes, that have the same name.
|
6
|
+
=end
|
7
|
+
class XmlElements
|
8
|
+
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
private
|
12
|
+
def initialize(a)
|
13
|
+
if a.length == 0
|
14
|
+
raise 'keine childs gefunden'
|
15
|
+
end
|
16
|
+
@elements = a
|
17
|
+
@name = @elements[0].name
|
18
|
+
end
|
19
|
+
|
20
|
+
public
|
21
|
+
def XmlElements.createFromDocument(doc)
|
22
|
+
XmlElements.new(doc.elements.to_a)
|
23
|
+
end
|
24
|
+
|
25
|
+
def XmlElements.fromString(string)
|
26
|
+
doc = REXML::Document.new(string)
|
27
|
+
XmlElements.createFromDocument(doc);
|
28
|
+
end
|
29
|
+
|
30
|
+
def XmlElements.fromFile(file)
|
31
|
+
doc = REXML::Document.new(File.new(file))
|
32
|
+
XmlElements.createFromDocument(doc);
|
33
|
+
end
|
34
|
+
|
35
|
+
def childs(name)
|
36
|
+
res = @elements.collect do |e|
|
37
|
+
e.elements.find_all{|child|child.name == name}
|
38
|
+
end
|
39
|
+
if (res != nil) && (res.flatten!.length > 0) then
|
40
|
+
XmlElements.new(res)
|
41
|
+
else
|
42
|
+
raise "no childs named '#{name}' found!"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def method_missing(method_id)
|
47
|
+
childs(method_id.to_s)
|
48
|
+
end
|
49
|
+
|
50
|
+
def hasChild(name)
|
51
|
+
res = @elements.collect do |e|
|
52
|
+
e.elements.find_all{|child|child.name == name}
|
53
|
+
end
|
54
|
+
res.flatten!
|
55
|
+
return res.length > 0
|
56
|
+
end
|
57
|
+
|
58
|
+
def each(*args)
|
59
|
+
if (args.length == 0)
|
60
|
+
@elements.each{|i| yield XmlElements.new([i])}
|
61
|
+
elsif (args.length == 1)
|
62
|
+
childs(args[0]).each {|i| yield i}
|
63
|
+
else
|
64
|
+
raise NoMethodError.new('wrong number of arguments expected 0 or 1 argument')
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def size?
|
69
|
+
@elements.length
|
70
|
+
end
|
71
|
+
|
72
|
+
def [](key)
|
73
|
+
if key.kind_of?(Integer)
|
74
|
+
XmlElements.new([@elements[key]])
|
75
|
+
else
|
76
|
+
raise 'node is not a leaf, therefore amibigous' unless @elements.length == 1
|
77
|
+
@elements[0].attributes[key]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def text
|
82
|
+
raise 'node is not a leaf, therefore ambigious' unless @elements.length == 1
|
83
|
+
@elements[0].text
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
data/XmlElementsTest.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require_gem 'xmlelements'
|
5
|
+
|
6
|
+
|
7
|
+
class XmlElementsTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def testProject
|
10
|
+
project = XmlElements.fromString('<project test="test"><a id="1">foo</a><b><c></c></b><a id="2">bar</a></project>')
|
11
|
+
assert_equal(1, project.size?)
|
12
|
+
|
13
|
+
assert_equal(true, project.hasChild("a"))
|
14
|
+
assert_equal(false, project.hasChild("quatsch"))
|
15
|
+
|
16
|
+
assert_equal('project', project.name)
|
17
|
+
as = project.a
|
18
|
+
assert_equal(2, as.size?)
|
19
|
+
assert_equal('a', as.name)
|
20
|
+
|
21
|
+
bs = project.b
|
22
|
+
assert_equal(1, bs.size?)
|
23
|
+
assert_equal('b', bs.name)
|
24
|
+
|
25
|
+
c = project.b.c
|
26
|
+
assert_equal(1, c.size?)
|
27
|
+
|
28
|
+
assert_equal("foo", as[0].text)
|
29
|
+
assert_equal("bar", as[1].text)
|
30
|
+
|
31
|
+
assert_equal('a' , as[0].name)
|
32
|
+
|
33
|
+
assert_equal('1', as[0]['id'])
|
34
|
+
|
35
|
+
assert_equal('test', project['test'])
|
36
|
+
|
37
|
+
t = []
|
38
|
+
project.a.each { |a| t<<a["id"] }
|
39
|
+
assert_equal("1", t[0])
|
40
|
+
assert_equal("2", t[1])
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def testRecursion
|
45
|
+
x = XmlElements.fromString('<x> <a>a1<b>b1</b></a> <a>a2<b>b2</b></a> </x>')
|
46
|
+
assert_equal('x', x.name)
|
47
|
+
assert_equal('a', x.a.name)
|
48
|
+
assert_equal('a2', x.a[1].text)
|
49
|
+
|
50
|
+
assert_equal(2, x.a.b.size?)
|
51
|
+
assert_equal(1, x.a[0].b.size?)
|
52
|
+
|
53
|
+
assert_equal("b1", x.a.b[0].text)
|
54
|
+
assert_equal("b2", x.a.b[1].text)
|
55
|
+
end
|
56
|
+
|
57
|
+
def testFromFile
|
58
|
+
test = XmlElements.fromFile('test.xml')
|
59
|
+
as = test.a
|
60
|
+
assert_equal(2, as.size?)
|
61
|
+
end
|
62
|
+
|
63
|
+
def testArrays
|
64
|
+
res = []
|
65
|
+
a1 = [1, 2, 3, 4]
|
66
|
+
res.push(*a1)
|
67
|
+
assert_equal(4, res.length)
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
class Params
|
72
|
+
def method_missing(method_id, *args)
|
73
|
+
print method_id.to_s + "\n"
|
74
|
+
print args
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
#def testArgs
|
79
|
+
# Params.new.bla("was", "soll", "denn", "das")
|
80
|
+
#end
|
81
|
+
|
82
|
+
end
|
data/project.xml
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<project>
|
3
|
+
|
4
|
+
<pomVersion>1</pomVersion>
|
5
|
+
|
6
|
+
<name>beenerator</name>
|
7
|
+
<groupId>flopcode</groupId>
|
8
|
+
<id>beenerator</id>
|
9
|
+
<currentVersion>0.1.14</currentVersion>
|
10
|
+
|
11
|
+
<siteAddress>beenerator.sourceforge.net</siteAddress>
|
12
|
+
<siteDirectory>/home/groups/b/be/beenerator/htdocs/maven</siteDirectory>
|
13
|
+
<organization>flopcode</organization>
|
14
|
+
|
15
|
+
<developers>
|
16
|
+
<developer>
|
17
|
+
<name>Christian Koestlin</name>
|
18
|
+
<id>cK</id>
|
19
|
+
<email>gizmoatflopcodedotcom</email>
|
20
|
+
</developer>
|
21
|
+
<developer>
|
22
|
+
<name>Gerd Schaefer</name>
|
23
|
+
<id>gS</id>
|
24
|
+
<email>gerddotschaeferatirgendodotde</email>
|
25
|
+
</developer>
|
26
|
+
</developers>
|
27
|
+
|
28
|
+
<package>beenerator</package>
|
29
|
+
|
30
|
+
<dependencies>
|
31
|
+
<dependency>
|
32
|
+
<groupId>smc</groupId>
|
33
|
+
<artifactId>statemap</artifactId>
|
34
|
+
<version>3.0.0</version>
|
35
|
+
</dependency>
|
36
|
+
<dependency>
|
37
|
+
<groupId>bsh</groupId>
|
38
|
+
<artifactId>bsh</artifactId>
|
39
|
+
<version>2.0b2</version>
|
40
|
+
</dependency>
|
41
|
+
<dependency>
|
42
|
+
<groupId>ant</groupId>
|
43
|
+
<artifactId>ant</artifactId>
|
44
|
+
<version>1.5.3-1</version>
|
45
|
+
</dependency>
|
46
|
+
</dependencies>
|
47
|
+
|
48
|
+
<build>
|
49
|
+
<sourceDirectory>src/java</sourceDirectory>
|
50
|
+
<unitTestSourceDirectory>src/test</unitTestSourceDirectory>
|
51
|
+
|
52
|
+
<unitTest>
|
53
|
+
<includes>
|
54
|
+
<include>**/*TestCase.java</include>
|
55
|
+
</includes>
|
56
|
+
</unitTest>
|
57
|
+
|
58
|
+
<resources>
|
59
|
+
<resource>
|
60
|
+
<directory>src/etc</directory>
|
61
|
+
<includes>
|
62
|
+
<include>**/*</include>
|
63
|
+
</includes>
|
64
|
+
</resource>
|
65
|
+
</resources>
|
66
|
+
</build>
|
67
|
+
</project>
|
data/rakefile.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake/gempackagetask'
|
3
|
+
|
4
|
+
desc "Default Task"
|
5
|
+
task :default => :package
|
6
|
+
|
7
|
+
PKG_VERSION = '0.1.1'
|
8
|
+
PKG_FILES = FileList[
|
9
|
+
# '[A-Z]*',
|
10
|
+
#'bin/**/*',
|
11
|
+
'*.rb', '*.xml'
|
12
|
+
# 'test/**/*.rb',
|
13
|
+
# 'doc/**/*'
|
14
|
+
]
|
15
|
+
|
16
|
+
|
17
|
+
spec = Gem::Specification.new do |s|
|
18
|
+
s.name = 'xmlelements'
|
19
|
+
s.version = PKG_VERSION
|
20
|
+
s.summary = "Strange Xml-Api."
|
21
|
+
s.description = <<-EOF
|
22
|
+
A really easy xml-api.
|
23
|
+
EOF
|
24
|
+
s.files = PKG_FILES.to_a
|
25
|
+
s.require_path = 'lib'
|
26
|
+
s.autorequire = 'xmlelements'
|
27
|
+
# s.has_rdoc = true
|
28
|
+
s.author = "Michael Ehrmann, Christian Köstlin"
|
29
|
+
s.email = "michaelATkodiererDOTcom"
|
30
|
+
# s.homepage = "[http address which can't be saved due to external link blocker...]"
|
31
|
+
s.rubyforge_project = "xmlelements"
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
36
|
+
end
|
data/test.xml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<x> <a><b>1</b></a> <a><b>2</b></a> </x>
|
data/xmldemo.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require_gem 'xmlelements'
|
3
|
+
|
4
|
+
project = XmlElements.fromString(File.read("project.xml"))
|
5
|
+
project.dependencies.dependency.each do |d|
|
6
|
+
puts "#{d.artifactId.text} - #{d.version.text}"
|
7
|
+
end
|
8
|
+
|
9
|
+
puts 'second coming'
|
10
|
+
project.dependencies.each('dependency') do |d|
|
11
|
+
puts "#{d.artifactId.text} - #{d.version.text}"
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.10
|
3
|
+
specification_version: 1
|
4
|
+
name: xmlelements
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.1
|
7
|
+
date: 2005-08-07
|
8
|
+
summary: Strange Xml-Api.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: michaelATkodiererDOTcom
|
12
|
+
homepage:
|
13
|
+
rubyforge_project: xmlelements
|
14
|
+
description: A really easy xml-api.
|
15
|
+
autorequire: xmlelements
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: false
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
-
|
22
|
+
- ">"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.0.0
|
25
|
+
version:
|
26
|
+
platform: ruby
|
27
|
+
authors:
|
28
|
+
- "Michael Ehrmann, Christian Köstlin"
|
29
|
+
files:
|
30
|
+
- rakefile.rb
|
31
|
+
- xmldemo.rb
|
32
|
+
- XmlElements.rb
|
33
|
+
- XmlElementsTest.rb
|
34
|
+
- project.xml
|
35
|
+
- test.xml
|
36
|
+
test_files: []
|
37
|
+
rdoc_options: []
|
38
|
+
extra_rdoc_files: []
|
39
|
+
executables: []
|
40
|
+
extensions: []
|
41
|
+
requirements: []
|
42
|
+
dependencies: []
|