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.
Files changed (142) hide show
  1. data/CHANGES.txt +13 -0
  2. data/LICENSE +3 -0
  3. data/README.rdoc +26 -0
  4. data/README.rdoc.orig +118 -0
  5. data/Rakefile +85 -0
  6. data/VERSION.yml +4 -0
  7. data/examples/random-people-shared-addresses/Makefile +16 -0
  8. data/examples/random-people-shared-addresses/batch-load-users.rb +83 -0
  9. data/examples/random-people-shared-addresses/find-mentions.rb +47 -0
  10. data/examples/random-people-shared-addresses/find-people-by-address.rb +104 -0
  11. data/examples/random-people-shared-addresses/optimise.rb +16 -0
  12. data/examples/random-people-shared-addresses/people.rb +35 -0
  13. data/examples/random-people-shared-addresses/query.rb +75 -0
  14. data/examples/random-people-shared-addresses/query2.rb +73 -0
  15. data/examples/random-people-shared-addresses/random-names.csv +10000 -0
  16. data/examples/random-people-shared-addresses/settings.rb +3 -0
  17. data/examples/random-people-shared-addresses/what-to-query-on.rb +82 -0
  18. data/examples/random-people-shared-addresses/xampl-gen.rb +36 -0
  19. data/examples/random-people-shared-addresses/xml/people.xml +14 -0
  20. data/examples/random-people/Makefile +16 -0
  21. data/examples/random-people/batch-load-users.rb +61 -0
  22. data/examples/random-people/optimise.rb +16 -0
  23. data/examples/random-people/people.rb +22 -0
  24. data/examples/random-people/query.rb +73 -0
  25. data/examples/random-people/query2.rb +73 -0
  26. data/examples/random-people/random-names.csv +10000 -0
  27. data/examples/random-people/rawtc.rb +91 -0
  28. data/examples/random-people/settings.rb +3 -0
  29. data/examples/random-people/what-to-query-on.rb +80 -0
  30. data/examples/random-people/xampl-gen.rb +36 -0
  31. data/examples/random-people/xml/people.xml +11 -0
  32. data/examples/read-testing/Makefile +10 -0
  33. data/examples/read-testing/load.rb +65 -0
  34. data/examples/read-testing/read.rb +51 -0
  35. data/examples/read-testing/rrr.rb +87 -0
  36. data/examples/read-testing/settings.rb +2 -0
  37. data/examples/read-testing/xampl-gen.rb +36 -0
  38. data/examples/read-testing/xml/text.xml +8 -0
  39. data/examples/tokyo-cabinet-experimental/expt-query.rb +42 -0
  40. data/examples/tokyo-cabinet-experimental/expt-query2.rb +42 -0
  41. data/examples/tokyo-cabinet-experimental/expt-query3.rb +41 -0
  42. data/examples/tokyo-cabinet-experimental/expt-reader.rb +32 -0
  43. data/examples/tokyo-cabinet-experimental/expt.rb +61 -0
  44. data/examples/tokyo-cabinet-experimental/xampl-gen.rb +36 -0
  45. data/examples/tokyo-cabinet-experimental/xml/tcx.xml +6 -0
  46. data/lib/xampl-generator.rb +3 -0
  47. data/lib/xampl.rb +3 -0
  48. data/lib/xamplr-generator.rb +10 -0
  49. data/lib/xamplr.rb +37 -0
  50. data/lib/xamplr/README-POSSIBLE-PROBLEMS +5 -0
  51. data/lib/xamplr/TODO +1 -0
  52. data/lib/xamplr/exceptions.rb +97 -0
  53. data/lib/xamplr/from-xml-orig.rb +350 -0
  54. data/lib/xamplr/from-xml.rb +439 -0
  55. data/lib/xamplr/gen-elements.xml +6230 -0
  56. data/lib/xamplr/gen.elements.xml +108 -0
  57. data/lib/xamplr/generate-elements.rb +15 -0
  58. data/lib/xamplr/generator.rb +5 -0
  59. data/lib/xamplr/graphml-out.rb +470 -0
  60. data/lib/xamplr/handwritten/example.rb +698 -0
  61. data/lib/xamplr/handwritten/hand-example.rb +533 -0
  62. data/lib/xamplr/handwritten/test-handwritten.rb +873 -0
  63. data/lib/xamplr/indexed-array.rb +115 -0
  64. data/lib/xamplr/mixins.rb +397 -0
  65. data/lib/xamplr/my.gen.elements.xml +461 -0
  66. data/lib/xamplr/notifications.rb +57 -0
  67. data/lib/xamplr/obsolete/fsdb.rb +62 -0
  68. data/lib/xamplr/persist-to-xml.rb +249 -0
  69. data/lib/xamplr/persistence.rb +522 -0
  70. data/lib/xamplr/persistence.rb.more_thread_safe +771 -0
  71. data/lib/xamplr/persistence.rb.partially_thread_safe +763 -0
  72. data/lib/xamplr/persister.rb +310 -0
  73. data/lib/xamplr/persisters/caches.rb +186 -0
  74. data/lib/xamplr/persisters/caching.rb +172 -0
  75. data/lib/xamplr/persisters/filesystem.rb +60 -0
  76. data/lib/xamplr/persisters/in-memory.rb +180 -0
  77. data/lib/xamplr/persisters/simple.rb +59 -0
  78. data/lib/xamplr/persisters/tokyo-cabinet.rb +641 -0
  79. data/lib/xamplr/simpleTemplate/danger.rx +4 -0
  80. data/lib/xamplr/simpleTemplate/obsolete/input-c.r4 +35 -0
  81. data/lib/xamplr/simpleTemplate/obsolete/play.r6.txt +12 -0
  82. data/lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt +20 -0
  83. data/lib/xamplr/simpleTemplate/obsolete/test001.r5 +8 -0
  84. data/lib/xamplr/simpleTemplate/obsolete/test002.r5 +13 -0
  85. data/lib/xamplr/simpleTemplate/obsolete/test003.r5 +37 -0
  86. data/lib/xamplr/simpleTemplate/old/r6.000.rb +122 -0
  87. data/lib/xamplr/simpleTemplate/old/r6.001.rb +145 -0
  88. data/lib/xamplr/simpleTemplate/play.r6 +12 -0
  89. data/lib/xamplr/simpleTemplate/play_more.r6 +20 -0
  90. data/lib/xamplr/simpleTemplate/play_noblanks.r6 +21 -0
  91. data/lib/xamplr/simpleTemplate/playq.r6 +16 -0
  92. data/lib/xamplr/simpleTemplate/r6.rb +87 -0
  93. data/lib/xamplr/simpleTemplate/simple-template.rb +75 -0
  94. data/lib/xamplr/templates/child.template +47 -0
  95. data/lib/xamplr/templates/child_indexed.template +89 -0
  96. data/lib/xamplr/templates/child_modules.template +5 -0
  97. data/lib/xamplr/templates/element_classes.template +11 -0
  98. data/lib/xamplr/templates/element_data.template +282 -0
  99. data/lib/xamplr/templates/element_empty.template +285 -0
  100. data/lib/xamplr/templates/element_mixed.template +277 -0
  101. data/lib/xamplr/templates/element_simple.template +276 -0
  102. data/lib/xamplr/templates/package.template +26 -0
  103. data/lib/xamplr/test-support/Makefile +47 -0
  104. data/lib/xamplr/test-support/bench-cache.rb +80 -0
  105. data/lib/xamplr/test-support/bench-script.rb +21 -0
  106. data/lib/xamplr/test-support/bench.rb +116 -0
  107. data/lib/xamplr/test-support/bench2.rb +132 -0
  108. data/lib/xamplr/test-support/test-cache.rb +147 -0
  109. data/lib/xamplr/test-support/test-data/binding.xml +7 -0
  110. data/lib/xamplr/test-support/test-data/example.xml +14 -0
  111. data/lib/xamplr/test-support/test-data/internationalization-utf8.txt +1 -0
  112. data/lib/xamplr/test-support/test-data/labels.xml +37 -0
  113. data/lib/xamplr/test-support/test-data/labels001.xml +38 -0
  114. data/lib/xamplr/test-support/test-deep-change.rb +135 -0
  115. data/lib/xamplr/test-support/test-elements.rb +109 -0
  116. data/lib/xamplr/test-support/test-indexed-array.rb +169 -0
  117. data/lib/xamplr/test-support/test-misc.rb +73 -0
  118. data/lib/xamplr/test-support/test-names.rb +67 -0
  119. data/lib/xamplr/test-support/test-rollback.rb +106 -0
  120. data/lib/xamplr/test-support/test.rb +1504 -0
  121. data/lib/xamplr/to-ruby.rb +220 -0
  122. data/lib/xamplr/to-xml.rb +158 -0
  123. data/lib/xamplr/version.rb +67 -0
  124. data/lib/xamplr/visitor.rb +140 -0
  125. data/lib/xamplr/visitors.rb +573 -0
  126. data/lib/xamplr/xampl-generator.rb +533 -0
  127. data/lib/xamplr/xampl-hand-generated.rb +1535 -0
  128. data/lib/xamplr/xampl-module.rb +36 -0
  129. data/lib/xamplr/xampl-object-internals.rb +6 -0
  130. data/lib/xamplr/xampl-object.rb +202 -0
  131. data/lib/xamplr/xampl-persisted-object.rb +122 -0
  132. data/lib/xamplr/xml-text.rb +117 -0
  133. data/lib/xamplr/xml/document.xml +7 -0
  134. data/lib/xamplr/xml/elements.xml +101 -0
  135. data/lib/xamplr/xml/elements000.xml +73 -0
  136. data/lib/xamplr/xml/example.xml +23 -0
  137. data/lib/xamplr/xml/options.xml +12 -0
  138. data/lib/xamplr/xml/uche.xml +38 -0
  139. data/lib/xamplr/yEd-sample.graphml +300 -0
  140. data/test/test_helper.rb +10 -0
  141. data/test/xamplr_test.rb +7 -0
  142. metadata +245 -0
@@ -0,0 +1,285 @@
1
+
2
+ class #{@element.class_name}
3
+ |
4
+ |if @element.persisted then
5
+ |
6
+ include Xampl::XamplPersistedObject
7
+
8
+ @@default_persister_format = nil
9
+
10
+ def default_persister_format
11
+ @@default_persister_format
12
+ end
13
+ def #{@element.class_name}.default_persister_format
14
+ @@default_persister_format
15
+ end
16
+ def #{@element.class_name}.set_default_persister_format(format)
17
+ @@default_persister_format = format
18
+ end
19
+
20
+ def #{@element.class_name}.find_by_query
21
+ things = Xampl.find_xampl do | q |
22
+ q.add_condition('class', :equals, self.name)
23
+ yield(q)
24
+ end
25
+ end
26
+
27
+ |
28
+ |else
29
+ |
30
+ include Xampl::XamplObject
31
+ |
32
+ |end
33
+ |
34
+ include Xampl::XamplWithoutContent
35
+
36
+ @@tag = "#{element.name}"
37
+ @@ns = "#{@element.namespace}"
38
+ @@ns_tag = "{#{@element.namespace}}#{element.name}"
39
+ @@module_name = "#{@package_name}"
40
+ @@safe_name = "#{@package_name}_#{@element.attribute_name}"
41
+ @@attributes = [
42
+ |
43
+ |@element.attribute_child.each{ | attribute |
44
+ | if attribute.namespace then
45
+ |
46
+ [ :@#{attribute.name}, "#{attribute.name}", "#{attribute.namespace}" ],
47
+ |
48
+ | else
49
+ |
50
+ [ :@#{attribute.name}, "#{attribute.name}" ],
51
+ |
52
+ | end
53
+ |}
54
+ |
55
+ ]
56
+ |
57
+ |@element.child_element_child.each{ | child_element |
58
+ | element_class_name = @lookup_element[child_element.name].class_name
59
+ | element_package = @lookup_element[child_element.name].package
60
+ |
61
+ include #{element_package}::#{element_class_name}AsChild
62
+ |
63
+ |}
64
+ |
65
+ |if @element.persisted then
66
+ |
67
+
68
+ def #{@element.class_name}.lookup(pid)
69
+ Xampl.lookup(#{@element.class_name}, pid)
70
+ end
71
+
72
+ def #{@element.class_name}.[](pid)
73
+ Xampl.lookup(#{@element.class_name}, pid)
74
+ end
75
+ |
76
+ |end
77
+ |
78
+ |@element.attribute_child.each{ | attribute |
79
+ | if attribute.name == @element.indexed_by_attr and @element.persisted then
80
+ |
81
+
82
+ def #{attribute.name}
83
+ @#{attribute.name}
84
+ end
85
+
86
+ def xxx#{attribute.name}=(v)
87
+ accessed
88
+ # This is kind of optimistic, I think you are in trouble if you do this
89
+ Xampl.auto_uncache(self) if @#{attribute.name}
90
+ @#{attribute.name} = v
91
+ changed
92
+ Xampl.auto_cache(self) if v
93
+ end
94
+
95
+ def #{attribute.name}=(v)
96
+ accessed
97
+ # This is kind of optimistic, I think you are in trouble if you do this
98
+ Xampl.auto_uncache(self) if @#{attribute.name}
99
+ @#{attribute.name} = v
100
+ changed
101
+ Xampl.auto_cache(self) if v
102
+ end
103
+ |
104
+ | else
105
+ |
106
+
107
+ def #{attribute.name}
108
+ accessed
109
+ @#{attribute.name}
110
+ end
111
+
112
+ def #{attribute.name}=(v)
113
+ accessed
114
+ changed
115
+ @#{attribute.name} = v
116
+ end
117
+ |
118
+ | end
119
+ |}
120
+ |
121
+ | if @element.indexed_by_attr then
122
+ |
123
+
124
+ def initialize(index=nil)
125
+ @#{@element.indexed_by_attr} = index if index
126
+ super()
127
+ |
128
+ | else
129
+ |
130
+
131
+ def initialize
132
+ super
133
+ |
134
+ |end
135
+ |
136
+ |if 0 < @element.attribute_child.size then
137
+ |
138
+
139
+ |
140
+ |end
141
+ |
142
+ |@element.attribute_child.each{ | attribute |
143
+ |
144
+ @#{attribute.name} = nil if not defined? @#{attribute.name}
145
+ |
146
+ |}
147
+ |
148
+
149
+ init_xampl_object
150
+ |
151
+ |@element.child_element_child.each{ | child_element |
152
+ | element_attribute_name = @lookup_element[child_element.name].attribute_name
153
+ |
154
+ init_#{element_attribute_name}_as_child
155
+ |
156
+ |}
157
+ |
158
+
159
+ yield(self) if block_given?
160
+ init_hook
161
+
162
+ changed
163
+ end
164
+
165
+ def clear_non_persistent_index_attributes
166
+ |
167
+ |@element.attribute_child.each{ | attribute |
168
+ | unless attribute.name == @element.indexed_by_attr and @element.persisted then
169
+ |
170
+ @#{attribute.name} = nil
171
+ |
172
+ | end
173
+ |}
174
+ |
175
+ end
176
+
177
+ def append_to(other)
178
+ other.add_#{element.attribute_name}(self)
179
+ end
180
+
181
+ |
182
+ |if @element.persisted then
183
+ |
184
+ def #{@element.class_name}.persisted?
185
+ return :#{@element.indexed_by_attr}
186
+ end
187
+
188
+ def persisted?
189
+ return :#{@element.indexed_by_attr}
190
+ end
191
+
192
+ |
193
+ |else
194
+ |
195
+ def #{@element.class_name}.persisted?
196
+ return nil
197
+ end
198
+
199
+ def persisted?
200
+ return nil
201
+ end
202
+
203
+ |
204
+ |end
205
+ |
206
+ def #{@element.class_name}.tag
207
+ @@tag
208
+ end
209
+
210
+ def #{@element.class_name}.ns
211
+ @@ns
212
+ end
213
+
214
+ def #{@element.class_name}.ns_tag
215
+ @@ns_tag
216
+ end
217
+
218
+ def #{@element.class_name}.safe_name
219
+ @@safe_name
220
+ end
221
+
222
+ def #{@element.class_name}.module_name
223
+ @@module_name
224
+ end
225
+
226
+ def tag
227
+ @@tag
228
+ end
229
+
230
+ def ns
231
+ @@ns
232
+ end
233
+
234
+ def ns_tag
235
+ @@ns_tag
236
+ end
237
+
238
+ def safe_name
239
+ @@safe_name
240
+ end
241
+
242
+ def module_name
243
+ @@module_name
244
+ end
245
+
246
+ def attributes
247
+ @@attributes
248
+ end
249
+ |
250
+ |if @element.indexed_by_attr
251
+ |
252
+
253
+ def indexed_by
254
+ :#{@element.indexed_by_attr}
255
+ end
256
+
257
+ def get_the_index
258
+ @#{@element.indexed_by_attr}
259
+ end
260
+
261
+ def set_the_index(index)
262
+ @#{@element.indexed_by_attr} = index
263
+ end
264
+ |
265
+ |end
266
+ |
267
+
268
+ def substitute_in_visit(visitor)
269
+ return visitor.substitute_in_visit_#{@element.attribute_name}(self) || self
270
+ end
271
+
272
+ def before_visit(visitor)
273
+ visitor.before_visit_#{@element.attribute_name}(self)
274
+ end
275
+
276
+ def visit(visitor)
277
+ visitor.visit_#{@element.attribute_name}(self)
278
+ end
279
+
280
+ def after_visit(visitor)
281
+ visitor.after_visit_#{@element.attribute_name}(self)
282
+ end
283
+
284
+ Xampl::FromXML::register(#{@element.class_name}::tag, #{@element.class_name}::ns_tag, #{@element.class_name})
285
+ end
@@ -0,0 +1,277 @@
1
+
2
+ class #{@element.class_name}
3
+ |
4
+ |if @element.persisted then
5
+ |
6
+ include Xampl::XamplPersistedObject
7
+
8
+ @@default_persister_format = nil
9
+
10
+ def default_persister_format
11
+ @@default_persister_format
12
+ end
13
+ def #{@element.class_name}.default_persister_format
14
+ @@default_persister_format
15
+ end
16
+ def #{@element.class_name}.set_default_persister_format(format)
17
+ @@default_persister_format = format
18
+ end
19
+
20
+ def #{@element.class_name}.find_by_query
21
+ things = Xampl.find_xampl do | q |
22
+ q.add_condition('class', :equals, self.name)
23
+ yield(q)
24
+ end
25
+ end
26
+
27
+ |
28
+ |else
29
+ |
30
+ include Xampl::XamplObject
31
+ |
32
+ |end
33
+ |
34
+ include Xampl::XamplWithMixedContent
35
+
36
+ @@tag = "#{@element.name}"
37
+ @@ns = "#{@element.namespace}"
38
+ @@ns_tag = "{#{@element.namespace}}#{@element.name}"
39
+ @@module_name = "#{@package_name}"
40
+ @@safe_name = "#{@package_name}_#{@element.attribute_name}"
41
+ @@attributes = [
42
+ |
43
+ |@element.attribute_child.each{ | attribute |
44
+ | if attribute.namespace then
45
+ |
46
+ [ :@#{attribute.name}, "#{attribute.name}", "#{attribute.namespace}" ],
47
+ |
48
+ | else
49
+ |
50
+ [ :@#{attribute.name}, "#{attribute.name}" ],
51
+ |
52
+ | end
53
+ |}
54
+ |
55
+ ]
56
+ |
57
+ |@element.child_element_child.each{ | child_element |
58
+ | element_class_name = @lookup_element[child_element.name].class_name
59
+ | element_package = @lookup_element[child_element.name].package
60
+ |
61
+ include #{element_package}::#{element_class_name}AsChild
62
+ |
63
+ |}
64
+ |
65
+ |if @element.persisted then
66
+ |
67
+
68
+ def #{@element.class_name}.lookup(pid)
69
+ Xampl.lookup(#{@element.class_name}, pid)
70
+ end
71
+
72
+ def #{@element.class_name}.[](pid)
73
+ Xampl.lookup(#{@element.class_name}, pid)
74
+ end
75
+ |
76
+ |end
77
+ |
78
+ |@element.attribute_child.each{ | attribute |
79
+ | if attribute.name == @element.indexed_by_attr and @element.persisted then
80
+ |
81
+
82
+ def #{attribute.name}
83
+ @#{attribute.name}
84
+ end
85
+
86
+ def #{attribute.name}=(v)
87
+ accessed
88
+ # This is kind of optimistic, I think you are in trouble if you do this
89
+ Xampl.auto_uncache(self) if @#{attribute.name}
90
+ @#{attribute.name} = v
91
+ changed
92
+ Xampl.auto_cache(self) if v
93
+ end
94
+ |
95
+ | else
96
+ |
97
+
98
+ def #{attribute.name}
99
+ accessed
100
+ @#{attribute.name}
101
+ end
102
+
103
+ def #{attribute.name}=(v)
104
+ accessed
105
+ changed
106
+ @#{attribute.name} = v
107
+ end
108
+ |
109
+ | end
110
+ |}
111
+ |
112
+ | if @element.indexed_by_attr then
113
+ |
114
+
115
+ def initialize(index=nil)
116
+ @#{@element.indexed_by_attr} = index if index
117
+ super()
118
+ |
119
+ | else
120
+ |
121
+
122
+ def initialize
123
+ super
124
+ |
125
+ |end
126
+ |
127
+ |if 0 < @element.attribute_child.size then
128
+ |
129
+
130
+ |
131
+ |end
132
+ |
133
+ |@element.attribute_child.each{ | attribute |
134
+ |
135
+ @#{attribute.name} = nil if not defined? @#{attribute.name}
136
+ |
137
+ |}
138
+ |
139
+
140
+ init_xampl_object
141
+ init_mixed_content
142
+ |
143
+ |@element.child_element_child.each{ | child_element |
144
+ | element_attribute_name = @lookup_element[child_element.name].attribute_name
145
+ |
146
+ init_#{element_attribute_name}_as_child
147
+ |
148
+ |}
149
+ |
150
+
151
+ yield(self) if block_given?
152
+ init_hook
153
+
154
+ changed
155
+ end
156
+
157
+ def clear_non_persistent_index_attributes
158
+ |
159
+ |@element.attribute_child.each{ | attribute |
160
+ | unless attribute.name == @element.indexed_by_attr and @element.persisted then
161
+ |
162
+ @#{attribute.name} = nil
163
+ |
164
+ | end
165
+ |}
166
+ |
167
+ end
168
+
169
+ def append_to(other)
170
+ other.add_#{@element.attribute_name}(self)
171
+ end
172
+
173
+ |
174
+ |if @element.persisted then
175
+ |
176
+ def #{@element.class_name}.persisted?
177
+ return :#{@element.indexed_by_attr}
178
+ end
179
+
180
+ def persisted?
181
+ return :#{@element.indexed_by_attr}
182
+ end
183
+
184
+ |
185
+ |else
186
+ |
187
+ def #{@element.class_name}.persisted?
188
+ return nil
189
+ end
190
+
191
+ def persisted?
192
+ return nil
193
+ end
194
+
195
+ |
196
+ |end
197
+ |
198
+ def #{@element.class_name}.tag
199
+ @@tag
200
+ end
201
+
202
+ def #{@element.class_name}.ns
203
+ @@ns
204
+ end
205
+
206
+ def #{@element.class_name}.ns_tag
207
+ @@ns_tag
208
+ end
209
+
210
+ def #{@element.class_name}.safe_name
211
+ @@safe_name
212
+ end
213
+
214
+ def #{@element.class_name}.module_name
215
+ @@module_name
216
+ end
217
+
218
+ def tag
219
+ @@tag
220
+ end
221
+
222
+ def ns
223
+ @@ns
224
+ end
225
+
226
+ def ns_tag
227
+ @@ns_tag
228
+ end
229
+
230
+ def safe_name
231
+ @@safe_name
232
+ end
233
+
234
+ def module_name
235
+ @@module_name
236
+ end
237
+
238
+ def attributes
239
+ @@attributes
240
+ end
241
+ |
242
+ |if @element.indexed_by_attr
243
+ |
244
+
245
+ def indexed_by
246
+ :#{@element.indexed_by_attr}
247
+ end
248
+
249
+ def get_the_index
250
+ @#{@element.indexed_by_attr}
251
+ end
252
+
253
+ def set_the_index(index)
254
+ @#{@element.indexed_by_attr} = index
255
+ end
256
+ |
257
+ |end
258
+ |
259
+
260
+ def substitute_in_visit(visitor)
261
+ return visitor.substitute_in_visit_#{@element.attribute_name}(self) || self
262
+ end
263
+
264
+ def before_visit(visitor)
265
+ visitor.before_visit_#{@element.attribute_name}(self)
266
+ end
267
+
268
+ def visit(visitor)
269
+ visitor.visit_#{@element.attribute_name}(self)
270
+ end
271
+
272
+ def after_visit(visitor)
273
+ visitor.after_visit_#{@element.attribute_name}(self)
274
+ end
275
+
276
+ Xampl::FromXML::register(#{@element.class_name}::tag, #{@element.class_name}::ns_tag, #{@element.class_name})
277
+ end