File: child.rb

package info (click to toggle)
librexml-ruby 1.2.5-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 792 kB
  • ctags: 655
  • sloc: ruby: 3,778; xml: 1,609; java: 109; makefile: 43
file content (87 lines) | stat: -rw-r--r-- 1,904 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
require "rexml/node"

module REXML
	##
	# A Child object is something contained by a parent, and this class
	# contains methods to support that.  Most user code will not use this
	# class directly.
	class Child
		include Node
		attr_reader :parent		# The Parent of this object

		##
		# Constructor.  Any inheritors of this class should call super to make
		# sure this method is called.
		# @param parent if supplied, the parent of this child will be set to the
		# supplied value, and self will be added to the parent
		def initialize( parent = nil )
			@parent = nil
			parent << self unless parent.nil?
		end

		##
		# Replaces this object with another object.  Basically, calls
		# Parent.replace_child
		# @return self
		def replace_with( child )
			@parent.replace_child( self, child )
			self
		end

		##
		# Removes this child from the parent.
		# @return self
		def remove
			unless @parent.nil?
				@parent.delete self
			end
			self
		end

		def parent=( other )
			@parent.delete self if defined? @parent and @parent
			@parent = other
		end

		alias :next_sibling :next_sibling_node
		alias :previous_sibling :previous_sibling_node

		def next_sibling=( other )
		  parent.insert_after self, other
		end

		def previous_sibling=(other)
		  parent.insert_before self, other
		end

		##
		# @return the document this child belongs to, or nil if this child
		# belongs to no document
		def document
			return parent.document unless parent.nil?
			nil
		end

		##
		# This doesn't yet handle encodings
		def bytes
			encoding = document.encoding

			to_s
		end

		def Child.once(*ids)
			for id in ids
				module_eval <<-"end_eval"
					alias_method :__#{id.to_i}__, #{id.inspect}
					def #{id.id2name}(*args, &block)
						def self.#{id.id2name}(*args, &block)
							@__#{id.to_i}__
						end
						@__#{id.to_i}__ = __#{id.to_i}__(*args, &block)
					end
				end_eval
			end
		end
	end
end