xamplr 1.9.13 → 1.9.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,48 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../../..'))
3
+
4
+ #require 'weakref'
5
+
6
+ require 'xamplr'
7
+
8
+ Xampl.set_default_persister_kind(:in_memory)
9
+
10
+ require 'xampl-generated-code/all'
11
+ require 'author'
12
+
13
+ require 'spec'
14
+ require 'spec/autorun'
15
+
16
+ Spec::Runner.configure do |config|
17
+
18
+ end
19
+
20
+ module XamplTestRedis
21
+
22
+ @@load_time = Time.now.to_i.to_s
23
+ @@scratch_name_count = 0
24
+
25
+ def XamplTestRedis.scratch_name(prefix='scratch')
26
+ "#{prefix}-#{ @@load_time }-#{ @@scratch_name_count += 1 }"
27
+ end
28
+
29
+ class DroolingIdiotPersistedObject
30
+ include Xampl::XamplPersistedObject
31
+
32
+ attr_accessor :pid
33
+
34
+ def initialize(pid)
35
+ @pid = pid
36
+ end
37
+
38
+ def get_the_index
39
+ @pid
40
+ end
41
+
42
+ def persisted?
43
+ true
44
+ end
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1,3 @@
1
+
2
+ dump.rdb
3
+
@@ -0,0 +1,5 @@
1
+
2
+ unit-testing:
3
+ rm -f ./dump.rdb
4
+ redis-server ./unit-testing.redis.conf
5
+
@@ -0,0 +1,332 @@
1
+ # Redis configuration file example
2
+
3
+ # Note on units: when memory size is needed, it is possible to specifiy
4
+ # it in the usual form of 1k 5GB 4M and so forth:
5
+ #
6
+ # 1k => 1000 bytes
7
+ # 1kb => 1024 bytes
8
+ # 1m => 1000000 bytes
9
+ # 1mb => 1024*1024 bytes
10
+ # 1g => 1000000000 bytes
11
+ # 1gb => 1024*1024*1024 bytes
12
+ #
13
+ # units are case insensitive so 1GB 1Gb 1gB are all the same.
14
+
15
+ # By default Redis does not run as a daemon. Use 'yes' if you need it.
16
+ # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
17
+ daemonize no
18
+
19
+ # When running daemonized, Redis writes a pid file in /var/run/redis.pid by
20
+ # default. You can specify a custom pid file location here.
21
+ pidfile ./redis.pid
22
+
23
+ # Accept connections on the specified port, default is 6379
24
+ port 6379
25
+
26
+ # If you want you can bind a single interface, if the bind option is not
27
+ # specified all the interfaces will listen for incoming connections.
28
+ #
29
+ # bind 127.0.0.1
30
+
31
+ # Close the connection after a client is idle for N seconds (0 to disable)
32
+ timeout 300
33
+
34
+ # Set server verbosity to 'debug'
35
+ # it can be one of:
36
+ # debug (a lot of information, useful for development/testing)
37
+ # verbose (many rarely useful info, but not a mess like the debug level)
38
+ # notice (moderately verbose, what you want in production probably)
39
+ # warning (only very important / critical messages are logged)
40
+ loglevel verbose
41
+
42
+ # Specify the log file name. Also 'stdout' can be used to force
43
+ # Redis to log on the standard output. Note that if you use standard
44
+ # output for logging but daemonize, logs will be sent to /dev/null
45
+ logfile stdout
46
+
47
+ # Set the number of databases. The default database is DB 0, you can select
48
+ # a different one on a per-connection basis using SELECT <dbid> where
49
+ # dbid is a number between 0 and 'databases'-1
50
+ databases 16
51
+
52
+ ################################ SNAPSHOTTING #################################
53
+ #
54
+ # Save the DB on disk:
55
+ #
56
+ # save <seconds> <changes>
57
+ #
58
+ # Will save the DB if both the given number of seconds and the given
59
+ # number of write operations against the DB occurred.
60
+ #
61
+ # In the example below the behaviour will be to save:
62
+ # after 900 sec (15 min) if at least 1 key changed
63
+ # after 300 sec (5 min) if at least 10 keys changed
64
+ # after 60 sec if at least 10000 keys changed
65
+ #
66
+ # Note: you can disable saving at all commenting all the "save" lines.
67
+
68
+ save 900 1
69
+ save 300 10
70
+ save 60 10000
71
+
72
+ # Compress string objects using LZF when dump .rdb databases?
73
+ # For default that's set to 'yes' as it's almost always a win.
74
+ # If you want to save some CPU in the saving child set it to 'no' but
75
+ # the dataset will likely be bigger if you have compressible values or keys.
76
+ rdbcompression yes
77
+
78
+ # The filename where to dump the DB
79
+ dbfilename dump.rdb
80
+
81
+ # The working directory.
82
+ #
83
+ # The DB will be written inside this directory, with the filename specified
84
+ # above using the 'dbfilename' configuration directive.
85
+ #
86
+ # Also the Append Only File will be created inside this directory.
87
+ #
88
+ # Note that you must specify a directory here, not a file name.
89
+ dir ./
90
+
91
+ ################################# REPLICATION #################################
92
+
93
+ # Master-Slave replication. Use slaveof to make a Redis instance a copy of
94
+ # another Redis server. Note that the configuration is local to the slave
95
+ # so for example it is possible to configure the slave to save the DB with a
96
+ # different interval, or to listen to another port, and so on.
97
+ #
98
+ # slaveof <masterip> <masterport>
99
+
100
+ # If the master is password protected (using the "requirepass" configuration
101
+ # directive below) it is possible to tell the slave to authenticate before
102
+ # starting the replication synchronization process, otherwise the master will
103
+ # refuse the slave request.
104
+ #
105
+ # masterauth <master-password>
106
+
107
+ ################################## SECURITY ###################################
108
+
109
+ # Require clients to issue AUTH <PASSWORD> before processing any other
110
+ # commands. This might be useful in environments in which you do not trust
111
+ # others with access to the host running redis-server.
112
+ #
113
+ # This should stay commented out for backward compatibility and because most
114
+ # people do not need auth (e.g. they run their own servers).
115
+ #
116
+ # Warning: since Redis is pretty fast an outside user can try up to
117
+ # 150k passwords per second against a good box. This means that you should
118
+ # use a very strong password otherwise it will be very easy to break.
119
+ #
120
+ # requirepass foobared
121
+
122
+ ################################### LIMITS ####################################
123
+
124
+ # Set the max number of connected clients at the same time. By default there
125
+ # is no limit, and it's up to the number of file descriptors the Redis process
126
+ # is able to open. The special value '0' means no limits.
127
+ # Once the limit is reached Redis will close all the new connections sending
128
+ # an error 'max number of clients reached'.
129
+ #
130
+ # maxclients 128
131
+
132
+ # Don't use more memory than the specified amount of bytes.
133
+ # When the memory limit is reached Redis will try to remove keys with an
134
+ # EXPIRE set. It will try to start freeing keys that are going to expire
135
+ # in little time and preserve keys with a longer time to live.
136
+ # Redis will also try to remove objects from free lists if possible.
137
+ #
138
+ # If all this fails, Redis will start to reply with errors to commands
139
+ # that will use more memory, like SET, LPUSH, and so on, and will continue
140
+ # to reply to most read-only commands like GET.
141
+ #
142
+ # WARNING: maxmemory can be a good idea mainly if you want to use Redis as a
143
+ # 'state' server or cache, not as a real DB. When Redis is used as a real
144
+ # database the memory usage will grow over the weeks, it will be obvious if
145
+ # it is going to use too much memory in the long run, and you'll have the time
146
+ # to upgrade. With maxmemory after the limit is reached you'll start to get
147
+ # errors for write operations, and this may even lead to DB inconsistency.
148
+ #
149
+ # maxmemory <bytes>
150
+
151
+ ############################## APPEND ONLY MODE ###############################
152
+
153
+ # By default Redis asynchronously dumps the dataset on disk. If you can live
154
+ # with the idea that the latest records will be lost if something like a crash
155
+ # happens this is the preferred way to run Redis. If instead you care a lot
156
+ # about your data and don't want to that a single record can get lost you should
157
+ # enable the append only mode: when this mode is enabled Redis will append
158
+ # every write operation received in the file appendonly.aof. This file will
159
+ # be read on startup in order to rebuild the full dataset in memory.
160
+ #
161
+ # Note that you can have both the async dumps and the append only file if you
162
+ # like (you have to comment the "save" statements above to disable the dumps).
163
+ # Still if append only mode is enabled Redis will load the data from the
164
+ # log file at startup ignoring the dump.rdb file.
165
+ #
166
+ # IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append
167
+ # log file in background when it gets too big.
168
+
169
+ appendonly no
170
+
171
+ # The name of the append only file (default: "appendonly.aof")
172
+ # appendfilename appendonly.aof
173
+
174
+ # The fsync() call tells the Operating System to actually write data on disk
175
+ # instead to wait for more data in the output buffer. Some OS will really flush
176
+ # data on disk, some other OS will just try to do it ASAP.
177
+ #
178
+ # Redis supports three different modes:
179
+ #
180
+ # no: don't fsync, just let the OS flush the data when it wants. Faster.
181
+ # always: fsync after every write to the append only log . Slow, Safest.
182
+ # everysec: fsync only if one second passed since the last fsync. Compromise.
183
+ #
184
+ # The default is "everysec" that's usually the right compromise between
185
+ # speed and data safety. It's up to you to understand if you can relax this to
186
+ # "no" that will will let the operating system flush the output buffer when
187
+ # it wants, for better performances (but if you can live with the idea of
188
+ # some data loss consider the default persistence mode that's snapshotting),
189
+ # or on the contrary, use "always" that's very slow but a bit safer than
190
+ # everysec.
191
+ #
192
+ # If unsure, use "everysec".
193
+
194
+ # appendfsync always
195
+ appendfsync everysec
196
+ # appendfsync no
197
+
198
+ # When the AOF fsync policy is set to always or everysec, and a background
199
+ # saving process (a background save or AOF log background rewriting) is
200
+ # performing a lot of I/O against the disk, in some Linux configurations
201
+ # Redis may block too long on the fsync() call. Note that there is no fix for
202
+ # this currently, as even performing fsync in a different thread will block
203
+ # our synchronous write(2) call.
204
+ #
205
+ # In order to mitigate this problem it's possible to use the following option
206
+ # that will prevent fsync() from being called in the main process while a
207
+ # BGSAVE or BGREWRITEAOF is in progress.
208
+ #
209
+ # This means that while another child is saving the durability of Redis is
210
+ # the same as "appendfsync none", that in pratical terms means that it is
211
+ # possible to lost up to 30 seconds of log in the worst scenario (with the
212
+ # default Linux settings).
213
+ #
214
+ # If you have latency problems turn this to "yes". Otherwise leave it as
215
+ # "no" that is the safest pick from the point of view of durability.
216
+ no-appendfsync-on-rewrite no
217
+
218
+ ################################ VIRTUAL MEMORY ###############################
219
+
220
+ # Virtual Memory allows Redis to work with datasets bigger than the actual
221
+ # amount of RAM needed to hold the whole dataset in memory.
222
+ # In order to do so very used keys are taken in memory while the other keys
223
+ # are swapped into a swap file, similarly to what operating systems do
224
+ # with memory pages.
225
+ #
226
+ # To enable VM just set 'vm-enabled' to yes, and set the following three
227
+ # VM parameters accordingly to your needs.
228
+
229
+ vm-enabled no
230
+ # vm-enabled yes
231
+
232
+ # This is the path of the Redis swap file. As you can guess, swap files
233
+ # can't be shared by different Redis instances, so make sure to use a swap
234
+ # file for every redis process you are running. Redis will complain if the
235
+ # swap file is already in use.
236
+ #
237
+ # The best kind of storage for the Redis swap file (that's accessed at random)
238
+ # is a Solid State Disk (SSD).
239
+ #
240
+ # *** WARNING *** if you are using a shared hosting the default of putting
241
+ # the swap file under /tmp is not secure. Create a dir with access granted
242
+ # only to Redis user and configure Redis to create the swap file there.
243
+ vm-swap-file /tmp/redis.swap
244
+
245
+ # vm-max-memory configures the VM to use at max the specified amount of
246
+ # RAM. Everything that deos not fit will be swapped on disk *if* possible, that
247
+ # is, if there is still enough contiguous space in the swap file.
248
+ #
249
+ # With vm-max-memory 0 the system will swap everything it can. Not a good
250
+ # default, just specify the max amount of RAM you can in bytes, but it's
251
+ # better to leave some margin. For instance specify an amount of RAM
252
+ # that's more or less between 60 and 80% of your free RAM.
253
+ vm-max-memory 0
254
+
255
+ # Redis swap files is split into pages. An object can be saved using multiple
256
+ # contiguous pages, but pages can't be shared between different objects.
257
+ # So if your page is too big, small objects swapped out on disk will waste
258
+ # a lot of space. If you page is too small, there is less space in the swap
259
+ # file (assuming you configured the same number of total swap file pages).
260
+ #
261
+ # If you use a lot of small objects, use a page size of 64 or 32 bytes.
262
+ # If you use a lot of big objects, use a bigger page size.
263
+ # If unsure, use the default :)
264
+ vm-page-size 32
265
+
266
+ # Number of total memory pages in the swap file.
267
+ # Given that the page table (a bitmap of free/used pages) is taken in memory,
268
+ # every 8 pages on disk will consume 1 byte of RAM.
269
+ #
270
+ # The total swap size is vm-page-size * vm-pages
271
+ #
272
+ # With the default of 32-bytes memory pages and 134217728 pages Redis will
273
+ # use a 4 GB swap file, that will use 16 MB of RAM for the page table.
274
+ #
275
+ # It's better to use the smallest acceptable value for your application,
276
+ # but the default is large in order to work in most conditions.
277
+ vm-pages 134217728
278
+
279
+ # Max number of VM I/O threads running at the same time.
280
+ # This threads are used to read/write data from/to swap file, since they
281
+ # also encode and decode objects from disk to memory or the reverse, a bigger
282
+ # number of threads can help with big objects even if they can't help with
283
+ # I/O itself as the physical device may not be able to couple with many
284
+ # reads/writes operations at the same time.
285
+ #
286
+ # The special value of 0 turn off threaded I/O and enables the blocking
287
+ # Virtual Memory implementation.
288
+ vm-max-threads 4
289
+
290
+ ############################### ADVANCED CONFIG ###############################
291
+
292
+ # Glue small output buffers together in order to send small replies in a
293
+ # single TCP packet. Uses a bit more CPU but most of the times it is a win
294
+ # in terms of number of queries per second. Use 'yes' if unsure.
295
+ glueoutputbuf yes
296
+
297
+ # Hashes are encoded in a special way (much more memory efficient) when they
298
+ # have at max a given numer of elements, and the biggest element does not
299
+ # exceed a given threshold. You can configure this limits with the following
300
+ # configuration directives.
301
+ hash-max-zipmap-entries 64
302
+ hash-max-zipmap-value 512
303
+
304
+ # Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in
305
+ # order to help rehashing the main Redis hash table (the one mapping top-level
306
+ # keys to values). The hash table implementation redis uses (see dict.c)
307
+ # performs a lazy rehashing: the more operation you run into an hash table
308
+ # that is rhashing, the more rehashing "steps" are performed, so if the
309
+ # server is idle the rehashing is never complete and some more memory is used
310
+ # by the hash table.
311
+ #
312
+ # The default is to use this millisecond 10 times every second in order to
313
+ # active rehashing the main dictionaries, freeing memory when possible.
314
+ #
315
+ # If unsure:
316
+ # use "activerehashing no" if you have hard latency requirements and it is
317
+ # not a good thing in your environment that Redis can reply form time to time
318
+ # to queries with 2 milliseconds delay.
319
+ #
320
+ # use "activerehashing yes" if you don't have such hard requirements but
321
+ # want to free memory asap when possible.
322
+ activerehashing yes
323
+
324
+ ################################## INCLUDES ###################################
325
+
326
+ # Include one or more other config files here. This is useful if you
327
+ # have a standard template that goes to all redis server but also need
328
+ # to customize a few per-server settings. Include files can include
329
+ # other files, so use this wisely.
330
+ #
331
+ # include /path/to/local.conf
332
+ # include /path/to/other.conf
@@ -0,0 +1,8 @@
1
+ <author pid=''
2
+ info=''
3
+ xmlns='http://xampl.com/redis-test'>
4
+ <book pid=''>
5
+ <author pid=''/>
6
+ <book pid=''/>
7
+ </book>
8
+ </author>
@@ -68,25 +68,25 @@ module Xampl
68
68
  def initialize(out="", skip=[])
69
69
  super()
70
70
 
71
- @out = out
72
- @indent = ""
73
- @indent_step = " "
71
+ @out = out
72
+ @indent = ""
73
+ @indent_step = " "
74
74
  @start_attr_indent = ""
75
- @was_attr = false
75
+ @was_attr = false
76
76
 
77
- @depth = 0
77
+ @depth = 0
78
78
 
79
- @skip = {}
80
- skip.each{ | ns |
79
+ @skip = {}
80
+ skip.each { |ns|
81
81
  @skip[ns] = ns
82
82
  }
83
83
 
84
- @ns_to_prefix = {}
85
- @start_body = nil
86
- @body = ""
87
- @attr_list = nil
84
+ @ns_to_prefix = {}
85
+ @start_body = nil
86
+ @body = ""
87
+ @attr_list = nil
88
88
 
89
- @insert_comment = nil
89
+ @insert_comment = nil
90
90
  end
91
91
 
92
92
  def short_circuit
@@ -95,7 +95,7 @@ module Xampl
95
95
  end
96
96
 
97
97
  def cycle(xampl)
98
- @short_circuit = true
98
+ @short_circuit = true
99
99
  @insert_comment = "<!-- CYCLE -->"
100
100
  return true
101
101
  end
@@ -113,7 +113,7 @@ module Xampl
113
113
 
114
114
  prefix = ns_to_prefix[ns]
115
115
  if (nil == prefix) then
116
- preferred = XamplObject.lookup_preferred_ns_prefix(ns)
116
+ preferred = XamplObject.lookup_preferred_ns_prefix(ns)
117
117
  prefix = "" << preferred << ":" if preferred
118
118
  prefix = "ns" << ns_to_prefix.size.to_s << ":" unless prefix
119
119
  ns_to_prefix[ns] = prefix
@@ -150,7 +150,7 @@ module Xampl
150
150
 
151
151
  def attribute(xampl)
152
152
  @attr_list = []
153
- pid = nil
153
+ pid = nil
154
154
  if (nil != xampl.attributes) then
155
155
  xampl.attributes.each do |attr_spec|
156
156
  unless @skip[attr_spec[2]] then
@@ -207,15 +207,15 @@ module Xampl
207
207
  attribute(xampl)
208
208
  end
209
209
 
210
- tag = xampl.tag
211
- ns = xampl.ns
212
- indent = do_indent
213
- tag_info = "" << "<" << register_ns(ns) << tag
210
+ tag = xampl.tag
211
+ ns = xampl.ns
212
+ indent = do_indent
213
+ tag_info = "" << "<" << register_ns(ns) << tag
214
214
  attr_indent = "" << indent << (" " * tag_info.size)
215
215
  unless @start_body then
216
216
  @start_attr_indent = attr_indent
217
- attr_defn = show_attributes(attr_indent)
218
- @start_body = "" << indent << tag_info << attr_defn
217
+ attr_defn = show_attributes(attr_indent)
218
+ @start_body = "" << indent << tag_info << attr_defn
219
219
  @was_attr = true if 0 < attr_defn.size
220
220
  else
221
221
  @body << indent << tag_info << show_attributes(attr_indent)
@@ -224,7 +224,7 @@ module Xampl
224
224
 
225
225
  def end_element(xampl)
226
226
  tag = xampl.tag
227
- ns = xampl.ns
227
+ ns = xampl.ns
228
228
  if @@compact then
229
229
  @body << "</" << register_ns(ns) << tag << ">"
230
230
  else
@@ -310,33 +310,33 @@ module Xampl
310
310
  end
311
311
 
312
312
  def make_copy(root, translate_pids)
313
- @was_attr = false
313
+ @was_attr = false
314
314
 
315
- @ns_to_prefix = {}
316
- @start_body = nil
317
- @body = ""
318
- @attr_list = nil
315
+ @ns_to_prefix = {}
316
+ @start_body = nil
317
+ @body = ""
318
+ @attr_list = nil
319
319
 
320
320
  @pid_translations_old_to_new = translate_pids
321
321
  @pid_translations_new_to_old = translate_pids.invert
322
322
 
323
323
  # @persisted_xampl_found = { @current_root.get_the_index => root }
324
- @persisted_xampl_found = { (@current_root || root).get_the_index => root } #TODO -- is root ever okay here?
325
- @copies_by_old_pid = {}
324
+ @persisted_xampl_found = {(@current_root || root).get_the_index => root} #TODO -- is root ever okay here?
325
+ @copies_by_old_pid = {}
326
326
 
327
327
  while true do
328
- copy_these = []
328
+ copy_these = []
329
329
 
330
- @persisted_xampl_found.each do | pid, xampl |
330
+ @persisted_xampl_found.each do |pid, xampl|
331
331
  copy_these << xampl unless @copies_by_old_pid[pid]
332
332
  end
333
333
 
334
334
  break if 0 == copy_these.length
335
335
 
336
336
  @persisted_xampl_found = {}
337
- copy_these.each do | xampl |
338
- @current_root = xampl
339
- @out = ""
337
+ copy_these.each do |xampl|
338
+ @current_root = xampl
339
+ @out = ""
340
340
  @copies_by_old_pid[@current_root.get_the_index] = @out
341
341
 
342
342
  copy_xampl(@current_root)
@@ -351,20 +351,20 @@ module Xampl
351
351
  end
352
352
 
353
353
  @@base_pid = Time.now.to_i.to_s + "_"
354
- @@gen_pid = 0
354
+ @@gen_pid = 0
355
355
 
356
356
  def get_the_new_pid(xampl)
357
- current_pid = xampl.get_the_index
357
+ current_pid = xampl.get_the_index
358
358
  @persisted_xampl_found[current_pid] = xampl
359
359
 
360
- new_pid = @pid_translations_old_to_new[current_pid]
360
+ new_pid = @pid_translations_old_to_new[current_pid]
361
361
 
362
362
  unless new_pid then
363
- @@gen_pid += 1
364
- new_pid = @@base_pid + @@gen_pid.to_s
363
+ @@gen_pid += 1
364
+ new_pid = @@base_pid + @@gen_pid.to_s
365
365
 
366
366
  @pid_translations_old_to_new[current_pid] = new_pid
367
- @pid_translations_new_to_old[new_pid] = current_pid
367
+ @pid_translations_new_to_old[new_pid] = current_pid
368
368
  end
369
369
 
370
370
  return new_pid
@@ -386,7 +386,7 @@ module Xampl
386
386
 
387
387
  prefix = ns_to_prefix[ns]
388
388
  if (nil == prefix) then
389
- preferred = XamplObject.lookup_preferred_ns_prefix(ns)
389
+ preferred = XamplObject.lookup_preferred_ns_prefix(ns)
390
390
  prefix = "" << preferred << ":" if preferred
391
391
  prefix = "ns" << ns_to_prefix.size.to_s << ":" unless prefix
392
392
  ns_to_prefix[ns] = prefix
@@ -424,9 +424,9 @@ module Xampl
424
424
  def attribute(xampl)
425
425
  @attr_list = []
426
426
  if (nil != xampl.attributes) then
427
- xampl.attributes.each{ | attr_spec |
427
+ xampl.attributes.each { |attr_spec|
428
428
  prefix = (2 < attr_spec.length) ? register_ns(attr_spec[2]) : ""
429
- value = get_the_new_pid(xampl.instance_variable_get(attr_spec[0]))
429
+ value = get_the_new_pid(xampl.instance_variable_get(attr_spec[0]))
430
430
  @attr_list << (" " << prefix << attr_spec[1] << "='" << attr_esc(value) << "'") \
431
431
  unless nil == value
432
432
  }
@@ -435,12 +435,12 @@ module Xampl
435
435
 
436
436
  def persist_attribute(xampl)
437
437
  @attr_list = []
438
- pattr = xampl.indexed_by.to_s
438
+ pattr = xampl.indexed_by.to_s
439
439
  if (nil != xampl.attributes) then
440
- xampl.attributes.each{ | attr_spec |
440
+ xampl.attributes.each { |attr_spec|
441
441
  if pattr == attr_spec[1] then
442
442
  prefix = (2 < attr_spec.length) ? register_ns(attr_spec[2]) : ""
443
- value = xampl.instance_variable_get(attr_spec[0])
443
+ value = xampl.instance_variable_get(attr_spec[0])
444
444
  @attr_list << (" " << prefix << attr_spec[1] << "='" << attr_esc(value) << "'") \
445
445
  unless nil == value
446
446
  break
@@ -459,12 +459,12 @@ module Xampl
459
459
  end
460
460
 
461
461
  def start_element(xampl)
462
- tag = xampl.tag
463
- ns = xampl.ns
462
+ tag = xampl.tag
463
+ ns = xampl.ns
464
464
  tag_info = "" << "<" << register_ns(ns) << tag
465
465
  unless @start_body then
466
466
  attribute(xampl)
467
- attr_defn = show_attributes
467
+ attr_defn = show_attributes
468
468
  @start_body = "" << tag_info << attr_defn
469
469
  @was_attr = true if 0 < attr_defn.size
470
470
  else
@@ -480,13 +480,13 @@ module Xampl
480
480
 
481
481
  def end_element(xampl)
482
482
  tag = xampl.tag
483
- ns = xampl.ns
483
+ ns = xampl.ns
484
484
  @body << "</" << register_ns(ns) << tag << ">"
485
485
  end
486
486
 
487
487
  def define_ns
488
488
  result = ""
489
- ns_to_prefix.each{ | ns, prefix |
489
+ ns_to_prefix.each { |ns, prefix|
490
490
  result = sprintf("%s xmlns:%s='%s'", result, prefix[0..-2], ns)
491
491
  }
492
492
  return result