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.
@@ -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
@@ -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
@@ -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>
@@ -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
@@ -0,0 +1 @@
1
+ <x> <a><b>1</b></a> <a><b>2</b></a> </x>
@@ -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: []