udat 1.1.1 → 1.1.2
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/lib/udat.rb +43 -31
- metadata +2 -2
data/lib/udat.rb
CHANGED
@@ -316,40 +316,49 @@ class Udat
|
|
316
316
|
# The object must be enclosed in square brackets.
|
317
317
|
def self.read_from_stream(io)
|
318
318
|
begin
|
319
|
-
|
320
|
-
return nil if char.nil? or char.length < 1
|
321
|
-
if char == "\\"
|
319
|
+
begin
|
322
320
|
char = io.read(1)
|
323
321
|
return nil if char.nil? or char.length < 1
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
end
|
333
|
-
if char == "\\"
|
334
|
-
buffer << char
|
322
|
+
if char == "\\"
|
323
|
+
char = io.read(1)
|
324
|
+
return nil if char.nil? or char.length < 1
|
325
|
+
end
|
326
|
+
end while char != "[" and char != "<"
|
327
|
+
buffer = (char == "[") ? "" : nil
|
328
|
+
level = 1
|
329
|
+
while true
|
335
330
|
char = io.read(1)
|
336
331
|
if char.nil? or char.length < 1
|
337
332
|
return EOFError, "Unexpected end of file in UDAT stream."
|
338
333
|
end
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
334
|
+
if char == "\\"
|
335
|
+
buffer << char if buffer
|
336
|
+
char = io.read(1)
|
337
|
+
if char.nil? or char.length < 1
|
338
|
+
return EOFError, "Unexpected end of file in UDAT stream."
|
339
|
+
end
|
340
|
+
elsif char == "[" or char == "<"
|
341
|
+
level += 1
|
342
|
+
elsif char == "]" or char == ">"
|
343
|
+
level -= 1
|
344
|
+
end
|
345
|
+
if level > 0
|
346
|
+
buffer << char if buffer
|
347
|
+
else
|
348
|
+
break
|
349
|
+
end
|
348
350
|
end
|
349
|
-
end
|
351
|
+
end while buffer.nil?
|
350
352
|
return parse(buffer)
|
351
353
|
end
|
352
354
|
|
355
|
+
# Encodes an UDAT object and writes it enclosed by square brackets to a
|
356
|
+
# stream.
|
357
|
+
def write_to_stream(io)
|
358
|
+
io << "[#{self.to_udat}]"
|
359
|
+
return self
|
360
|
+
end
|
361
|
+
|
353
362
|
end
|
354
363
|
|
355
364
|
|
@@ -566,14 +575,13 @@ class UdatCollection < Udat
|
|
566
575
|
end
|
567
576
|
|
568
577
|
# Behaves differently depending on the type of the argument. If the
|
569
|
-
# argument is an Array
|
570
|
-
#
|
571
|
-
#
|
572
|
-
#
|
573
|
-
#
|
578
|
+
# argument is an Array with 2 elements, a new key/value pair is added,
|
579
|
+
# with the key being the first element of the array, and the value being
|
580
|
+
# the second argument of the array. Arrays with any other number of
|
581
|
+
# elements cause an error. If the argument is not an array, then it is
|
582
|
+
# added as a value without a key.
|
574
583
|
def <<(value)
|
575
|
-
if value.
|
576
|
-
value = value.to_ary
|
584
|
+
if value.kind_of? Array
|
577
585
|
unless value.length == 2
|
578
586
|
raise ArgumentError,
|
579
587
|
"#{value.length} array elements found where 2 were expected."
|
@@ -959,5 +967,9 @@ class IO
|
|
959
967
|
def read_udat
|
960
968
|
Udat.read_from_stream(self)
|
961
969
|
end
|
970
|
+
# Calls object.write_to_stream(self).
|
971
|
+
def write_udat(object)
|
972
|
+
object.write_to_stream(self)
|
973
|
+
end
|
962
974
|
end
|
963
975
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: udat
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.1.
|
7
|
-
date: 2007-05-
|
6
|
+
version: 1.1.2
|
7
|
+
date: 2007-05-24 00:00:00 +00:00
|
8
8
|
summary: Parser and generator for UDAT documents, a generic data format similar to XML or YAML.
|
9
9
|
require_paths:
|
10
10
|
- lib/
|