binaryparse 0.1.4 → 0.1.5
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/binaryparse.gemspec +1 -1
- data/lib/blocker.rb +29 -5
- data/test/test_blocker.rb +26 -17
- metadata +1 -2
- data/binaryparse-0.1.4.gem +0 -0
data/binaryparse.gemspec
CHANGED
data/lib/blocker.rb
CHANGED
@@ -144,10 +144,14 @@ module BinaryBlocker
|
|
144
144
|
if @post_deblock
|
145
145
|
self.value = @post_deblock.call(self.value)
|
146
146
|
end
|
147
|
-
self.value
|
147
|
+
self.value || self.valid?
|
148
148
|
end
|
149
149
|
end
|
150
|
-
|
150
|
+
|
151
|
+
def key_value?
|
152
|
+
@opts[:key]
|
153
|
+
end
|
154
|
+
|
151
155
|
protected
|
152
156
|
|
153
157
|
# Override valid? to allow check constraints on a particular
|
@@ -315,6 +319,7 @@ module BinaryBlocker
|
|
315
319
|
sym = sym.to_s
|
316
320
|
if sym[-1] == ?=
|
317
321
|
if pos = @lookup[sym[0..-2].to_sym]
|
322
|
+
raise NoMethodError.new("undefined method `#{sym}''") if @value[pos].key_value?
|
318
323
|
return @value[pos].value = args.first
|
319
324
|
end
|
320
325
|
end
|
@@ -479,13 +484,23 @@ module BinaryBlocker
|
|
479
484
|
buffer = io.read(@bytes)
|
480
485
|
result = buffer.unpack(@format)
|
481
486
|
year, month, day = result.first.unpack("A4A2A2").map { |v| v.to_i }
|
482
|
-
if
|
487
|
+
if month.zero?
|
483
488
|
nil
|
484
489
|
else
|
485
490
|
Date.civil(year, month, day)
|
486
491
|
end
|
487
492
|
end
|
488
|
-
|
493
|
+
|
494
|
+
def valid?
|
495
|
+
case @value
|
496
|
+
when Date : true
|
497
|
+
when Time : true
|
498
|
+
when nil : true
|
499
|
+
else
|
500
|
+
false
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
489
504
|
end
|
490
505
|
BinaryBlocker.register_klass(:date, PackedDateEncoder)
|
491
506
|
|
@@ -507,13 +522,22 @@ module BinaryBlocker
|
|
507
522
|
buffer = io.read(@bytes)
|
508
523
|
result = buffer.unpack(@format)
|
509
524
|
year, month, day, hour, min, sec = result.first.unpack("A4A2A2A2A2A2").map { |v| v.to_i }
|
510
|
-
if
|
525
|
+
if month.zero?
|
511
526
|
nil
|
512
527
|
else
|
513
528
|
Time.local(year, month, day, hour, min, sec)
|
514
529
|
end
|
515
530
|
end
|
516
531
|
|
532
|
+
def valid?
|
533
|
+
case @value
|
534
|
+
when Time : true
|
535
|
+
when nil : true
|
536
|
+
else
|
537
|
+
false
|
538
|
+
end
|
539
|
+
end
|
540
|
+
|
517
541
|
end
|
518
542
|
BinaryBlocker.register_klass(:time, PackedDateTimeEncoder)
|
519
543
|
BinaryBlocker.register_klass(:datetime, PackedDateTimeEncoder)
|
data/test/test_blocker.rb
CHANGED
@@ -24,20 +24,14 @@ class TestBlocker < Test::Unit::TestCase
|
|
24
24
|
|
25
25
|
def test_simple_valid
|
26
26
|
bb = BBTest2.new
|
27
|
-
bb.foo = 32
|
28
27
|
bb.bar = 24
|
29
28
|
|
30
|
-
assert_equal(32, bb.foo)
|
31
29
|
assert_equal(24, bb.bar)
|
32
|
-
assert(!bb.valid?)
|
33
|
-
|
34
|
-
bb.foo = 42
|
35
30
|
assert(bb.valid?)
|
36
31
|
end
|
37
32
|
|
38
33
|
def test_round_trip
|
39
34
|
bb = BBTest2.new
|
40
|
-
bb.foo = 42
|
41
35
|
bb.bar = 21
|
42
36
|
buf = bb.block
|
43
37
|
|
@@ -53,9 +47,9 @@ class TestBlocker < Test::Unit::TestCase
|
|
53
47
|
|
54
48
|
def test_failed_deblock
|
55
49
|
bb = BBTest2.new
|
56
|
-
bb.foo = 43
|
57
50
|
bb.bar = 21
|
58
51
|
buf = bb.block
|
52
|
+
buf[0] = 0
|
59
53
|
|
60
54
|
bb2 = BBTest2.new
|
61
55
|
status = bb2.deblock(StringIO.new(buf))
|
@@ -65,7 +59,6 @@ class TestBlocker < Test::Unit::TestCase
|
|
65
59
|
BBTest2.new(StringIO.new(buf))
|
66
60
|
end
|
67
61
|
|
68
|
-
bb.foo = 42
|
69
62
|
io = StringIO.new(bb.block)
|
70
63
|
assert(bb2.deblock(io))
|
71
64
|
|
@@ -88,7 +81,6 @@ class TestBlocker < Test::Unit::TestCase
|
|
88
81
|
|
89
82
|
def test_has_one_of
|
90
83
|
bs1 = BBSub1.new
|
91
|
-
bs1.foo = 42
|
92
84
|
buf = bs1.block
|
93
85
|
bb = BBTest3.new(StringIO.new(buf))
|
94
86
|
assert(bb)
|
@@ -96,7 +88,6 @@ class TestBlocker < Test::Unit::TestCase
|
|
96
88
|
assert_equal(42, bb.foo.foo)
|
97
89
|
|
98
90
|
bs2 = BBSub2.new
|
99
|
-
bs2.bar = 21
|
100
91
|
io = StringIO.new(bs2.block)
|
101
92
|
bb = BBTest3.new(io)
|
102
93
|
assert(bb)
|
@@ -120,9 +111,7 @@ class TestBlocker < Test::Unit::TestCase
|
|
120
111
|
|
121
112
|
def test_fixed_array
|
122
113
|
bs1 = BBSub1.new
|
123
|
-
bs1.foo = 42
|
124
114
|
bs2 = BBSub2.new
|
125
|
-
bs2.bar = 21
|
126
115
|
|
127
116
|
buf = bs1.block + bs2.block + bs1.block
|
128
117
|
bb = BBTest4.new(buf)
|
@@ -139,11 +128,8 @@ class TestBlocker < Test::Unit::TestCase
|
|
139
128
|
fa = BBTest4.new
|
140
129
|
assert(fa)
|
141
130
|
fa.fooboo[0] = BBSub1.new
|
142
|
-
fa.fooboo[0].foo = 42
|
143
131
|
fa.fooboo[1] = BBSub2.new
|
144
|
-
fa.fooboo[1].bar = 21
|
145
132
|
fa.fooboo[2] = BBSub1.new
|
146
|
-
fa.fooboo[2].foo = 42
|
147
133
|
assert_equal(42, fa.fooboo[0].foo)
|
148
134
|
assert_equal(21, fa.fooboo[1].bar)
|
149
135
|
assert_equal(42, fa.fooboo[2].foo)
|
@@ -167,9 +153,7 @@ class TestBlocker < Test::Unit::TestCase
|
|
167
153
|
|
168
154
|
def test_counted_array
|
169
155
|
bb1 = BBSub1.new
|
170
|
-
bb1.foo = 42
|
171
156
|
bb2 = BBSub2.new
|
172
|
-
bb2.bar = 21
|
173
157
|
|
174
158
|
fa = BBTest5.new
|
175
159
|
assert(fa)
|
@@ -430,4 +414,29 @@ class TestBlocker < Test::Unit::TestCase
|
|
430
414
|
assert_equal('troaeipo', b2.str)
|
431
415
|
end
|
432
416
|
|
417
|
+
class BBDateRecord < BinaryBlocker::Blocker
|
418
|
+
has_one :date, :date
|
419
|
+
end
|
420
|
+
|
421
|
+
def test_null_dates
|
422
|
+
t = BBDateRecord.new
|
423
|
+
assert(buf = t.block)
|
424
|
+
|
425
|
+
t2 = BBDateRecord.new(buf)
|
426
|
+
assert(t2)
|
427
|
+
assert_nil(t2.date)
|
428
|
+
end
|
429
|
+
|
430
|
+
class BBTimeRecord < BinaryBlocker::Blocker
|
431
|
+
has_one :t, :time
|
432
|
+
end
|
433
|
+
|
434
|
+
def test_null_times
|
435
|
+
t = BBTimeRecord.new
|
436
|
+
assert(buf = t.block)
|
437
|
+
|
438
|
+
t2 = BBTimeRecord.new(buf)
|
439
|
+
assert(t2)
|
440
|
+
assert_nil(t2.t)
|
441
|
+
end
|
433
442
|
end
|
metadata
CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: binaryparse
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
6
|
+
version: 0.1.5
|
7
7
|
date: 2006-09-13 00:00:00 -04:00
|
8
8
|
summary: Binaryparse is a simple Ruby DSL to parse semi-complicated binary structures. This includes structures dynamic in length, which cannot be handled by DL::Struct or BitStructEx.
|
9
9
|
require_paths:
|
@@ -29,7 +29,6 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- Patrick Hurley
|
31
31
|
files:
|
32
|
-
- binaryparse-0.1.4.gem
|
33
32
|
- binaryparse.gemspec
|
34
33
|
- examples
|
35
34
|
- lib
|
data/binaryparse-0.1.4.gem
DELETED
File without changes
|