hutch-xamplr 1.0.5 → 1.1.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/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
|
|