Class: KXML::Node
- Inherits:
-
Object
show all
- Defined in:
- lib/xml/kxml.rb
Instance Method Summary
collapse
Constructor Details
#initialize(data) {|_self| ... } ⇒ Node
Returns a new instance of Node.
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/xml/kxml.rb', line 110
def initialize(data)
@_children = []
@_attributes = {}
case data
when String
if data =~ /^[<>\/]/
parse_from_string(data)
else
@_name = data
end
when File
parse_from_file(data)
else
raise "Unsupport Param Type : #{data.class}"
end
yield self if block_given?
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, &block) ⇒ Object
317
318
319
320
321
322
323
324
325
326
327
|
# File 'lib/xml/kxml.rb', line 317
def method_missing(method_name,*args,&block)
if respond_to? method_name then
super
else
if args[0].class == Array then
return find_children_by_name(method_name)
else
return find_child_by_name(method_name)
end
end
end
|
Instance Method Details
#<<(data) ⇒ Object
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
# File 'lib/xml/kxml.rb', line 134
def <<(data)
case data
when Hash
data.each{|k,v|
k = k.to_s if k.is_a? Symbol
@_attributes[k] = v
}
when KXML::Node
add_child(data)
when String
if data =~ /^[<>\/]/
self << Node.new(data)
else
append_content(data)
end
when Symbol
append_content(data.to_s)
when Array
data.each{|e|
self << e
}
else
raise "method << not support this type : #{data.class}"
end
return self
end
|
#[](key) ⇒ Object
237
238
239
|
# File 'lib/xml/kxml.rb', line 237
def [](key)
return @_attributes[key.to_s]
end
|
#[]=(key, value) ⇒ Object
241
242
243
|
# File 'lib/xml/kxml.rb', line 241
def []=(key,value)
@_attributes[key.to_s] = value
end
|
#_to_s_pretty(deepth = 0) ⇒ Object
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
# File 'lib/xml/kxml.rb', line 214
def _to_s_pretty(deepth = 0)
attributes_str = ""
indent = "\t" * deepth
wrap = "\n"
@_attributes.each{|key,value|
attributes_str += " #{key}=\"#{value}\""
}
content = ""
@_children.each{|child|
content += wrap
content += child._to_s_pretty(deepth+1)
}
content += wrap if @_children.size > 0
content += @_content if @_content != nil
return "#{indent}<#{@_name}#{attributes_str}>#{content}#{@_children.size > 0 ? indent : ""}</#{@_name}>"
end
|
#add_child(node) ⇒ Object
128
129
130
131
132
|
# File 'lib/xml/kxml.rb', line 128
def add_child(node)
@_children << node
node.parent = self
return self
end
|
#append_content(data) ⇒ Object
161
162
163
164
|
# File 'lib/xml/kxml.rb', line 161
def append_content(data)
@_content = "" if @_content == nil
@_content += data
end
|
#attributes ⇒ Object
245
246
247
|
# File 'lib/xml/kxml.rb', line 245
def attributes
return @_attributes
end
|
#call(*arg) ⇒ Object
269
270
271
272
273
274
275
|
# File 'lib/xml/kxml.rb', line 269
def call(*arg)
if arg[1].class == Array then
find_children_by_name(arg[0])
else
return find_child_by_name(arg[0])
end
end
|
#children ⇒ Object
265
266
267
|
# File 'lib/xml/kxml.rb', line 265
def children
return @_children
end
|
#content ⇒ Object
249
250
251
|
# File 'lib/xml/kxml.rb', line 249
def content
return @_content
end
|
#content=(value) ⇒ Object
253
254
255
|
# File 'lib/xml/kxml.rb', line 253
def content=(value)
@_content = value
end
|
#last_node ⇒ Object
178
179
180
181
182
183
184
185
186
187
188
|
# File 'lib/xml/kxml.rb', line 178
def last_node
p = parent
return nil if p==nil
index = -1
p.children.each_with_index{|c,i|
index = i if c==self
}
return nil if index == -1 or index == 0
return p.children[index-1] if p.children[index-1]!=nil
return nil
end
|
#name ⇒ Object
257
258
259
|
# File 'lib/xml/kxml.rb', line 257
def name
return @_name
end
|
#name=(value) ⇒ Object
261
262
263
|
# File 'lib/xml/kxml.rb', line 261
def name=(value)
@_name = value
end
|
#next_node ⇒ Object
166
167
168
169
170
171
172
173
174
175
176
|
# File 'lib/xml/kxml.rb', line 166
def next_node
p = parent
return nil if p==nil
index = -1
p.children.each_with_index{|c,i|
index = i if c==self
}
return nil if index == -1
return p.children[index+1] if p.children[index+1]!=nil
return nil
end
|
#parent ⇒ Object
233
234
235
|
# File 'lib/xml/kxml.rb', line 233
def parent
return @_parent
end
|
#to_ary ⇒ Object
190
191
192
|
# File 'lib/xml/kxml.rb', line 190
def to_ary
return [] << to_s
end
|
#to_s(format = Format::PRETTY) ⇒ Object
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
# File 'lib/xml/kxml.rb', line 194
def to_s(format = Format::PRETTY)
case format
when Format::MINIMUM
attributes_str = ""
@_attributes.each{|key,value|
attributes_str += " #{key}=\"#{value}\""
}
content = ""
@_children.each{|child|
content += child.to_s
}
content += @_content if @_content != nil
return "<#{@_name}#{attributes_str}>#{content}</#{@_name}>"
when Format::PRETTY
return _to_s_pretty
else
raise "Unsupport Format : #{format}"
end
end
|