hutch-xamplr 1.0.5 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/VERSION.yml +2 -2
- data/examples/random-people-shared-addresses/Makefile +2 -2
- data/examples/random-people-shared-addresses/batch-load-users.rb +2 -5
- data/examples/random-people-shared-addresses/find-mentions.rb +1 -4
- data/examples/random-people-shared-addresses/find-people-by-address.rb +1 -4
- data/examples/random-people-shared-addresses/optimise.rb +1 -4
- data/examples/random-people-shared-addresses/people.rb +0 -15
- data/examples/random-people-shared-addresses/query.rb +1 -4
- data/examples/random-people-shared-addresses/query2.rb +1 -4
- data/examples/random-people-shared-addresses/results.write.BASELINE +298 -0
- data/examples/random-people-shared-addresses/results.write.NEW_ATTR_ENCODING +294 -0
- data/examples/random-people-shared-addresses/settings.rb +3 -0
- data/examples/random-people/batch-load-users.rb +1 -4
- data/examples/random-people/optimise.rb +1 -4
- data/examples/random-people/people.rb +0 -3
- data/examples/random-people/query.rb +1 -5
- data/examples/random-people/query2.rb +1 -4
- data/examples/random-people/settings.rb +3 -0
- data/examples/random-people/what-to-query-on.rb +1 -3
- 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/results.read.BASELINE +6 -0
- data/examples/read-testing/results.read.FAST +5 -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/lib/xamplr.rb +10 -1
- data/lib/xamplr/exceptions.rb +97 -0
- data/lib/xamplr/from-xml-orig.rb +350 -0
- data/lib/xamplr/from-xml.rb +272 -183
- data/lib/xamplr/handwritten/example.rb +0 -58
- data/lib/xamplr/handwritten/hand-example.rb +0 -27
- data/lib/xamplr/handwritten/test-handwritten.rb +0 -37
- data/lib/xamplr/mixins.rb +10 -48
- data/lib/xamplr/persist-to-xml.rb +249 -0
- data/lib/xamplr/persistence.rb +44 -412
- data/lib/xamplr/persistence.rb.more_thread_safe +0 -13
- data/lib/xamplr/persistence.rb.partially_thread_safe +0 -13
- data/lib/xamplr/persister.rb +298 -0
- data/lib/xamplr/{persister → persisters}/caches.rb +0 -0
- data/lib/xamplr/{persister → persisters}/caching.rb +1 -1
- data/lib/xamplr/{persister → persisters}/filesystem.rb +4 -5
- data/lib/xamplr/{persister → persisters}/in-memory.rb +1 -1
- data/lib/xamplr/{persister → persisters}/simple.rb +0 -0
- data/lib/xamplr/{persister → persisters}/tokyo-cabinet.rb +53 -15
- data/lib/xamplr/simpleTemplate/{input-c.r4 → obsolete/input-c.r4} +0 -0
- data/lib/xamplr/simpleTemplate/{play.r6.txt → obsolete/play.r6.txt} +0 -0
- data/lib/xamplr/simpleTemplate/{play_more.r6.txt → obsolete/play_more.r6.txt} +0 -0
- data/lib/xamplr/simpleTemplate/{test001.r5 → obsolete/test001.r5} +0 -0
- data/lib/xamplr/simpleTemplate/{test002.r5 → obsolete/test002.r5} +0 -0
- data/lib/xamplr/simpleTemplate/{test003.r5 → obsolete/test003.r5} +0 -0
- data/lib/xamplr/templates/child_indexed.template +1 -1
- data/lib/xamplr/templates/element_classes.template +1 -1
- data/lib/xamplr/templates/element_data.template +0 -39
- data/lib/xamplr/templates/element_empty.template +0 -40
- data/lib/xamplr/templates/element_mixed.template +0 -41
- data/lib/xamplr/templates/element_simple.template +0 -40
- data/lib/xamplr/test-support/bench.rb +6 -26
- data/lib/xamplr/test-support/test.rb +1 -89
- data/lib/xamplr/visitor.rb +0 -778
- data/lib/xamplr/visitors.rb +573 -0
- data/lib/xamplr/xampl-generator.rb +1 -1
- data/lib/xamplr/xampl-hand-generated.rb +0 -85
- data/lib/xamplr/xampl-module.rb +36 -0
- data/lib/xamplr/xampl-object-internals.rb +6 -0
- data/lib/xamplr/xampl-object.rb +10 -341
- data/lib/xamplr/xampl-persisted-object.rb +122 -0
- data/lib/xamplr/xml-text.rb +117 -0
- metadata +53 -18
- data/lib/xamplr/persister/subversion.rb +0 -61
- data/lib/xamplr/rac.sh +0 -6
- data/lib/xamplr/rac_gen.sh +0 -1
- data/lib/xamplr/templates/child_indexed.template.000 +0 -87
@@ -479,21 +479,6 @@ module XamplGenerator
|
|
479
479
|
]
|
480
480
|
include ElementAsChild
|
481
481
|
|
482
|
-
@@to_yaml_properties = [ "@pid" ]
|
483
|
-
@@to_yaml_properties_all = [
|
484
|
-
"@pid",
|
485
|
-
"@children",
|
486
|
-
"@_content"
|
487
|
-
]
|
488
|
-
|
489
|
-
def to_yaml_properties
|
490
|
-
if is_yaml_root(self) then
|
491
|
-
return @@to_yaml_properties_all
|
492
|
-
else
|
493
|
-
return @@to_yaml_properties
|
494
|
-
end
|
495
|
-
end
|
496
|
-
|
497
482
|
def Elements.lookup(pid)
|
498
483
|
Xampl.lookup(Elements, pid)
|
499
484
|
end
|
@@ -635,26 +620,6 @@ module XamplGenerator
|
|
635
620
|
include ChildElementAsChild
|
636
621
|
include AttributeAsChild
|
637
622
|
|
638
|
-
@@to_yaml_properties = [
|
639
|
-
"@has_content",
|
640
|
-
"@class_name",
|
641
|
-
"@attribute_name",
|
642
|
-
"@nstag",
|
643
|
-
"@empty",
|
644
|
-
"@indexed_by_attr",
|
645
|
-
"@persisted",
|
646
|
-
"@name",
|
647
|
-
"@kind",
|
648
|
-
"@namespace",
|
649
|
-
"@package",
|
650
|
-
"@children",
|
651
|
-
"@_content"
|
652
|
-
]
|
653
|
-
|
654
|
-
def to_yaml_properties
|
655
|
-
@@to_yaml_properties
|
656
|
-
end
|
657
|
-
|
658
623
|
def has_content
|
659
624
|
accessed
|
660
625
|
@has_content
|
@@ -911,19 +876,6 @@ module XamplGenerator
|
|
911
876
|
[ :@package, "package" ],
|
912
877
|
]
|
913
878
|
|
914
|
-
@@to_yaml_properties = [
|
915
|
-
"@element_name",
|
916
|
-
"@name",
|
917
|
-
"@namespace",
|
918
|
-
"@index_class",
|
919
|
-
"@index",
|
920
|
-
"@package",
|
921
|
-
]
|
922
|
-
|
923
|
-
def to_yaml_properties
|
924
|
-
@@to_yaml_properties
|
925
|
-
end
|
926
|
-
|
927
879
|
def element_name
|
928
880
|
accessed
|
929
881
|
@element_name
|
@@ -1108,15 +1060,6 @@ module XamplGenerator
|
|
1108
1060
|
[ :@name, "name" ],
|
1109
1061
|
]
|
1110
1062
|
|
1111
|
-
@@to_yaml_properties = [
|
1112
|
-
"@namespace",
|
1113
|
-
"@name",
|
1114
|
-
]
|
1115
|
-
|
1116
|
-
def to_yaml_properties
|
1117
|
-
@@to_yaml_properties
|
1118
|
-
end
|
1119
|
-
|
1120
1063
|
def namespace
|
1121
1064
|
accessed
|
1122
1065
|
@namespace
|
@@ -1249,15 +1192,6 @@ module XamplGenerator
|
|
1249
1192
|
include IndexAttributeAsChild
|
1250
1193
|
include ResolveAsChild
|
1251
1194
|
|
1252
|
-
@@to_yaml_properties = [
|
1253
|
-
"@children",
|
1254
|
-
"@_content"
|
1255
|
-
]
|
1256
|
-
|
1257
|
-
def to_yaml_properties
|
1258
|
-
@@to_yaml_properties
|
1259
|
-
end
|
1260
|
-
|
1261
1195
|
def initialize
|
1262
1196
|
super
|
1263
1197
|
|
@@ -1353,15 +1287,6 @@ module XamplGenerator
|
|
1353
1287
|
[ :@persisted, "persisted" ],
|
1354
1288
|
]
|
1355
1289
|
|
1356
|
-
@@to_yaml_properties = [
|
1357
|
-
"@name",
|
1358
|
-
"@persisted",
|
1359
|
-
]
|
1360
|
-
|
1361
|
-
def to_yaml_properties
|
1362
|
-
@@to_yaml_properties
|
1363
|
-
end
|
1364
|
-
|
1365
1290
|
def name
|
1366
1291
|
accessed
|
1367
1292
|
@name
|
@@ -1495,16 +1420,6 @@ module XamplGenerator
|
|
1495
1420
|
[ :@preferred_prefix, "preferred_prefix" ],
|
1496
1421
|
]
|
1497
1422
|
|
1498
|
-
@@to_yaml_properties = [
|
1499
|
-
"@namespace",
|
1500
|
-
"@pkg",
|
1501
|
-
"@preferred_prefix",
|
1502
|
-
]
|
1503
|
-
|
1504
|
-
def to_yaml_properties
|
1505
|
-
@@to_yaml_properties
|
1506
|
-
end
|
1507
|
-
|
1508
1423
|
def namespace
|
1509
1424
|
accessed
|
1510
1425
|
@namespace
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
require "xamplr/persister"
|
3
|
+
|
4
|
+
|
5
|
+
module Xampl
|
6
|
+
|
7
|
+
@@xampl_extends_symbols = false
|
8
|
+
|
9
|
+
def Xampl.xampl_extends_symbols
|
10
|
+
@@xampl_extends_symbols
|
11
|
+
end
|
12
|
+
|
13
|
+
def Xampl.xampl_extends_symbols=(v)
|
14
|
+
@@xampl_extends_symbols = v
|
15
|
+
|
16
|
+
if @@xampl_extends_symbols then
|
17
|
+
Symbol.module_eval("include XamplExtensionsToRubyObjects")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class XamplLiteralRubyObject
|
22
|
+
def initialize(thing)
|
23
|
+
@thing = thing
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_xml(out="")
|
27
|
+
out << @thing.to_s
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module XamplExtensionsToRubyObjects
|
32
|
+
def to_xml(out="")
|
33
|
+
out << self.to_s
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/xamplr/xampl-object.rb
CHANGED
@@ -1,14 +1,9 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
|
3
2
|
module Xampl
|
4
3
|
|
5
|
-
module InvalidXampl
|
6
|
-
end
|
7
|
-
|
8
4
|
module XamplObject
|
9
5
|
attr_accessor :is_changed, :parents
|
10
6
|
|
11
|
-
@@yaml_root = nil
|
12
7
|
@@preferred_ns_prefix = { "http://xampl.com/" => "xampl",
|
13
8
|
"http://xampl.com/generator" => "xampl-gen",
|
14
9
|
"http://www.w3.org/XML/1998/namespace" => "xml" }
|
@@ -76,8 +71,8 @@ module Xampl
|
|
76
71
|
def init_attributes(attr_name, attr_namespace, attr_value)
|
77
72
|
return unless attr_name
|
78
73
|
|
79
|
-
attr_name.each_index
|
80
|
-
self.attributes.each
|
74
|
+
attr_name.each_index do |i|
|
75
|
+
self.attributes.each do |attr_spec|
|
81
76
|
if (2 == attr_spec.size) then
|
82
77
|
if (attr_spec[1] == attr_name[i]) then
|
83
78
|
self.instance_variable_set(attr_spec[0], attr_value[i])
|
@@ -87,8 +82,8 @@ module Xampl
|
|
87
82
|
self.instance_variable_set(attr_spec[0], attr_value[i])
|
88
83
|
end
|
89
84
|
end
|
90
|
-
|
91
|
-
|
85
|
+
end
|
86
|
+
end
|
92
87
|
end
|
93
88
|
|
94
89
|
def compare_xampl(other)
|
@@ -96,14 +91,14 @@ module Xampl
|
|
96
91
|
other.accessed if other
|
97
92
|
return false unless self.class == other.class
|
98
93
|
return false unless self.children.size == other.children.size
|
99
|
-
self.children.zip(other.children).each
|
94
|
+
self.children.zip(other.children).each do |c1, c2|
|
100
95
|
return false unless c1.class == c2.class
|
101
96
|
if c1.kind_of? String then
|
102
97
|
return false unless c1 == c2
|
103
98
|
else
|
104
99
|
return false unless c1.compare_xampl(c2)
|
105
100
|
end
|
106
|
-
|
101
|
+
end
|
107
102
|
if (defined? self._content) and (defined? other._content) then
|
108
103
|
return false unless self._content == other._content
|
109
104
|
else
|
@@ -117,14 +112,14 @@ module Xampl
|
|
117
112
|
other.accessed if other
|
118
113
|
return false unless self.class == other.class
|
119
114
|
return false unless self.children.size == other.children.size
|
120
|
-
self.children.zip(other.children).each
|
115
|
+
self.children.zip(other.children).each do |c1, c2|
|
121
116
|
return false unless c1.class == c2.class
|
122
117
|
if c1.kind_of? String then
|
123
118
|
return false unless c1 == c2
|
124
119
|
else
|
125
120
|
return false unless c1 === c2
|
126
121
|
end
|
127
|
-
|
122
|
+
end
|
128
123
|
if (defined? self._content) and (defined? other._content) then
|
129
124
|
return false unless self._content == other._content
|
130
125
|
else
|
@@ -140,9 +135,6 @@ module Xampl
|
|
140
135
|
|
141
136
|
module XamplRubyDefinition
|
142
137
|
@@proc = nil
|
143
|
-
# def initialize
|
144
|
-
# @@proc = nil
|
145
|
-
# end
|
146
138
|
|
147
139
|
def XamplRubyDefinition.build(target = nil)
|
148
140
|
xampl = nil
|
@@ -186,33 +178,9 @@ module Xampl
|
|
186
178
|
xampl = XamplRubyDefinition.build(target)
|
187
179
|
end
|
188
180
|
|
189
|
-
def XamplObject.from_yaml(yaml_string, target=nil)
|
190
|
-
unstitched = YAML::load(yaml_string)
|
191
|
-
unstitched.stitch_yaml
|
192
|
-
if target then
|
193
|
-
vars = unstitched.instance_variables
|
194
|
-
vars.each { | ivar |
|
195
|
-
v = unstitched.instance_variable_get(ivar)
|
196
|
-
target.instance_variable_set(ivar, v)
|
197
|
-
}
|
198
|
-
unstitched = target
|
199
|
-
end
|
200
|
-
return unstitched
|
201
|
-
end
|
202
|
-
|
203
|
-
def is_yaml_root(xampl)
|
204
|
-
xampl == @@yaml_root
|
205
|
-
end
|
206
|
-
|
207
|
-
def as_yaml
|
208
|
-
@@yaml_root = self unless @@yaml_root
|
209
|
-
result = YAML::dump(self)
|
210
|
-
@@yaml_root = nil if self == @@yaml_root
|
211
|
-
return result
|
212
|
-
end
|
213
|
-
|
214
181
|
def persist(out="", mentions=nil, rules=nil)
|
215
|
-
|
182
|
+
persist_xml_new = PersistXML.new(out, mentions)
|
183
|
+
return persist_xml_new.start(self).done
|
216
184
|
end
|
217
185
|
|
218
186
|
def XamplObject.realise_from_xml_string(xml_string, target=nil, tokenise=true)
|
@@ -229,305 +197,6 @@ module Xampl
|
|
229
197
|
end
|
230
198
|
end
|
231
199
|
|
232
|
-
@@xampl_extends_symbols = false
|
233
|
-
|
234
|
-
def Xampl.xampl_extends_symbols
|
235
|
-
@@xampl_extends_symbols
|
236
|
-
end
|
237
|
-
|
238
|
-
def Xampl.xampl_extends_symbols=(v)
|
239
|
-
@@xampl_extends_symbols = v
|
240
|
-
|
241
|
-
if @@xampl_extends_symbols then
|
242
|
-
Symbol.module_eval("include XamplExtensionsToRubyObjects")
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
class XamplLiteralRubyObject
|
247
|
-
def initialize(thing)
|
248
|
-
@thing = thing
|
249
|
-
end
|
250
|
-
|
251
|
-
def to_xml(out="")
|
252
|
-
out << @thing.to_s
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
module XamplExtensionsToRubyObjects
|
257
|
-
def to_xml(out="")
|
258
|
-
out << self.to_s
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
module XamplPersistedObject
|
263
|
-
include XamplObject
|
264
|
-
|
265
|
-
attr_reader :persister
|
266
|
-
attr_accessor :load_needed
|
267
|
-
|
268
|
-
def persist_required
|
269
|
-
return true
|
270
|
-
end
|
271
|
-
|
272
|
-
def accessed
|
273
|
-
raise XamplIsInvalid.new(self) if invalid
|
274
|
-
# TODO -- why do I need to get rid of this line, alternatively, why
|
275
|
-
# is this next line even there? Well, because accessed is now called
|
276
|
-
# differently. But???
|
277
|
-
#raise NoActivePersister unless @persister
|
278
|
-
|
279
|
-
if @load_needed and @persister then
|
280
|
-
raise NoActivePersister.new unless @persister
|
281
|
-
|
282
|
-
if nil == Xampl.persister then
|
283
|
-
#raise UnmanagedChange.new(self)
|
284
|
-
if not @persister.syncing then
|
285
|
-
Xampl.read_only(@persister){
|
286
|
-
Xampl.lazy_load(self)
|
287
|
-
}
|
288
|
-
else
|
289
|
-
puts "LOAD NEEDED(2): REFUSED (persister: #{@persister.name})"
|
290
|
-
puts " pid: #{self.get_the_index} #{self}"
|
291
|
-
caller(0).each { | trace | puts " #{trace}"}
|
292
|
-
end
|
293
|
-
elsif Xampl.persister != @persister then
|
294
|
-
raise MixedPersisters.new(@persister, self)
|
295
|
-
elsif Xampl.persister == @persister then
|
296
|
-
if not @persister.syncing then
|
297
|
-
Xampl.lazy_load(self)
|
298
|
-
else
|
299
|
-
puts "LOAD NEEDED(3): REFUSED (persister: #{@persister.name})"
|
300
|
-
puts " pid: #{self.get_the_index} #{self}"
|
301
|
-
caller(0).each { | trace | puts " #{trace}"}
|
302
|
-
end
|
303
|
-
else
|
304
|
-
puts "LOAD NEEDED(4): REFUSED (persister: #{@persister.name})"
|
305
|
-
puts " pid: #{self.get_the_index} #{self}"
|
306
|
-
caller(0).each { | trace | puts " #{trace}"}
|
307
|
-
end
|
308
|
-
else
|
309
|
-
puts "LOAD NEEDED(5): REFUSED (persister: #{@persister})" if @load_needed
|
310
|
-
puts " pid: #{self.get_the_index} #{self}" if @load_needed
|
311
|
-
caller(0).each { | trace | puts " #{trace}"} if @load_needed
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
def changed
|
316
|
-
#puts "CHANGED: is_changed #{@is_changed} xampl #{self}"
|
317
|
-
unless Xampl.persister then
|
318
|
-
raise UnmanagedChange.new(self)
|
319
|
-
end
|
320
|
-
if @persister then
|
321
|
-
if Xampl.persister != @persister then
|
322
|
-
raise UnmanagedChange.new(self)
|
323
|
-
end
|
324
|
-
if @persister.block_changes then
|
325
|
-
raise BlockedChange.new(self)
|
326
|
-
end
|
327
|
-
end
|
328
|
-
unless @is_changed then
|
329
|
-
@is_changed = true
|
330
|
-
if @persister then
|
331
|
-
@persister.has_changed self
|
332
|
-
end
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
def force_load
|
337
|
-
@load_needed = true
|
338
|
-
@is_changed = false
|
339
|
-
@persister.has_not_changed(self) if @persister
|
340
|
-
self.clear_non_persistent_index_attributes
|
341
|
-
self.methods.grep(/init_.*_as_child/).each{ | method_name |
|
342
|
-
self.send(method_name)
|
343
|
-
}
|
344
|
-
@children = []
|
345
|
-
end
|
346
|
-
|
347
|
-
def reset_contents
|
348
|
-
self.clear_non_persistent_index_attributes
|
349
|
-
self.methods.grep(/init_.*_as_child/).each{ | method_name |
|
350
|
-
self.send(method_name)
|
351
|
-
}
|
352
|
-
@children = []
|
353
|
-
end
|
354
200
|
|
355
|
-
def introduce_persister(persister)
|
356
|
-
#accessed
|
357
|
-
if @persister and (@persister != persister) then
|
358
|
-
raise AlreadyKnownToPersister.new(self, persister)
|
359
|
-
end
|
360
|
-
@persister = persister
|
361
|
-
return true
|
362
|
-
end
|
363
|
-
|
364
|
-
def init_xampl_object
|
365
|
-
super
|
366
|
-
@persister = nil
|
367
|
-
@load_needed = false
|
368
|
-
if (Xampl.persister and Xampl.persister.automatic) then
|
369
|
-
Xampl.persister.introduce(self)
|
370
|
-
else
|
371
|
-
introduce_persister(nil)
|
372
|
-
end
|
373
|
-
end
|
374
|
-
|
375
|
-
def describe_yourself
|
376
|
-
nil
|
377
|
-
end
|
378
|
-
end
|
379
|
-
|
380
|
-
class XMLText
|
381
|
-
attr_accessor :namespaces, :prefix_ns_map, :ns, :first_text, :text
|
382
|
-
|
383
|
-
def initialize
|
384
|
-
@namespaces = []
|
385
|
-
@prefix_ns_map = {}
|
386
|
-
@first_text = nil
|
387
|
-
@text = nil
|
388
|
-
@ns = nil
|
389
|
-
end
|
390
|
-
|
391
|
-
def start_element(pp, depth)
|
392
|
-
@namespaces = {}
|
393
|
-
@namespaces[pp.namespace] = pp.namespace
|
394
|
-
|
395
|
-
depth += 1
|
396
|
-
|
397
|
-
if @first_text then
|
398
|
-
@text << "<" << pp.qname
|
399
|
-
|
400
|
-
pp.attributeCount.times{ | i |
|
401
|
-
@text << " " << pp.attributeQName(i) << "='" << pp.attributeValue(i) << "'"
|
402
|
-
|
403
|
-
prefix = pp.attributePrefix(i)
|
404
|
-
if prefix then
|
405
|
-
@prefix_ns_map[prefix] = pp.attributeNamespace(i)
|
406
|
-
end
|
407
|
-
}
|
408
|
-
else
|
409
|
-
@first_text = "<" << pp.qname
|
410
|
-
|
411
|
-
pp.attributeCount.times{ | i |
|
412
|
-
@first_text << " " << pp.attributeQName(i) << "='" << pp.attributeValue(i) << "'"
|
413
|
-
|
414
|
-
prefix = pp.attributePrefix(i)
|
415
|
-
if prefix then
|
416
|
-
@prefix_ns_map[prefix] = pp.attributeNamespace(i)
|
417
|
-
end
|
418
|
-
}
|
419
|
-
@text = ""
|
420
|
-
end
|
421
|
-
|
422
|
-
prefix = pp.prefix
|
423
|
-
if prefix then
|
424
|
-
@prefix_ns_map[prefix] = pp.namespace
|
425
|
-
end
|
426
|
-
|
427
|
-
if @ns != pp.namespace then
|
428
|
-
@text << " xmlns='" << pp.namespace << "'"
|
429
|
-
end
|
430
|
-
|
431
|
-
@text << ">"
|
432
|
-
|
433
|
-
return depth
|
434
|
-
end
|
435
|
-
|
436
|
-
def end_element(pp, depth)
|
437
|
-
depth -= 1
|
438
|
-
|
439
|
-
@text << "</"
|
440
|
-
@text << pp.prefix << ":" if pp.prefix
|
441
|
-
@text << pp.name << ">"
|
442
|
-
|
443
|
-
return depth
|
444
|
-
end
|
445
|
-
|
446
|
-
def to_s
|
447
|
-
@text
|
448
|
-
end
|
449
|
-
|
450
|
-
def to_xml(xml_printer=nil)
|
451
|
-
@text
|
452
|
-
end
|
453
|
-
|
454
|
-
def build(pp)
|
455
|
-
@namespaces = {}
|
456
|
-
@first_text = nil
|
457
|
-
@text = nil
|
458
|
-
|
459
|
-
depth = start_element(pp, 0)
|
460
|
-
|
461
|
-
while true
|
462
|
-
raise XamplException.new("unexpected end of document") if pp.endDocument?
|
463
|
-
|
464
|
-
case pp.nextEvent
|
465
|
-
when Xampl_PP::START_DOCUMENT
|
466
|
-
raise XamplException.new("unexpected start of document")
|
467
|
-
when Xampl_PP::END_DOCUMENT
|
468
|
-
raise XamplException.new("unexpected end of document")
|
469
|
-
when Xampl_PP::START_ELEMENT
|
470
|
-
depth = start_element(pp, depth)
|
471
|
-
when Xampl_PP::END_ELEMENT
|
472
|
-
depth = end_element(pp, depth)
|
473
|
-
break if depth <= 0
|
474
|
-
when Xampl_PP::TEXT, Xampl_PP::CDATA_SECTION, Xampl_PP::ENTITY_REF
|
475
|
-
@text << pp.text
|
476
|
-
#when Xampl_PP::IGNORABLE_WHITESPACE
|
477
|
-
#when Xampl_PP::PROCESSING_INSTRUCTION
|
478
|
-
#when Xampl_PP::COMMENT
|
479
|
-
#when Xampl_PP::DOCTYPE
|
480
|
-
end
|
481
|
-
end
|
482
|
-
|
483
|
-
@namespaces = @namespaces.keys
|
484
|
-
|
485
|
-
@prefix_ns_map.sort.each { | prefix, ns |
|
486
|
-
@first_text << " xmlns:" << prefix << "='" << ns << "'"
|
487
|
-
}
|
488
|
-
@first_text << @text
|
489
|
-
@text = @first_text
|
490
|
-
@first_text = nil
|
491
|
-
end
|
492
|
-
end
|
493
|
-
|
494
|
-
class XamplIsInvalid < Exception
|
495
|
-
attr_reader :msg, :xampl
|
496
|
-
|
497
|
-
def initialize(xampl)
|
498
|
-
@xampl = xampl
|
499
|
-
@msg = "Invalid Xampl:: #{xampl}"
|
500
|
-
end
|
501
|
-
|
502
|
-
def message
|
503
|
-
@msg
|
504
|
-
end
|
505
|
-
end
|
506
|
-
|
507
|
-
class AlreadyKnownToPersister < Exception
|
508
|
-
attr_reader :msg, :xampl
|
509
|
-
|
510
|
-
def initialize(xampl, persister)
|
511
|
-
@xampl = xampl
|
512
|
-
@msg = "#{xampl} #{xampl.get_the_index} is already known by a persister: #{xampl.persister.name}, so cannot use persister #{persister.name}"
|
513
|
-
end
|
514
|
-
|
515
|
-
def message
|
516
|
-
@msg
|
517
|
-
end
|
518
|
-
end
|
519
|
-
|
520
|
-
class XamplException < Exception
|
521
|
-
attr_reader :name, :msg
|
522
|
-
|
523
|
-
def initialize(name, message=nil)
|
524
|
-
@name = name
|
525
|
-
@msg = message ? message : ""
|
526
|
-
end
|
527
|
-
|
528
|
-
def message
|
529
|
-
"XamplException #{@name} #{@msg}"
|
530
|
-
end
|
531
|
-
end
|
532
201
|
end
|
533
202
|
|