hutch-xamplr 1.0.2 → 1.0.3
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/VERSION.yml +1 -1
- data/examples/random-people/people.rb +2 -2
- data/examples/random-people/query.rb +16 -11
- data/examples/random-people-shared-addresses/Makefile +16 -0
- data/examples/random-people-shared-addresses/batch-load-users.rb +86 -0
- data/examples/random-people-shared-addresses/find-mentions.rb +50 -0
- data/examples/random-people-shared-addresses/find-people-by-address.rb +110 -0
- data/examples/random-people-shared-addresses/optimise.rb +19 -0
- data/examples/random-people-shared-addresses/people.rb +50 -0
- data/examples/random-people-shared-addresses/query.rb +78 -0
- data/examples/random-people-shared-addresses/query2.rb +76 -0
- data/examples/random-people-shared-addresses/random-names.csv +10000 -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/lib/xamplr/TODO +1 -3
- data/lib/xamplr/{persister → obsolete}/fsdb.rb +0 -0
- data/lib/xamplr/persistence.rb +7 -3
- data/lib/xamplr/persister/tokyo-cabinet.rb +70 -7
- data/lib/xamplr/templates/element_data.template +29 -21
- data/lib/xamplr/templates/element_empty.template +29 -22
- data/lib/xamplr/templates/element_mixed.template +31 -24
- data/lib/xamplr/templates/element_simple.template +29 -22
- data/lib/xamplr/{Makefile → test-support/Makefile} +0 -0
- data/lib/xamplr/{bench-cache.rb → test-support/bench-cache.rb} +1 -1
- data/lib/xamplr/{bench-script.rb → test-support/bench-script.rb} +0 -0
- data/lib/xamplr/{bench.rb → test-support/bench.rb} +0 -0
- data/lib/xamplr/{bench2.rb → test-support/bench2.rb} +9 -9
- data/lib/xamplr/{test-cache.rb → test-support/test-cache.rb} +0 -0
- data/lib/xamplr/{test-data → test-support/test-data}/binding.xml +0 -0
- data/lib/xamplr/{test-data → test-support/test-data}/example.xml +0 -0
- data/lib/xamplr/{test-data → test-support/test-data}/internationalization-utf8.txt +0 -0
- data/lib/xamplr/{test-data → test-support/test-data}/labels.xml +0 -0
- data/lib/xamplr/{test-data → test-support/test-data}/labels001.xml +0 -0
- data/lib/xamplr/{test-deep-change.rb → test-support/test-deep-change.rb} +0 -0
- data/lib/xamplr/{test-elements.rb → test-support/test-elements.rb} +0 -0
- data/lib/xamplr/{test-indexed-array.rb → test-support/test-indexed-array.rb} +0 -0
- data/lib/xamplr/{test-misc.rb → test-support/test-misc.rb} +0 -0
- data/lib/xamplr/{test-names.rb → test-support/test-names.rb} +0 -0
- data/lib/xamplr/{test-rollback.rb → test-support/test-rollback.rb} +0 -0
- data/lib/xamplr/{test.rb → test-support/test.rb} +74 -74
- data/lib/xamplr/to-ruby.rb +19 -15
- data/lib/xamplr/to-xml.rb +5 -4
- data/lib/xamplr/visitor.rb +6 -2
- data/lib/xamplr/xampl-object.rb +4 -9
- metadata +43 -25
- data/lib/xamplr/BUGS +0 -3
- data/lib/xamplr/CHANGES +0 -16
- data/lib/xamplr/REQUIREMENTS +0 -2
- data/lib/xamplr/sqlite/sqlite-play.rb +0 -14
@@ -0,0 +1,82 @@
|
|
1
|
+
$LOAD_PATH.unshift("xampl_generated_code")
|
2
|
+
|
3
|
+
require 'set'
|
4
|
+
require 'fastercsv'
|
5
|
+
require 'RandomPeople'
|
6
|
+
require 'people'
|
7
|
+
|
8
|
+
Xampl.set_default_persister_kind(:tokyo_cabinet)
|
9
|
+
Xampl.set_default_persister_format(:xml_format)
|
10
|
+
|
11
|
+
module RandomPeople
|
12
|
+
arr_of_arrs = FasterCSV.read("random-names.csv")
|
13
|
+
|
14
|
+
surnames = Set.new
|
15
|
+
cities = Set.new
|
16
|
+
states = Set.new
|
17
|
+
email_domains = Set.new
|
18
|
+
|
19
|
+
arr_of_arrs.each do | row |
|
20
|
+
surname = row[1]
|
21
|
+
city = row[3]
|
22
|
+
state = row[4]
|
23
|
+
|
24
|
+
surnames << surname
|
25
|
+
cities << city
|
26
|
+
states << state
|
27
|
+
|
28
|
+
email = row[6]
|
29
|
+
domain = email.split("@")
|
30
|
+
if 2 == domain.size then
|
31
|
+
email_domains << domain[1]
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
puts "surnames: #{ surnames.size }"
|
37
|
+
puts "cities: #{ cities.size }"
|
38
|
+
puts "states: #{ states.size }"
|
39
|
+
puts "email_domains: #{ email_domains.size }"
|
40
|
+
|
41
|
+
puts "STATES:"
|
42
|
+
puts states.to_a.sort.inspect
|
43
|
+
|
44
|
+
puts "EMAIL DOMAINS:"
|
45
|
+
puts email_domains.to_a.sort.inspect
|
46
|
+
|
47
|
+
#GivenName,Surname,StreetAddress,City,State,ZipCode,EmailAddress,TelephoneNumber
|
48
|
+
#<people pid='' xmlns="http://xampl.com/people">
|
49
|
+
# <person pid=''
|
50
|
+
# given-name=''
|
51
|
+
# surname=''
|
52
|
+
# street-address=''
|
53
|
+
# city=''
|
54
|
+
# state=''
|
55
|
+
# postal-code=''
|
56
|
+
# email=''
|
57
|
+
# phone=''/>
|
58
|
+
#</people>
|
59
|
+
|
60
|
+
# Xampl.transaction("random-people") do
|
61
|
+
#
|
62
|
+
# people = People.new('people')
|
63
|
+
#
|
64
|
+
# arr_of_arrs.each_with_index do | row, i |
|
65
|
+
# person = people.new_person("person-#{ i }")
|
66
|
+
# person.given_name = row[0]
|
67
|
+
# person.surname = row[1]
|
68
|
+
# person.street_address = row[2]
|
69
|
+
# person.city = row[3]
|
70
|
+
# person.state = row[4]
|
71
|
+
# person.postal_code = row[5]
|
72
|
+
# person.email = row[6]
|
73
|
+
# person.phone = row[7]
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
#
|
77
|
+
# processed_at = Time.now
|
78
|
+
#
|
79
|
+
# p counts
|
80
|
+
# p "parsed in #{ parsed_at - start_at }, counted in: #{ counted_at - parsed_at }, processed in: #{ processed_at - counted_at }"
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby -w -I..
|
2
|
+
|
3
|
+
if $0 == __FILE__ then
|
4
|
+
|
5
|
+
class File
|
6
|
+
def File.sjoin(*args)
|
7
|
+
File.join(args.select{ | o | o })
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'xamplr-generator'
|
12
|
+
|
13
|
+
include XamplGenerator
|
14
|
+
include Xampl
|
15
|
+
|
16
|
+
Xampl.transaction("setup", :in_memory) do
|
17
|
+
directory = File.sjoin(".", "xampl_generated_code")
|
18
|
+
|
19
|
+
options = Xampl.make(Options) do |options|
|
20
|
+
options.new_index_attribute("pid").persisted = true
|
21
|
+
options.new_index_attribute("id")
|
22
|
+
|
23
|
+
options.resolve("http://xampl.com/people", "RandomPeople", "p")
|
24
|
+
end
|
25
|
+
|
26
|
+
filenames = Dir.glob("./xml/**/*.xml")
|
27
|
+
|
28
|
+
generator = Generator.new
|
29
|
+
generator.go(:options => options,
|
30
|
+
:filenames => filenames,
|
31
|
+
:directory => directory)
|
32
|
+
|
33
|
+
#puts generator.print_elements("./generated-elements.xml")
|
34
|
+
exit!
|
35
|
+
end
|
36
|
+
end
|
data/lib/xamplr/TODO
CHANGED
File without changes
|
data/lib/xamplr/persistence.rb
CHANGED
@@ -518,6 +518,10 @@ module Xampl
|
|
518
518
|
@@persister.find_pids(hint) { | q | yield q } if @@persister
|
519
519
|
end
|
520
520
|
|
521
|
+
def Xampl.find_mentions_of(xampl)
|
522
|
+
@@persister.find_mentions_of(xampl) if @@persister
|
523
|
+
end
|
524
|
+
|
521
525
|
class Persister
|
522
526
|
attr_accessor :name,
|
523
527
|
:automatic,
|
@@ -636,14 +640,14 @@ module Xampl
|
|
636
640
|
@@persister.introduce(new_xampl)
|
637
641
|
end
|
638
642
|
|
639
|
-
def represent(xampl)
|
643
|
+
def represent(xampl, mentions)
|
640
644
|
#puts "REPRESENT #{xampl} load needed: #{xampl.load_needed}"
|
641
645
|
# return nil if xampl.load_needed
|
642
646
|
case xampl.default_persister_format || @format
|
643
647
|
when nil, :xml_format then
|
644
|
-
return xampl.persist
|
648
|
+
return xampl.persist("", mentions)
|
645
649
|
when :ruby_format then
|
646
|
-
return xampl.to_ruby
|
650
|
+
return xampl.to_ruby(mentions)
|
647
651
|
when :yaml_format then
|
648
652
|
return xampl.as_yaml
|
649
653
|
end
|
@@ -15,17 +15,16 @@ module Xampl
|
|
15
15
|
unless result then
|
16
16
|
rmsg = sprintf(msg, @tc_db.errmsg(@tc_db.ecode))
|
17
17
|
STDERR.printf(rmsg)
|
18
|
-
|
19
|
-
puts "---------"
|
18
|
+
STDERR.puts "---------"
|
20
19
|
caller(0).each do |trace|
|
21
20
|
STDERR.puts(trace)
|
22
21
|
end
|
23
|
-
puts "---------"
|
22
|
+
STDERR.puts "---------"
|
24
23
|
end
|
25
24
|
return rmsg
|
26
25
|
end
|
27
26
|
|
28
|
-
$lexical_indexes = Set.new(%w{ class pid time-stamp }) unless defined?($lexical_indexes)
|
27
|
+
$lexical_indexes = Set.new(%w{ class pid time-stamp xampl_from xampl_to }) unless defined?($lexical_indexes)
|
29
28
|
$numeric_indexes = Set.new unless defined?($numeric_indexes)
|
30
29
|
|
31
30
|
def TokyoCabinetPersister.add_lexical_indexs(indexes)
|
@@ -64,6 +63,7 @@ module Xampl
|
|
64
63
|
end
|
65
64
|
|
66
65
|
# Don't care if there are errors (in fact, if the index exists a failure is the expected thing)
|
66
|
+
|
67
67
|
$lexical_indexes.each do | index_name |
|
68
68
|
@tc_db.setindex(index_name, TDB::ITLEXICAL | TDB::ITKEEP)
|
69
69
|
end
|
@@ -193,7 +193,6 @@ module Xampl
|
|
193
193
|
else
|
194
194
|
return results
|
195
195
|
end
|
196
|
-
|
197
196
|
end
|
198
197
|
|
199
198
|
def find_pids(hint=false)
|
@@ -215,7 +214,6 @@ module Xampl
|
|
215
214
|
else
|
216
215
|
return result_keys
|
217
216
|
end
|
218
|
-
|
219
217
|
end
|
220
218
|
|
221
219
|
def find_meta(hint=false)
|
@@ -239,7 +237,40 @@ module Xampl
|
|
239
237
|
else
|
240
238
|
return results
|
241
239
|
end
|
240
|
+
end
|
241
|
+
|
242
|
+
def find_mentions_of(xampl)
|
243
|
+
open_tc_db
|
244
|
+
|
245
|
+
place = File.join(xampl.class.name.split("::"), xampl.get_the_index)
|
246
|
+
|
247
|
+
query = TableQuery.new(@tc_db)
|
248
|
+
query.add_condition('xampl_to', :equals, place)
|
249
|
+
result_keys = query.search
|
250
|
+
|
251
|
+
class_cache = {}
|
252
|
+
results = result_keys.collect do | key |
|
253
|
+
result = @tc_db[ key ]
|
254
|
+
next unless result
|
255
|
+
|
256
|
+
mentioner = result['xampl_from']
|
257
|
+
class_name = result['class']
|
258
|
+
result_class = class_cache[class_name]
|
259
|
+
unless result_class then
|
260
|
+
class_name.split("::").each do | chunk |
|
261
|
+
if result_class then
|
262
|
+
result_class = result_class.const_get( chunk )
|
263
|
+
else
|
264
|
+
result_class = Kernel.const_get( chunk )
|
265
|
+
end
|
266
|
+
end
|
242
267
|
|
268
|
+
class_cache[class_name] = result_class
|
269
|
+
end
|
270
|
+
|
271
|
+
self.lookup(result_class, result['pid'])
|
272
|
+
end
|
273
|
+
return results
|
243
274
|
end
|
244
275
|
|
245
276
|
def do_sync_write
|
@@ -281,7 +312,31 @@ module Xampl
|
|
281
312
|
raise XamplException.new(:no_index_so_no_persist) unless xampl.get_the_index
|
282
313
|
|
283
314
|
place = File.join(xampl.class.name.split("::"), xampl.get_the_index)
|
284
|
-
|
315
|
+
mentions = Set.new
|
316
|
+
data = represent(xampl, mentions)
|
317
|
+
|
318
|
+
query = TableQuery.new(@tc_db)
|
319
|
+
query.add_condition('xampl_from', :equals, place)
|
320
|
+
note_errors("TC:: failed to remove from mentions, error: %s\n") do
|
321
|
+
query.searchout
|
322
|
+
end
|
323
|
+
|
324
|
+
mentions.each do | mention |
|
325
|
+
mention_place = File.join(mention.class.name.split("::"), mention.get_the_index)
|
326
|
+
#TODO -- will repeadedly changing a persisted xampl object fragment the TC db?
|
327
|
+
|
328
|
+
pk = @tc_db.genuid
|
329
|
+
mention_hash = {
|
330
|
+
'xampl_from' => place,
|
331
|
+
'class' => xampl.class.name,
|
332
|
+
'pid' => xampl.get_the_index,
|
333
|
+
'xampl_to' => mention_place
|
334
|
+
}
|
335
|
+
|
336
|
+
note_errors("TC:: write error: %s\n") do
|
337
|
+
@tc_db.put(pk, mention_hash)
|
338
|
+
end
|
339
|
+
end
|
285
340
|
|
286
341
|
xampl_hash = {
|
287
342
|
'class' => xampl.class.name,
|
@@ -427,6 +482,14 @@ module Xampl
|
|
427
482
|
end
|
428
483
|
end
|
429
484
|
|
485
|
+
#
|
486
|
+
# Performs the search and removes whatever's found
|
487
|
+
#
|
488
|
+
|
489
|
+
def searchout
|
490
|
+
r = @query.searchout
|
491
|
+
end
|
492
|
+
|
430
493
|
# limits the search
|
431
494
|
|
432
495
|
def setlimit(max=nil, skip=nil)
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|if @element.persisted then
|
6
6
|
|
|
7
7
|
include Xampl::XamplPersistedObject
|
8
|
-
|
8
|
+
|
9
9
|
@@default_persister_format = nil
|
10
10
|
|
11
11
|
def default_persister_format
|
@@ -18,6 +18,14 @@
|
|
18
18
|
@@default_persister_format = format
|
19
19
|
end
|
20
20
|
|
21
|
+
def #{@element.class_name}.find_by_query
|
22
|
+
things = Xampl.find_xampl do | q |
|
23
|
+
q.add_condition('class', :equals, self.name)
|
24
|
+
yield(q)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
21
29
|
|
|
22
30
|
|else
|
23
31
|
|
|
@@ -78,7 +86,7 @@
|
|
78
86
|
|
|
79
87
|
"@children",
|
80
88
|
"@_content"
|
81
|
-
]
|
89
|
+
]
|
82
90
|
|
83
91
|
def to_yaml_properties
|
84
92
|
|
|
@@ -154,7 +162,7 @@
|
|
154
162
|
|
|
155
163
|
| else
|
156
164
|
|
|
157
|
-
|
165
|
+
|
158
166
|
def initialize
|
159
167
|
super
|
160
168
|
|
|
@@ -183,7 +191,7 @@
|
|
183
191
|
|
|
184
192
|
|}
|
185
193
|
|
|
186
|
-
|
194
|
+
|
187
195
|
yield(self) if block_given?
|
188
196
|
init_hook
|
189
197
|
|
@@ -201,11 +209,11 @@
|
|
201
209
|
|}
|
202
210
|
|
|
203
211
|
end
|
204
|
-
|
212
|
+
|
205
213
|
def append_to(other)
|
206
214
|
other.add_#{@element.attribute_name}(self)
|
207
215
|
end
|
208
|
-
|
216
|
+
|
209
217
|
|
|
210
218
|
|if @element.persisted then
|
211
219
|
|
|
@@ -234,11 +242,11 @@
|
|
234
242
|
def #{@element.class_name}.tag
|
235
243
|
@@tag
|
236
244
|
end
|
237
|
-
|
245
|
+
|
238
246
|
def #{@element.class_name}.ns
|
239
247
|
@@ns
|
240
248
|
end
|
241
|
-
|
249
|
+
|
242
250
|
def #{@element.class_name}.ns_tag
|
243
251
|
@@ns_tag
|
244
252
|
end
|
@@ -246,19 +254,19 @@
|
|
246
254
|
def #{@element.class_name}.safe_name
|
247
255
|
@@safe_name
|
248
256
|
end
|
249
|
-
|
257
|
+
|
250
258
|
def #{@element.class_name}.module_name
|
251
259
|
@@module_name
|
252
260
|
end
|
253
|
-
|
261
|
+
|
254
262
|
def tag
|
255
263
|
@@tag
|
256
264
|
end
|
257
|
-
|
265
|
+
|
258
266
|
def ns
|
259
267
|
@@ns
|
260
268
|
end
|
261
|
-
|
269
|
+
|
262
270
|
def ns_tag
|
263
271
|
@@ns_tag
|
264
272
|
end
|
@@ -266,45 +274,45 @@
|
|
266
274
|
def safe_name
|
267
275
|
@@safe_name
|
268
276
|
end
|
269
|
-
|
277
|
+
|
270
278
|
def module_name
|
271
279
|
@@module_name
|
272
280
|
end
|
273
|
-
|
281
|
+
|
274
282
|
def attributes
|
275
283
|
@@attributes
|
276
284
|
end
|
277
285
|
|
|
278
286
|
|if @element.indexed_by_attr
|
279
287
|
|
|
280
|
-
|
288
|
+
|
281
289
|
def indexed_by
|
282
290
|
:#{@element.indexed_by_attr}
|
283
291
|
end
|
284
|
-
|
292
|
+
|
285
293
|
def get_the_index
|
286
294
|
@#{@element.indexed_by_attr}
|
287
295
|
end
|
288
|
-
|
296
|
+
|
289
297
|
def set_the_index(index)
|
290
298
|
@#{@element.indexed_by_attr} = index
|
291
299
|
end
|
292
300
|
|
|
293
301
|
|end
|
294
302
|
|
|
295
|
-
|
303
|
+
|
296
304
|
def substitute_in_visit(visitor)
|
297
305
|
return visitor.substitute_in_visit_#{@element.attribute_name}(self) || self
|
298
306
|
end
|
299
|
-
|
307
|
+
|
300
308
|
def before_visit(visitor)
|
301
309
|
visitor.before_visit_#{@element.attribute_name}(self)
|
302
310
|
end
|
303
|
-
|
311
|
+
|
304
312
|
def visit(visitor)
|
305
313
|
visitor.visit_#{@element.attribute_name}(self)
|
306
314
|
end
|
307
|
-
|
315
|
+
|
308
316
|
def after_visit(visitor)
|
309
317
|
visitor.after_visit_#{@element.attribute_name}(self)
|
310
318
|
end
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|if @element.persisted then
|
5
5
|
|
|
6
6
|
include Xampl::XamplPersistedObject
|
7
|
-
|
7
|
+
|
8
8
|
@@default_persister_format = nil
|
9
9
|
|
10
10
|
def default_persister_format
|
@@ -17,6 +17,13 @@
|
|
17
17
|
@@default_persister_format = format
|
18
18
|
end
|
19
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
|
+
|
20
27
|
|
|
21
28
|
|else
|
22
29
|
|
|
@@ -25,7 +32,7 @@
|
|
25
32
|
|end
|
26
33
|
|
|
27
34
|
include Xampl::XamplWithoutContent
|
28
|
-
|
35
|
+
|
29
36
|
@@tag = "#{element.name}"
|
30
37
|
@@ns = "#{@element.namespace}"
|
31
38
|
@@ns_tag = "{#{@element.namespace}}#{element.name}"
|
@@ -59,7 +66,7 @@
|
|
59
66
|
|
|
60
67
|
|
61
68
|
@@to_yaml_properties = [ "@#{@element.indexed_by_attr}" ]
|
62
|
-
@@to_yaml_properties_all = [
|
69
|
+
@@to_yaml_properties_all = [
|
63
70
|
|
64
71
|
|
|
65
72
|
|else
|
@@ -75,8 +82,8 @@
|
|
75
82
|
|
|
76
83
|
|}
|
77
84
|
|
|
78
|
-
]
|
79
|
-
|
85
|
+
]
|
86
|
+
|
80
87
|
def to_yaml_properties
|
81
88
|
|
|
82
89
|
|if @element.persisted then
|
@@ -160,7 +167,7 @@
|
|
160
167
|
|
|
161
168
|
| else
|
162
169
|
|
|
163
|
-
|
170
|
+
|
164
171
|
def initialize
|
165
172
|
super
|
166
173
|
|
|
@@ -194,7 +201,7 @@
|
|
194
201
|
|
195
202
|
changed
|
196
203
|
end
|
197
|
-
|
204
|
+
|
198
205
|
def clear_non_persistent_index_attributes
|
199
206
|
|
|
200
207
|
|@element.attribute_child.each{ | attribute |
|
@@ -206,11 +213,11 @@
|
|
206
213
|
|}
|
207
214
|
|
|
208
215
|
end
|
209
|
-
|
216
|
+
|
210
217
|
def append_to(other)
|
211
218
|
other.add_#{element.attribute_name}(self)
|
212
219
|
end
|
213
|
-
|
220
|
+
|
214
221
|
|
|
215
222
|
|if @element.persisted then
|
216
223
|
|
|
@@ -239,11 +246,11 @@
|
|
239
246
|
def #{@element.class_name}.tag
|
240
247
|
@@tag
|
241
248
|
end
|
242
|
-
|
249
|
+
|
243
250
|
def #{@element.class_name}.ns
|
244
251
|
@@ns
|
245
252
|
end
|
246
|
-
|
253
|
+
|
247
254
|
def #{@element.class_name}.ns_tag
|
248
255
|
@@ns_tag
|
249
256
|
end
|
@@ -251,19 +258,19 @@
|
|
251
258
|
def #{@element.class_name}.safe_name
|
252
259
|
@@safe_name
|
253
260
|
end
|
254
|
-
|
261
|
+
|
255
262
|
def #{@element.class_name}.module_name
|
256
263
|
@@module_name
|
257
264
|
end
|
258
|
-
|
265
|
+
|
259
266
|
def tag
|
260
267
|
@@tag
|
261
268
|
end
|
262
|
-
|
269
|
+
|
263
270
|
def ns
|
264
271
|
@@ns
|
265
272
|
end
|
266
|
-
|
273
|
+
|
267
274
|
def ns_tag
|
268
275
|
@@ns_tag
|
269
276
|
end
|
@@ -271,11 +278,11 @@
|
|
271
278
|
def safe_name
|
272
279
|
@@safe_name
|
273
280
|
end
|
274
|
-
|
281
|
+
|
275
282
|
def module_name
|
276
283
|
@@module_name
|
277
284
|
end
|
278
|
-
|
285
|
+
|
279
286
|
def attributes
|
280
287
|
@@attributes
|
281
288
|
end
|
@@ -286,11 +293,11 @@
|
|
286
293
|
def indexed_by
|
287
294
|
:#{@element.indexed_by_attr}
|
288
295
|
end
|
289
|
-
|
296
|
+
|
290
297
|
def get_the_index
|
291
298
|
@#{@element.indexed_by_attr}
|
292
299
|
end
|
293
|
-
|
300
|
+
|
294
301
|
def set_the_index(index)
|
295
302
|
@#{@element.indexed_by_attr} = index
|
296
303
|
end
|
@@ -301,15 +308,15 @@
|
|
301
308
|
def substitute_in_visit(visitor)
|
302
309
|
return visitor.substitute_in_visit_#{@element.attribute_name}(self) || self
|
303
310
|
end
|
304
|
-
|
311
|
+
|
305
312
|
def before_visit(visitor)
|
306
313
|
visitor.before_visit_#{@element.attribute_name}(self)
|
307
314
|
end
|
308
|
-
|
315
|
+
|
309
316
|
def visit(visitor)
|
310
317
|
visitor.visit_#{@element.attribute_name}(self)
|
311
318
|
end
|
312
|
-
|
319
|
+
|
313
320
|
def after_visit(visitor)
|
314
321
|
visitor.after_visit_#{@element.attribute_name}(self)
|
315
322
|
end
|