xmlcodec 0.0.2 → 0.0.3
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/Rakefile +10 -4
- data/lib/XMLElement.rb +48 -30
- metadata +9 -7
data/Rakefile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
PKG_NAME = 'xmlcodec'
|
2
|
-
PKG_VERSION = '0.0.
|
2
|
+
PKG_VERSION = '0.0.3'
|
3
3
|
|
4
4
|
require 'rake'
|
5
5
|
require 'rake/testtask'
|
@@ -18,6 +18,9 @@ PKG_FILES = FileList[TEST_FILES,
|
|
18
18
|
'LICENSE',
|
19
19
|
'Rakefile']
|
20
20
|
|
21
|
+
RDOC_OPTIONS = ['-S', '-w 2', '-N']
|
22
|
+
RDOC_EXTRA_FILES = ['README']
|
23
|
+
|
21
24
|
spec = Gem::Specification.new do |s|
|
22
25
|
s.platform = Gem::Platform::RUBY
|
23
26
|
s.summary = "Generic Importer/Exporter of XML formats"
|
@@ -29,6 +32,9 @@ spec = Gem::Specification.new do |s|
|
|
29
32
|
s.require_path = 'lib'
|
30
33
|
s.autorequire = 'rake'
|
31
34
|
s.files = PKG_FILES
|
35
|
+
s.has_rdoc = true
|
36
|
+
s.rdoc_options = RDOC_OPTIONS
|
37
|
+
s.extra_rdoc_files = RDOC_EXTRA_FILES
|
32
38
|
s.description = <<EOF
|
33
39
|
A library that eases the creation of XML importers and exporters for ruby.
|
34
40
|
EOF
|
@@ -50,10 +56,10 @@ end
|
|
50
56
|
Rake::RDocTask.new do |rd|
|
51
57
|
rd.main = "README"
|
52
58
|
rd.name = :docs
|
53
|
-
rd.rdoc_files.include(
|
54
|
-
rd.rdoc_dir = 'doc'
|
59
|
+
rd.rdoc_files.include(RDOC_EXTRA_FILES, CODE_FILES)
|
60
|
+
rd.rdoc_dir = 'web/doc'
|
55
61
|
rd.title = "#{PKG_NAME} API"
|
56
|
-
rd.options =
|
62
|
+
rd.options = RDOC_OPTIONS
|
57
63
|
end
|
58
64
|
|
59
65
|
task :stats do
|
data/lib/XMLElement.rb
CHANGED
@@ -27,6 +27,7 @@ module XMLCodec
|
|
27
27
|
# rough in certain places. Changes will surely be made.
|
28
28
|
class XMLElement
|
29
29
|
INDENT_STR = ' '
|
30
|
+
CACHE = {}
|
30
31
|
|
31
32
|
attr_accessor :element_id, :parent_id, :__xml_text
|
32
33
|
attr_accessor :__parent
|
@@ -80,22 +81,35 @@ module XMLCodec
|
|
80
81
|
}
|
81
82
|
end
|
82
83
|
|
83
|
-
# Iterates over
|
84
|
-
def each_subel
|
85
|
-
self.
|
84
|
+
# Iterates over the object's XML subelements
|
85
|
+
def self.each_subel
|
86
|
+
if not self.instance_variables.index("@__subel_names")
|
87
|
+
names = []
|
88
|
+
# Iterate all the superclasses that are still children of XMLElement
|
89
|
+
# and iterate each of the subelements
|
90
|
+
c = self
|
91
|
+
while c.ancestors.index(XMLCodec::XMLElement)
|
92
|
+
names += c.xmlsubels
|
93
|
+
c = c.superclass
|
94
|
+
end
|
95
|
+
@__subel_names = names
|
96
|
+
end
|
97
|
+
@__subel_names.each {|name| yield name}
|
86
98
|
end
|
87
99
|
|
88
100
|
# Iterate all the superclasses that are still children of XMLElement
|
89
101
|
# and check if any of them have the subelement mult defined
|
90
|
-
def subel_mult?(element)
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
102
|
+
def self.subel_mult?(element)
|
103
|
+
if not self.instance_variables.index("@__subel_mult_names")
|
104
|
+
names = []
|
105
|
+
c = self
|
106
|
+
while c.ancestors.index(XMLCodec::XMLElement)
|
107
|
+
names += c.xmlsubelmultiples
|
108
|
+
c = c.superclass
|
95
109
|
end
|
96
|
-
|
110
|
+
@__subel_mult_names = names
|
97
111
|
end
|
98
|
-
return false
|
112
|
+
return @__subel_mult_names.index(element)? true : false
|
99
113
|
end
|
100
114
|
|
101
115
|
# Iterate all the superclasses that are still children of XMLElement
|
@@ -115,19 +129,25 @@ module XMLCodec
|
|
115
129
|
end
|
116
130
|
|
117
131
|
# Iterates over the object's XML atributes
|
118
|
-
def each_attr
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
c
|
124
|
-
|
132
|
+
def self.each_attr
|
133
|
+
if not self.instance_variables.index("@__attr_names")
|
134
|
+
names = []
|
135
|
+
# Iterate all the superclasses that are still children of EADElement
|
136
|
+
# and iterate each of the attributes
|
137
|
+
c = self
|
138
|
+
while c.ancestors.index(XMLCodec::XMLElement)
|
139
|
+
names += c.xmlattrs
|
140
|
+
c = c.superclass
|
141
|
+
end
|
142
|
+
@__attr_names = names
|
125
143
|
end
|
144
|
+
|
145
|
+
@__attr_names.each {|name| yield name}
|
126
146
|
end
|
127
147
|
|
128
148
|
# Creates the XML for the atributes
|
129
149
|
def create_xml_attr(parent)
|
130
|
-
each_attr do |a|
|
150
|
+
self.class.each_attr do |a|
|
131
151
|
value = self.send(a)
|
132
152
|
if value
|
133
153
|
parent.add_attribute(a.to_s, value)
|
@@ -138,7 +158,7 @@ module XMLCodec
|
|
138
158
|
# returns a string with the opening tag for the element
|
139
159
|
def create_open_tag
|
140
160
|
attrs = {}
|
141
|
-
each_attr do |a|
|
161
|
+
self.class.each_attr do |a|
|
142
162
|
value = self.send(a)
|
143
163
|
if value
|
144
164
|
attrs[a.to_s] = value
|
@@ -203,7 +223,7 @@ module XMLCodec
|
|
203
223
|
|
204
224
|
# Creates the XML subelements
|
205
225
|
def create_xml_subel(parent)
|
206
|
-
each_subel do |a|
|
226
|
+
self.class.each_subel do |a|
|
207
227
|
if value = self.send(a)
|
208
228
|
value.create_xml(parent)
|
209
229
|
end
|
@@ -244,9 +264,9 @@ module XMLCodec
|
|
244
264
|
def each_subelement
|
245
265
|
arr = []
|
246
266
|
|
247
|
-
each_subel do |a|
|
267
|
+
self.class.each_subel do |a|
|
248
268
|
if value = self.send(a)
|
249
|
-
if subel_mult? a
|
269
|
+
if self.class.subel_mult? a
|
250
270
|
value.each {|e| arr << e}
|
251
271
|
else
|
252
272
|
arr << value
|
@@ -255,7 +275,7 @@ module XMLCodec
|
|
255
275
|
end
|
256
276
|
|
257
277
|
if has_subelements?
|
258
|
-
|
278
|
+
self.subelements.each{|e| arr << e}
|
259
279
|
end
|
260
280
|
|
261
281
|
arr.each {|e| yield e}
|
@@ -264,9 +284,9 @@ module XMLCodec
|
|
264
284
|
public
|
265
285
|
# Remove the given subelement from the element
|
266
286
|
def delete_element(element)
|
267
|
-
each_subel do |a|
|
287
|
+
self.class.each_subel do |a|
|
268
288
|
value = self.send(a)
|
269
|
-
if subel_mult? a
|
289
|
+
if self.class.subel_mult? a
|
270
290
|
value.delete_element(element)
|
271
291
|
else
|
272
292
|
self.send(a.to_s+'=', nil) if value == element
|
@@ -387,10 +407,8 @@ module XMLCodec
|
|
387
407
|
|
388
408
|
# add the attributes passed as a hash to the element
|
389
409
|
def add_attr(attrs)
|
390
|
-
|
391
|
-
|
392
|
-
self.send("#{a}=", value)
|
393
|
-
end
|
410
|
+
attrs.each do |name, value|
|
411
|
+
self.send("#{name}=", value)
|
394
412
|
end
|
395
413
|
end
|
396
414
|
|
@@ -405,7 +423,7 @@ module XMLCodec
|
|
405
423
|
def add_subel(children)
|
406
424
|
children.each do |c|
|
407
425
|
if subel_name = get_subel(c.class)
|
408
|
-
if subel_mult? subel_name
|
426
|
+
if self.class.subel_mult? subel_name
|
409
427
|
self.send(subel_name) << c
|
410
428
|
else
|
411
429
|
self.send(subel_name.to_s+'=', c)
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: xmlcodec
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2006-05-
|
6
|
+
version: 0.0.3
|
7
|
+
date: 2006-05-29 00:00:00 +01:00
|
8
8
|
summary: Generic Importer/Exporter of XML formats
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -15,7 +15,7 @@ description: A library that eases the creation of XML importers and exporters fo
|
|
15
15
|
autorequire: rake
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
18
|
-
has_rdoc:
|
18
|
+
has_rdoc: true
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">"
|
@@ -45,10 +45,12 @@ files:
|
|
45
45
|
- Rakefile
|
46
46
|
test_files: []
|
47
47
|
|
48
|
-
rdoc_options:
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
rdoc_options:
|
49
|
+
- -S
|
50
|
+
- -w 2
|
51
|
+
- -N
|
52
|
+
extra_rdoc_files:
|
53
|
+
- README
|
52
54
|
executables: []
|
53
55
|
|
54
56
|
extensions: []
|