xamplr 1.2.0
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/CHANGES.txt +13 -0
- data/LICENSE +3 -0
- data/README.rdoc +26 -0
- data/README.rdoc.orig +118 -0
- data/Rakefile +85 -0
- data/VERSION.yml +4 -0
- data/examples/random-people-shared-addresses/Makefile +16 -0
- data/examples/random-people-shared-addresses/batch-load-users.rb +83 -0
- data/examples/random-people-shared-addresses/find-mentions.rb +47 -0
- data/examples/random-people-shared-addresses/find-people-by-address.rb +104 -0
- data/examples/random-people-shared-addresses/optimise.rb +16 -0
- data/examples/random-people-shared-addresses/people.rb +35 -0
- data/examples/random-people-shared-addresses/query.rb +75 -0
- data/examples/random-people-shared-addresses/query2.rb +73 -0
- data/examples/random-people-shared-addresses/random-names.csv +10000 -0
- data/examples/random-people-shared-addresses/settings.rb +3 -0
- data/examples/random-people-shared-addresses/what-to-query-on.rb +82 -0
- data/examples/random-people-shared-addresses/xampl-gen.rb +36 -0
- data/examples/random-people-shared-addresses/xml/people.xml +14 -0
- data/examples/random-people/Makefile +16 -0
- data/examples/random-people/batch-load-users.rb +61 -0
- data/examples/random-people/optimise.rb +16 -0
- data/examples/random-people/people.rb +22 -0
- data/examples/random-people/query.rb +73 -0
- data/examples/random-people/query2.rb +73 -0
- data/examples/random-people/random-names.csv +10000 -0
- data/examples/random-people/rawtc.rb +91 -0
- data/examples/random-people/settings.rb +3 -0
- data/examples/random-people/what-to-query-on.rb +80 -0
- data/examples/random-people/xampl-gen.rb +36 -0
- data/examples/random-people/xml/people.xml +11 -0
- data/examples/read-testing/Makefile +10 -0
- data/examples/read-testing/load.rb +65 -0
- data/examples/read-testing/read.rb +51 -0
- data/examples/read-testing/rrr.rb +87 -0
- data/examples/read-testing/settings.rb +2 -0
- data/examples/read-testing/xampl-gen.rb +36 -0
- data/examples/read-testing/xml/text.xml +8 -0
- data/examples/tokyo-cabinet-experimental/expt-query.rb +42 -0
- data/examples/tokyo-cabinet-experimental/expt-query2.rb +42 -0
- data/examples/tokyo-cabinet-experimental/expt-query3.rb +41 -0
- data/examples/tokyo-cabinet-experimental/expt-reader.rb +32 -0
- data/examples/tokyo-cabinet-experimental/expt.rb +61 -0
- data/examples/tokyo-cabinet-experimental/xampl-gen.rb +36 -0
- data/examples/tokyo-cabinet-experimental/xml/tcx.xml +6 -0
- data/lib/xampl-generator.rb +3 -0
- data/lib/xampl.rb +3 -0
- data/lib/xamplr-generator.rb +10 -0
- data/lib/xamplr.rb +37 -0
- data/lib/xamplr/README-POSSIBLE-PROBLEMS +5 -0
- data/lib/xamplr/TODO +1 -0
- data/lib/xamplr/exceptions.rb +97 -0
- data/lib/xamplr/from-xml-orig.rb +350 -0
- data/lib/xamplr/from-xml.rb +439 -0
- data/lib/xamplr/gen-elements.xml +6230 -0
- data/lib/xamplr/gen.elements.xml +108 -0
- data/lib/xamplr/generate-elements.rb +15 -0
- data/lib/xamplr/generator.rb +5 -0
- data/lib/xamplr/graphml-out.rb +470 -0
- data/lib/xamplr/handwritten/example.rb +698 -0
- data/lib/xamplr/handwritten/hand-example.rb +533 -0
- data/lib/xamplr/handwritten/test-handwritten.rb +873 -0
- data/lib/xamplr/indexed-array.rb +115 -0
- data/lib/xamplr/mixins.rb +397 -0
- data/lib/xamplr/my.gen.elements.xml +461 -0
- data/lib/xamplr/notifications.rb +57 -0
- data/lib/xamplr/obsolete/fsdb.rb +62 -0
- data/lib/xamplr/persist-to-xml.rb +249 -0
- data/lib/xamplr/persistence.rb +522 -0
- data/lib/xamplr/persistence.rb.more_thread_safe +771 -0
- data/lib/xamplr/persistence.rb.partially_thread_safe +763 -0
- data/lib/xamplr/persister.rb +310 -0
- data/lib/xamplr/persisters/caches.rb +186 -0
- data/lib/xamplr/persisters/caching.rb +172 -0
- data/lib/xamplr/persisters/filesystem.rb +60 -0
- data/lib/xamplr/persisters/in-memory.rb +180 -0
- data/lib/xamplr/persisters/simple.rb +59 -0
- data/lib/xamplr/persisters/tokyo-cabinet.rb +641 -0
- data/lib/xamplr/simpleTemplate/danger.rx +4 -0
- data/lib/xamplr/simpleTemplate/obsolete/input-c.r4 +35 -0
- data/lib/xamplr/simpleTemplate/obsolete/play.r6.txt +12 -0
- data/lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt +20 -0
- data/lib/xamplr/simpleTemplate/obsolete/test001.r5 +8 -0
- data/lib/xamplr/simpleTemplate/obsolete/test002.r5 +13 -0
- data/lib/xamplr/simpleTemplate/obsolete/test003.r5 +37 -0
- data/lib/xamplr/simpleTemplate/old/r6.000.rb +122 -0
- data/lib/xamplr/simpleTemplate/old/r6.001.rb +145 -0
- data/lib/xamplr/simpleTemplate/play.r6 +12 -0
- data/lib/xamplr/simpleTemplate/play_more.r6 +20 -0
- data/lib/xamplr/simpleTemplate/play_noblanks.r6 +21 -0
- data/lib/xamplr/simpleTemplate/playq.r6 +16 -0
- data/lib/xamplr/simpleTemplate/r6.rb +87 -0
- data/lib/xamplr/simpleTemplate/simple-template.rb +75 -0
- data/lib/xamplr/templates/child.template +47 -0
- data/lib/xamplr/templates/child_indexed.template +89 -0
- data/lib/xamplr/templates/child_modules.template +5 -0
- data/lib/xamplr/templates/element_classes.template +11 -0
- data/lib/xamplr/templates/element_data.template +282 -0
- data/lib/xamplr/templates/element_empty.template +285 -0
- data/lib/xamplr/templates/element_mixed.template +277 -0
- data/lib/xamplr/templates/element_simple.template +276 -0
- data/lib/xamplr/templates/package.template +26 -0
- data/lib/xamplr/test-support/Makefile +47 -0
- data/lib/xamplr/test-support/bench-cache.rb +80 -0
- data/lib/xamplr/test-support/bench-script.rb +21 -0
- data/lib/xamplr/test-support/bench.rb +116 -0
- data/lib/xamplr/test-support/bench2.rb +132 -0
- data/lib/xamplr/test-support/test-cache.rb +147 -0
- data/lib/xamplr/test-support/test-data/binding.xml +7 -0
- data/lib/xamplr/test-support/test-data/example.xml +14 -0
- data/lib/xamplr/test-support/test-data/internationalization-utf8.txt +1 -0
- data/lib/xamplr/test-support/test-data/labels.xml +37 -0
- data/lib/xamplr/test-support/test-data/labels001.xml +38 -0
- data/lib/xamplr/test-support/test-deep-change.rb +135 -0
- data/lib/xamplr/test-support/test-elements.rb +109 -0
- data/lib/xamplr/test-support/test-indexed-array.rb +169 -0
- data/lib/xamplr/test-support/test-misc.rb +73 -0
- data/lib/xamplr/test-support/test-names.rb +67 -0
- data/lib/xamplr/test-support/test-rollback.rb +106 -0
- data/lib/xamplr/test-support/test.rb +1504 -0
- data/lib/xamplr/to-ruby.rb +220 -0
- data/lib/xamplr/to-xml.rb +158 -0
- data/lib/xamplr/version.rb +67 -0
- data/lib/xamplr/visitor.rb +140 -0
- data/lib/xamplr/visitors.rb +573 -0
- data/lib/xamplr/xampl-generator.rb +533 -0
- data/lib/xamplr/xampl-hand-generated.rb +1535 -0
- data/lib/xamplr/xampl-module.rb +36 -0
- data/lib/xamplr/xampl-object-internals.rb +6 -0
- data/lib/xamplr/xampl-object.rb +202 -0
- data/lib/xamplr/xampl-persisted-object.rb +122 -0
- data/lib/xamplr/xml-text.rb +117 -0
- data/lib/xamplr/xml/document.xml +7 -0
- data/lib/xamplr/xml/elements.xml +101 -0
- data/lib/xamplr/xml/elements000.xml +73 -0
- data/lib/xamplr/xml/example.xml +23 -0
- data/lib/xamplr/xml/options.xml +12 -0
- data/lib/xamplr/xml/uche.xml +38 -0
- data/lib/xamplr/yEd-sample.graphml +300 -0
- data/test/test_helper.rb +10 -0
- data/test/xamplr_test.rb +7 -0
- metadata +245 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
class IndexedArray
|
|
2
|
+
include Enumerable
|
|
3
|
+
|
|
4
|
+
def initialize(parent=nil)
|
|
5
|
+
@map = {}
|
|
6
|
+
@store = []
|
|
7
|
+
@parent = nil
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def [](index)
|
|
11
|
+
if String === index or Symbol === index then
|
|
12
|
+
pos = @map[index]
|
|
13
|
+
if pos then
|
|
14
|
+
return @store[pos]
|
|
15
|
+
else
|
|
16
|
+
return nil
|
|
17
|
+
end
|
|
18
|
+
else
|
|
19
|
+
return @store[index]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
alias slice []
|
|
24
|
+
|
|
25
|
+
def []=(index, value)
|
|
26
|
+
if String === index or Symbol === index then
|
|
27
|
+
pos = @map[index]
|
|
28
|
+
unless pos then
|
|
29
|
+
pos = @store.size
|
|
30
|
+
@map[index] = pos
|
|
31
|
+
end
|
|
32
|
+
return @store[pos] = value
|
|
33
|
+
else
|
|
34
|
+
raise XamplException.new(:non_string_or_symbol_key)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def clear
|
|
39
|
+
@map = {}
|
|
40
|
+
@store = []
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def keys
|
|
44
|
+
return @map.keys
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def delete(index)
|
|
48
|
+
if String === index or Symbol === index then
|
|
49
|
+
pos = @map.delete(index)
|
|
50
|
+
if pos then
|
|
51
|
+
@map.each{ | k, v| @map[k] = (v - 1) if pos < v }
|
|
52
|
+
return @store.delete_at(pos)
|
|
53
|
+
end
|
|
54
|
+
else
|
|
55
|
+
key = @map.index(index)
|
|
56
|
+
pos = @map.delete(key) if key
|
|
57
|
+
if pos then
|
|
58
|
+
@map.each{ | k, v | @map[k] = (v - 1) if pos < v }
|
|
59
|
+
return @store.delete_at(pos)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
return nil
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
alias delete_at delete
|
|
66
|
+
|
|
67
|
+
def size
|
|
68
|
+
@store.size
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
alias length size
|
|
72
|
+
|
|
73
|
+
def first
|
|
74
|
+
@store.first
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def last
|
|
78
|
+
@store.last
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def each
|
|
82
|
+
@store.each do |obj |
|
|
83
|
+
yield(obj)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def each_index
|
|
88
|
+
@store.each_index { | i | yield(i) }
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def each_key_value
|
|
92
|
+
@map.each { | k, v | yield(k, @store[v]) }
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def sort
|
|
96
|
+
@store.sort { | a, b | yield(a, b) }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def sort!
|
|
100
|
+
arr = []
|
|
101
|
+
@map.each do |index, pos|
|
|
102
|
+
arr << [index, @store[pos]]
|
|
103
|
+
end
|
|
104
|
+
arr.sort! do |a, b|
|
|
105
|
+
yield(a[1], b[1])
|
|
106
|
+
end
|
|
107
|
+
@map = {}
|
|
108
|
+
@store = []
|
|
109
|
+
arr.each do |pair|
|
|
110
|
+
@map[pair[0]] = @store.size
|
|
111
|
+
@store << pair[1]
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
module Xampl
|
|
4
|
+
|
|
5
|
+
def Xampl.make(klass, pid=nil)
|
|
6
|
+
xampl = klass.new
|
|
7
|
+
xampl.set_the_index(pid) if nil != pid
|
|
8
|
+
yield(xampl) if block_given?
|
|
9
|
+
return xampl
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module XamplWithoutContent
|
|
13
|
+
def has_mixed_content
|
|
14
|
+
false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def children
|
|
18
|
+
return []
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def before_visit_by_element_kind(visitor)
|
|
22
|
+
visitor.before_visit_without_content(self)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def visit_by_element_kind(visitor)
|
|
26
|
+
visitor.visit_without_content(self)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def after_visit_by_element_kind(visitor)
|
|
30
|
+
visitor.after_visit_without_content(self)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_to_xml(out="", rules=nil)
|
|
34
|
+
accessed
|
|
35
|
+
rules = XMLPrinter.new(out) if nil == rules
|
|
36
|
+
|
|
37
|
+
rules.attribute(self)
|
|
38
|
+
rules.start_root_element(tag, ns, true)
|
|
39
|
+
|
|
40
|
+
return rules.done
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_to_xml_internal(rules)
|
|
44
|
+
if rules.persisting && self.persist_required then
|
|
45
|
+
rules.persist_attribute(self)
|
|
46
|
+
rules.persisted_element(tag, ns)
|
|
47
|
+
return
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
rules.attribute(self)
|
|
51
|
+
rules.start_element(tag, ns, true)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def <<(other)
|
|
55
|
+
if (other.respond_to?("append_to"))
|
|
56
|
+
other.append_to(self)
|
|
57
|
+
else
|
|
58
|
+
raise XamplException.new("no content allowed")
|
|
59
|
+
end
|
|
60
|
+
return self
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
module XamplWithSimpleContent
|
|
65
|
+
def initialize
|
|
66
|
+
super
|
|
67
|
+
@_content = nil unless defined? @_content
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def has_mixed_content
|
|
71
|
+
false
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def before_visit_by_element_kind(visitor)
|
|
75
|
+
visitor.before_visit_simple_content(self)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def visit_by_element_kind(visitor)
|
|
79
|
+
visitor.visit_simple_content(self)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def after_visit_by_element_kind(visitor)
|
|
83
|
+
visitor.after_visit_simple_content(self)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def _content
|
|
87
|
+
accessed
|
|
88
|
+
@_content
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def _content=(v)
|
|
92
|
+
accessed
|
|
93
|
+
v = v.to_s if (v.kind_of? Symbol) and !Xampl.xampl_extends_symbols
|
|
94
|
+
v.extend(XamplExtensionsToRubyObjects) unless v.kind_of? Symbol
|
|
95
|
+
@_content = v
|
|
96
|
+
changed
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
alias content _content
|
|
100
|
+
alias content= _content=
|
|
101
|
+
|
|
102
|
+
def add_content(new_content, tokenise=false)
|
|
103
|
+
return if nil == new_content
|
|
104
|
+
accessed
|
|
105
|
+
|
|
106
|
+
if (nil == @_content) then
|
|
107
|
+
@_content = new_content.to_s
|
|
108
|
+
@_content.extend(XamplExtensionsToRubyObjects)
|
|
109
|
+
else
|
|
110
|
+
@_content << new_content.to_s
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
FromXML.tokenise_string(@_content, false) if tokenise
|
|
114
|
+
@_content = nil if 0 == @_content.size
|
|
115
|
+
|
|
116
|
+
changed
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def children
|
|
120
|
+
return []
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def test_to_xml(out="", rules=nil)
|
|
124
|
+
accessed
|
|
125
|
+
rules = XMLPrinter.new(out) if nil == rules
|
|
126
|
+
|
|
127
|
+
rules.attribute(self)
|
|
128
|
+
if (nil == self._content)
|
|
129
|
+
rules.start_root_element(tag, ns, true)
|
|
130
|
+
rules.end_root_element(tag, ns, true)
|
|
131
|
+
else
|
|
132
|
+
rules.start_root_element(tag, ns, false)
|
|
133
|
+
rules._content(content)
|
|
134
|
+
rules.end_root_element(tag, ns, false)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
return rules.done
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def test_to_xml_internal(rules)
|
|
141
|
+
if rules.persisting && self.persist_required then
|
|
142
|
+
rules.persist_attribute(self)
|
|
143
|
+
rules.persisted_element(tag, ns)
|
|
144
|
+
return
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
rules.attribute(self)
|
|
148
|
+
if (nil == self._content)
|
|
149
|
+
rules.start_element(tag, ns, true)
|
|
150
|
+
rules._content(content)
|
|
151
|
+
rules.end_element(tag, ns, true)
|
|
152
|
+
else
|
|
153
|
+
rules.start_element(tag, ns, false)
|
|
154
|
+
rules._content(content)
|
|
155
|
+
rules.end_element(tag, ns, false)
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def <<(other)
|
|
160
|
+
if (other.respond_to?("append_to"))
|
|
161
|
+
raise XamplException.new("simple content only")
|
|
162
|
+
else
|
|
163
|
+
add_content(other)
|
|
164
|
+
end
|
|
165
|
+
return self
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
module XamplWithDataContent
|
|
170
|
+
|
|
171
|
+
def initialize
|
|
172
|
+
super
|
|
173
|
+
init_data_content
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def has_mixed_content
|
|
177
|
+
false
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def before_visit_by_element_kind(visitor)
|
|
181
|
+
visitor.before_visit_data_content(self)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def visit_by_element_kind(visitor)
|
|
185
|
+
visitor.visit_data_content(self)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def after_visit_by_element_kind(visitor)
|
|
189
|
+
visitor.after_visit_data_content(self)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def init_data_content
|
|
193
|
+
@_content = nil if not defined? @_content
|
|
194
|
+
@children = [] if not defined? @children
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def children
|
|
198
|
+
accessed
|
|
199
|
+
return @children
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def _content
|
|
203
|
+
accessed
|
|
204
|
+
@_content
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def _content=(v)
|
|
208
|
+
accessed
|
|
209
|
+
v = v.to_s if (v.kind_of? Symbol) and !Xampl.xampl_extends_symbols
|
|
210
|
+
v.extend(XamplExtensionsToRubyObjects) unless v.kind_of? Symbol
|
|
211
|
+
@_content = v
|
|
212
|
+
changed
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
alias content _content
|
|
216
|
+
alias content= _content=
|
|
217
|
+
|
|
218
|
+
def add_content(new_content, tokenise=false)
|
|
219
|
+
return if nil == new_content
|
|
220
|
+
accessed
|
|
221
|
+
|
|
222
|
+
if (nil == @_content) then
|
|
223
|
+
@_content = new_content.to_s
|
|
224
|
+
@_content.extend(XamplExtensionsToRubyObjects)
|
|
225
|
+
else
|
|
226
|
+
@_content << new_content.to_s
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
FromXML.tokenise_string(@_content, false) if tokenise
|
|
230
|
+
@_content = nil if 0 == @_content.size
|
|
231
|
+
|
|
232
|
+
changed
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def test_to_xml(out="", rules=nil)
|
|
236
|
+
accessed
|
|
237
|
+
rules = XMLPrinter.new(out) if nil == rules
|
|
238
|
+
|
|
239
|
+
rules.attribute(self)
|
|
240
|
+
if (0 == children.length) && (nil == content)
|
|
241
|
+
rules.start_root_element(tag, ns, true)
|
|
242
|
+
rules.end_root_element(tag, ns, true)
|
|
243
|
+
else
|
|
244
|
+
rules.start_root_element(tag, ns, false)
|
|
245
|
+
rules._content(content)
|
|
246
|
+
children.each{ | child |
|
|
247
|
+
child.test_to_xml_internal(rules)
|
|
248
|
+
}
|
|
249
|
+
rules.end_root_element(tag, ns, false)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
return rules.done
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def test_to_xml_internal(rules)
|
|
256
|
+
if rules.persisting && self.persist_required then
|
|
257
|
+
rules.persist_attribute(self)
|
|
258
|
+
rules.persisted_element(tag, ns)
|
|
259
|
+
return
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
rules.attribute(self)
|
|
263
|
+
if (self.persist_required && self.load_needed) || ((0 == children.length) && (nil == content))
|
|
264
|
+
rules.start_element(tag, ns, true)
|
|
265
|
+
rules.end_element(tag, ns, true)
|
|
266
|
+
else
|
|
267
|
+
rules.start_element(tag, ns, false)
|
|
268
|
+
rules._content(content)
|
|
269
|
+
children.each{ | child |
|
|
270
|
+
child.test_to_xml_internal(rules)
|
|
271
|
+
}
|
|
272
|
+
rules.end_element(tag, ns, false)
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def <<(other)
|
|
277
|
+
if (other.respond_to?("append_to"))
|
|
278
|
+
other.append_to(self)
|
|
279
|
+
else
|
|
280
|
+
add_content(other)
|
|
281
|
+
end
|
|
282
|
+
return self
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
module XamplWithMixedContent
|
|
287
|
+
def initialize
|
|
288
|
+
super
|
|
289
|
+
init_mixed_content
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def init_mixed_content
|
|
293
|
+
@children = [] if not defined? @children
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def has_mixed_content
|
|
297
|
+
true
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def before_visit_by_element_kind(visitor)
|
|
301
|
+
visitor.before_visit_mixed_content(self)
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def visit_by_element_kind(visitor)
|
|
305
|
+
visitor.visit_mixed_content(self)
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def after_visit_by_element_kind(visitor)
|
|
309
|
+
visitor.after_visit_mixed_content(self)
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def children
|
|
313
|
+
accessed
|
|
314
|
+
return @children
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
def add_content(new_content, tokenise=false)
|
|
318
|
+
return if nil == new_content
|
|
319
|
+
accessed
|
|
320
|
+
|
|
321
|
+
new_content = new_content.to_s
|
|
322
|
+
|
|
323
|
+
last_child = @children.last
|
|
324
|
+
if last_child and (last_child.kind_of? String) then
|
|
325
|
+
last_child << new_content
|
|
326
|
+
FromXML.tokenise_string(last_child, false) if tokenise
|
|
327
|
+
else
|
|
328
|
+
FromXML.tokenise_string(new_content, false) if tokenise
|
|
329
|
+
new_content.extend(XamplExtensionsToRubyObjects)
|
|
330
|
+
@children << new_content unless 0 == new_content.size
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
changed
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
def test_to_xml(out="", rules=nil)
|
|
337
|
+
accessed
|
|
338
|
+
rules = XMLPrinter.new(out) if nil == rules
|
|
339
|
+
|
|
340
|
+
rules.attribute(self)
|
|
341
|
+
if (0 == children.length)
|
|
342
|
+
rules.start_root_element(tag, ns, true)
|
|
343
|
+
rules.end_root_element(tag, ns, true)
|
|
344
|
+
else
|
|
345
|
+
rules.start_root_element(tag, ns, false)
|
|
346
|
+
rules.now_as_mixed
|
|
347
|
+
children.each{ | child |
|
|
348
|
+
if (child.respond_to? "test_to_xml_internal")
|
|
349
|
+
child.test_to_xml_internal(rules)
|
|
350
|
+
else
|
|
351
|
+
rules._content(child)
|
|
352
|
+
end
|
|
353
|
+
}
|
|
354
|
+
rules.now_as_before
|
|
355
|
+
rules.end_root_element(tag, ns, false)
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
return rules.done
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
def test_to_xml_internal(rules)
|
|
362
|
+
if rules.persisting && self.persist_required then
|
|
363
|
+
rules.persist_attribute(self)
|
|
364
|
+
rules.persisted_element(tag, ns)
|
|
365
|
+
return
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
rules.attribute(self)
|
|
369
|
+
if (self.persist_required && self.load_needed) || (0 == children.length)
|
|
370
|
+
rules.start_element(tag, ns, true)
|
|
371
|
+
rules.end_element(tag, ns, true)
|
|
372
|
+
else
|
|
373
|
+
rules.start_element(tag, ns, false)
|
|
374
|
+
rules.now_as_mixed
|
|
375
|
+
children.each{ | child |
|
|
376
|
+
if (child.respond_to? "test_to_xml_internal")
|
|
377
|
+
child.test_to_xml_internal(rules)
|
|
378
|
+
else
|
|
379
|
+
rules._content(child)
|
|
380
|
+
end
|
|
381
|
+
}
|
|
382
|
+
rules.now_as_before
|
|
383
|
+
rules.end_element(tag, ns, false)
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
def <<(other)
|
|
388
|
+
if (other.respond_to?("append_to"))
|
|
389
|
+
other.append_to(self)
|
|
390
|
+
else
|
|
391
|
+
add_content(other)
|
|
392
|
+
end
|
|
393
|
+
return self
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|