codec 0.0.10 → 0.0.11

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/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