Class: SectionX
- Inherits:
-
Object
show all
- Defined in:
- lib/sectionx.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(x = nil, nested: false, debug: false) ⇒ SectionX
Returns a new instance of SectionX.
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/sectionx.rb', line 30
def initialize(x=nil, nested: false, debug: false)
@nested, @debug = nested, debug
puts ('initialize() x: ' + x.inspect).debug if @debug
@doc = if x.is_a? String then
buffer, _ = RXFHelper.read x
Rexle.new buffer
elsif x.is_a? Rexle::Element then x
end
if @doc then
puts ('@doc.root: ' + @doc.root.xml.inspect).debug if @debug
@attributes, @summary, @sections = parse_root_node @doc.root
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args) ⇒ Object
101
102
103
|
# File 'lib/sectionx.rb', line 101
def method_missing(method_name, *args)
self.text(method_name)
end
|
Instance Attribute Details
#attributes ⇒ Object
Returns the value of attribute attributes.
28
29
30
|
# File 'lib/sectionx.rb', line 28
def attributes
@attributes
end
|
#sections ⇒ Object
Returns the value of attribute sections.
28
29
30
|
# File 'lib/sectionx.rb', line 28
def sections
@sections
end
|
#summary ⇒ Object
Returns the value of attribute summary.
28
29
30
|
# File 'lib/sectionx.rb', line 28
def summary
@summary
end
|
Instance Method Details
#element(s) ⇒ Object
47
48
49
|
# File 'lib/sectionx.rb', line 47
def element(s)
@doc.root.element(s)
end
|
#fetch(rxpath) ⇒ Object
51
52
53
54
|
# File 'lib/sectionx.rb', line 51
def fetch(rxpath)
list = rxpath.split('/').map {|x| x.gsub(/\s+/,'_').downcase.to_sym}
find_section(list)
end
|
#import(raw_s) ⇒ Object
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
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/sectionx.rb', line 57
def import(raw_s)
raw_buffer, type = RXFHelper.read(raw_s)
lines = raw_buffer.lines
= lines.shift
id = [/id=["']([^"']+)/,1] || 'sectionx'
body, summary = lines.join.strip.split(/^----*$/).reverse
nested = indent_heading("# summary\n%s\n# begin\n%s" % [summary,\
body.strip])
a = LineTree.new(nested).to_a
raw_summary = a.shift
raw_summary.shift
section1 = a.shift section1[0] = nil
xml = RexleBuilder.new
a2 = xml.send(id) do
xml.summary do
build_rows xml, raw_summary
xml.recordx_type 'sectionx'
end
xml.sections do
build_section xml, section1
a.each {|raw_rows| build_section xml, raw_rows }
end
end
@doc = Rexle.new a2
@attributes, @summary, @sections = parse_root_node(@doc.root)
self
end
|
#new_section(raw_title) ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/sectionx.rb', line 105
def new_section(raw_title)
doc = Rexle.new("<section title='#{raw_title}'><summary/>" +
"<sections/></section>")
@doc.root.element('sections').add doc.root
title = raw_title.gsub(/\s+/,'_').downcase.to_sym
@sections[title] = SectionX.new \
@doc.root.element('sections').elements.last, debug: @debug
define_singleton_method(title) { self.sections[title] }
end
|
#recordx_type ⇒ Object
118
119
120
|
# File 'lib/sectionx.rb', line 118
def recordx_type()
@summary[:recordx_type]
end
|
#save(filepath) ⇒ Object
122
123
124
|
# File 'lib/sectionx.rb', line 122
def save(filepath)
File.write filepath, @doc.xml(pretty: true)
end
|
#text(s) ⇒ Object
126
127
128
|
# File 'lib/sectionx.rb', line 126
def text(s)
@doc.root.element("//%s/text()" % s.to_s).unescape
end
|
#to_xml(options = {}) ⇒ Object
130
131
132
|
# File 'lib/sectionx.rb', line 130
def to_xml(options={})
@doc.xml(options)
end
|
#update(id = nil, h = {}) ⇒ Object
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/sectionx.rb', line 134
def update(id=nil, h={})
puts 'inside update h: ' + h.inspect if @debug
summary = @doc.root.element('summary')
name = h.keys.first.to_s
puts 'xpath: ' + name.inspect if @debug
e = summary.element(name)
puts 'e: ' + e.inspect if @debug
if e then
e.text = h.values.first
else
summary.add Rexle::Element.new(name).add_text(h.values.first)
end
puts '@doc: ' + @doc.xml if @debug
end
|
#xpath(x) ⇒ Object
152
153
154
|
# File 'lib/sectionx.rb', line 152
def xpath(x)
@doc.root.xpath(x)
end
|
#xslt=(value) ⇒ Object
156
157
158
159
160
|
# File 'lib/sectionx.rb', line 156
def xslt=(value)
self.summary.merge!({xslt: value})
@xslt = value
end
|