xmlelements 0.1.1
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/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: []
|