codec 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/codec/packed.rb +47 -9
- data/lib/codec/version.rb +1 -1
- data/test/lib/codec/field_test.rb +29 -1
- metadata +2 -2
data/lib/codec/packed.rb
CHANGED
@@ -27,10 +27,17 @@ module Codec
|
|
27
27
|
end
|
28
28
|
|
29
29
|
class Numpck < Packed
|
30
|
-
def
|
30
|
+
def decode_with_length(buf,length)
|
31
|
+
l = eval_length(buf,get_pck_length(length))
|
31
32
|
f = Field.new(@id)
|
32
|
-
|
33
|
-
|
33
|
+
val = buf[0,l].unpack("H*").first
|
34
|
+
if @length.odd?
|
35
|
+
val = val[1,val.length]
|
36
|
+
else
|
37
|
+
val = val[1,val.length] if length.odd?
|
38
|
+
end
|
39
|
+
f.set_value(val.to_i)
|
40
|
+
return f,buf[l,buf.length]
|
34
41
|
end
|
35
42
|
|
36
43
|
def encode(field)
|
@@ -47,13 +54,17 @@ module Codec
|
|
47
54
|
end
|
48
55
|
|
49
56
|
class Strpck < Packed
|
50
|
-
def
|
57
|
+
def decode_with_length(buf,length)
|
58
|
+
l = eval_length(buf,get_pck_length(length))
|
51
59
|
f = Field.new(@id)
|
52
|
-
val = buf[0,
|
53
|
-
|
54
|
-
|
60
|
+
val = buf[0,l].unpack("H*").first
|
61
|
+
if @length.odd?
|
62
|
+
val.chop!
|
63
|
+
else
|
64
|
+
val.chop! if length.odd?
|
65
|
+
end
|
55
66
|
f.set_value(val)
|
56
|
-
return f
|
67
|
+
return f,buf[l,buf.length]
|
57
68
|
end
|
58
69
|
|
59
70
|
def encode(field)
|
@@ -68,5 +79,32 @@ module Codec
|
|
68
79
|
return out
|
69
80
|
end
|
70
81
|
end
|
71
|
-
|
82
|
+
|
83
|
+
class Nstpck < Packed
|
84
|
+
def decode_with_length(buf,length)
|
85
|
+
l = eval_length(buf,get_pck_length(length))
|
86
|
+
f = Field.new(@id)
|
87
|
+
val = buf[0,l].unpack("H*").first
|
88
|
+
if @length.odd?
|
89
|
+
val = val[1,val.length]
|
90
|
+
else
|
91
|
+
val = val[1,val.length] if length.odd?
|
92
|
+
end
|
93
|
+
f.set_value(val)
|
94
|
+
return f,buf[l,buf.length]
|
95
|
+
end
|
96
|
+
|
97
|
+
def encode(field)
|
98
|
+
out = field.get_value
|
99
|
+
if @length > 0
|
100
|
+
out = out.rjust(@length,"0")
|
101
|
+
raise TooLongDataException if out.length > @length
|
102
|
+
end
|
103
|
+
l = out.length
|
104
|
+
out.prepend("0") if out.length.odd?
|
105
|
+
out = [out].pack("H*")
|
106
|
+
return out
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
72
110
|
end
|
data/lib/codec/version.rb
CHANGED
@@ -56,5 +56,33 @@ describe Codec::Field do
|
|
56
56
|
subject.must_equal(Codec::Field.from_array('Test',
|
57
57
|
[['SF1',"123"],['SF2',"321"],['SF3',[['SF31',"456"],['SF32','789']]]]))
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
end
|
61
|
+
|
62
|
+
describe Codec::Field do
|
63
|
+
|
64
|
+
subject { f = Codec::Field.new('Test')
|
65
|
+
sf1 = Codec::Field.new('SF1')
|
66
|
+
sf1.set_value("123")
|
67
|
+
f.add_sub_field(sf1)
|
68
|
+
sf2 = Codec::Field.new('SF2')
|
69
|
+
sf2.set_value("321")
|
70
|
+
f.add_sub_field(sf2)
|
71
|
+
sf3 = Codec::Field.new('SF3')
|
72
|
+
sf31 = Codec::Field.new('SF31')
|
73
|
+
sf31.set_value("456")
|
74
|
+
sf3.add_sub_field(sf31)
|
75
|
+
sf32 = Codec::Field.new('SF32')
|
76
|
+
sf32.set_value("789")
|
77
|
+
sf3.add_sub_field(sf32)
|
78
|
+
f.add_sub_field(sf3)
|
79
|
+
f
|
80
|
+
[Codec::Field.from_array('Test',[['SF1',"123"],['SF2',"321"],
|
81
|
+
['SF3',[['SF31',"456"],['SF32','789']]]]),f]
|
82
|
+
}
|
83
|
+
|
84
|
+
it "must return one uniq element" do
|
85
|
+
subject.uniq.size.must_equal(1)
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|