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 CHANGED
@@ -27,10 +27,17 @@ module Codec
27
27
  end
28
28
 
29
29
  class Numpck < Packed
30
- def build_field(buf,length)
30
+ def decode_with_length(buf,length)
31
+ l = eval_length(buf,get_pck_length(length))
31
32
  f = Field.new(@id)
32
- f.set_value(buf[0,length].unpack("H*").first.to_i)
33
- return f
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 build_field(buf,length)
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,length].unpack("H*").first
53
- # TODO : handle odd length for packed field with prefixed length
54
- val.chop! if @length.odd?
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
@@ -1,3 +1,3 @@
1
1
  module Codec
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
@@ -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.10
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-20 00:00:00.000000000 Z
12
+ date: 2013-08-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler