xmlelements 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []