Module: KeepYourHead::XmlAccessor
Defined Under Namespace
Classes: XmlAccessorElementList
Class Method Summary
collapse
-
.addAttribute(_class, functionName, elementName, notifyEvent, procRead = nil, procWrite = nil) ⇒ Object
-
.addElementCData(_class, functionName, elementName, notifyEvent, procRead = nil, procWrite = nil) ⇒ Object
-
.addElementText(_class, functionName, elementName, notifyEvent, procRead = nil, procWrite = nil) ⇒ Object
Instance Method Summary
collapse
-
#xmlAccessorAttributeRead(name, procRead) ⇒ Object
-
#xmlAccessorAttributeWrite(name, notifyEvent, value, procWrite) ⇒ Object
-
#xmlAccessorElementCDataRead(name, procRead) ⇒ Object
-
#xmlAccessorElementCDataWrite(name, notifyEvent, value, procWrite) ⇒ Object
-
#xmlAccessorElementListCreate(name, notifyEvent, procCreate) ⇒ Object
-
#xmlAccessorElementListInsertAfter(name, notifyEvent, procRead, node, other) ⇒ Object
-
#xmlAccessorElementListInsertBefore(name, notifyEvent, procRead, node, other) ⇒ Object
-
#xmlAccessorElementListInsertFirst(name, notifyEvent, procRead, node) ⇒ Object
-
#xmlAccessorElementListInsertLast(name, notifyEvent, procRead, node) ⇒ Object
-
#xmlAccessorElementListNext(name, procRead, other) ⇒ Object
-
#xmlAccessorElementListPrevious(name, procRead, other) ⇒ Object
-
#xmlAccessorElementListRead(name, procRead) ⇒ Object
-
#xmlAccessorElementListRemove(name, notifyEvent, item) ⇒ Object
-
#xmlAccessorElementTextRead(name, procRead) ⇒ Object
-
#xmlAccessorElementTextWrite(name, notifyEvent, value, procWrite) ⇒ Object
Class Method Details
.addAttribute(_class, functionName, elementName, notifyEvent, procRead = nil, procWrite = nil) ⇒ Object
83
84
85
86
87
88
89
90
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 83
def self.addAttribute( _class, functionName, elementName, notifyEvent, procRead = nil, procWrite = nil )
_class.my_define_method(functionName.to_sym) {
xmlAccessorAttributeRead elementName, procRead
}
_class.my_define_method( (functionName.to_s + "=").to_sym ) { |value|
xmlAccessorAttributeWrite elementName, notifyEvent, value, procWrite
}
end
|
.addElementCData(_class, functionName, elementName, notifyEvent, procRead = nil, procWrite = nil) ⇒ Object
54
55
56
57
58
59
60
61
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 54
def self.addElementCData( _class, functionName, elementName, notifyEvent, procRead = nil, procWrite = nil )
_class.my_define_method(functionName.to_sym) {
xmlAccessorElementCDataRead elementName, procRead
}
_class.my_define_method( (functionName.to_s + "=").to_sym ) { |value|
xmlAccessorElementCDataWrite elementName, notifyEvent, value, procWrite
}
end
|
.addElementText(_class, functionName, elementName, notifyEvent, procRead = nil, procWrite = nil) ⇒ Object
118
119
120
121
122
123
124
125
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 118
def self.addElementText( _class, functionName, elementName, notifyEvent, procRead = nil, procWrite = nil )
_class.my_define_method(functionName.to_sym) {
xmlAccessorElementTextRead elementName, procRead
}
_class.my_define_method( (functionName.to_s + "=").to_sym ) { |value|
xmlAccessorElementTextWrite elementName, notifyEvent, value, procWrite
}
end
|
Instance Method Details
#xmlAccessorAttributeRead(name, procRead) ⇒ Object
68
69
70
71
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 68
def xmlAccessorAttributeRead( name, procRead )
ret = @node.attributes[name]
(procRead && procRead.call(self, ret) ) || ret
end
|
#xmlAccessorAttributeWrite(name, notifyEvent, value, procWrite) ⇒ Object
73
74
75
76
77
78
79
80
81
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 73
def xmlAccessorAttributeWrite( name, notifyEvent, value, procWrite )
value = (procWrite && procWrite.call(self, value)) || value
if @node.attributes[name] != value then
@node.attributes[name] = value
file. notifyEvent, self if notifyEvent
end
end
|
#xmlAccessorElementCDataRead(name, procRead) ⇒ Object
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 21
def xmlAccessorElementCDataRead( name, procRead )
parent = REXML::XPath.first( node, name )
ret = parent && parent.children.map{ |c|
case c
when REXML::Text
c.value
when REXML::CData
c.value
else
nil
end
}.compact.join("")
(procRead && procRead.call(self, ret) ) || ret
end
|
#xmlAccessorElementCDataWrite(name, notifyEvent, value, procWrite) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 36
def xmlAccessorElementCDataWrite( name, notifyEvent, value, procWrite )
lastValue = (val = REXML::XPath.first( node, name )) && val.cdatas.map{ |cd| cd.value }.join("")
newValue = (procWrite && procWrite.call(self, value)) || value
node_ = REXML::XPath.first( node, name )
node_ ||= @node.add REXML::Element.new(name)
if lastValue != newValue then
node_.delete_at 0 while node_.length > 0
node_.add REXML::CData.new(newValue)
file. notifyEvent, self if notifyEvent
end
end
|
#xmlAccessorElementListCreate(name, notifyEvent, procCreate) ⇒ Object
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 240
def xmlAccessorElementListCreate( name, notifyEvent, procCreate )
=begin
node = REXML::Element.new name
if self.node[0] then
self.node.insert_before self.node[0], node
else
self.node.add node
end
=end
node = self.node.add REXML::Element.new(name)
ret = (procCreate && procCreate.call(self,node)) || node.name
file. notifyEvent, ret if notifyEvent
ret
end
|
#xmlAccessorElementListInsertAfter(name, notifyEvent, procRead, node, other) ⇒ Object
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 224
def xmlAccessorElementListInsertAfter( name, notifyEvent, procRead, node, other )
assert node.kind_of?(REXML::Element)
assert node.name =~ name
assert other
assert other.parent == self
other.node.parent.insert_after other.node, node
ret = (procRead && procRead.call(self,node) ) || node.name
file. notifyEvent, ret if notifyEvent
ret
end
|
#xmlAccessorElementListInsertBefore(name, notifyEvent, procRead, node, other) ⇒ Object
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 208
def xmlAccessorElementListInsertBefore( name, notifyEvent, procRead, node, other )
assert node.kind_of?(REXML::Element)
assert node.name =~ name
assert other
assert other.parent == self
other.node.parent.insert_before other.node, node
ret = (procRead && procRead.call(self,node) ) || node.name
file. notifyEvent, ret if notifyEvent
ret
end
|
#xmlAccessorElementListInsertFirst(name, notifyEvent, procRead, node) ⇒ Object
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 178
def xmlAccessorElementListInsertFirst( name, notifyEvent, procRead, node )
assert node.kind_of?(REXML::Element)
assert node.name =~ name
if self.node[0] then
self.node.insert_before self.node[0], node
else
self.node.add node
end
ret = (procRead && procRead.call(self,node) ) || node.name
file. notifyEvent, ret if notifyEvent
ret
end
|
#xmlAccessorElementListInsertLast(name, notifyEvent, procRead, node) ⇒ Object
195
196
197
198
199
200
201
202
203
204
205
206
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 195
def xmlAccessorElementListInsertLast( name, notifyEvent, procRead, node )
assert node.kind_of?(REXML::Element)
assert node.name =~ name
self.node.add node
ret = (procRead && procRead.call(self,node) ) || node.name
file. notifyEvent, ret if notifyEvent
ret
end
|
#xmlAccessorElementListNext(name, procRead, other) ⇒ Object
140
141
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 140
def xmlAccessorElementListNext( name, procRead, other )
assert other.parent == self
ret = other.node
begin
ret = ret.next_element
end while (ret and not ret.name =~ name)
return nil unless ret
(procRead && procRead.call(self,ret) ) || ret.name
end
|
#xmlAccessorElementListPrevious(name, procRead, other) ⇒ Object
153
154
155
156
157
158
159
160
161
162
163
164
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 153
def xmlAccessorElementListPrevious( name, procRead, other )
assert other.parent == self
ret = other.node
begin
ret = ret.previous_element
end while ret and not ret.name =~ name
return nil unless ret
(procRead && procRead.call(self,ret) ) || ret.name
end
|
#xmlAccessorElementListRead(name, procRead) ⇒ Object
133
134
135
136
137
138
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 133
def xmlAccessorElementListRead( name, procRead )
ret = @node.elements.select { |node| node.name =~ name }
ret.map! { |node|
(procRead && procRead.call(self,node) ) || node.name
}
end
|
#xmlAccessorElementListRemove(name, notifyEvent, item) ⇒ Object
166
167
168
169
170
171
172
173
174
175
176
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 166
def xmlAccessorElementListRemove( name, notifyEvent, item )
assert item.node.name =~ name
assert item.parent == self
file. notifyEvent, item if notifyEvent
item.node.remove
item.node
end
|
#xmlAccessorElementTextRead(name, procRead) ⇒ Object
98
99
100
101
102
103
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 98
def xmlAccessorElementTextRead( name, procRead )
n = REXML::XPath.first( node, name )
ret = n && n.text
(procRead && procRead.call(self,ret) ) || ret
end
|
#xmlAccessorElementTextWrite(name, notifyEvent, value, procWrite) ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/Keepyourhead/database/XmlAccessor.rb', line 105
def xmlAccessorElementTextWrite( name, notifyEvent, value, procWrite )
value = (procWrite && procWrite.call(self,value)) || value
n = REXML::XPath.first( node, name )
if not n or n.text != value then
n ||= node.add REXML::Element.new(name)
n.text=value
file. notifyEvent, self if notifyEvent
end
end
|