iso8583 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0881d56e13a87bfba361adb50daa0a22b61f2e02
4
- data.tar.gz: 8334f84528ecbad4c5481068706326f6fa7489ed
2
+ SHA256:
3
+ metadata.gz: 4c551d563390f55d323d8aea190eb31b20dcc98f786a9f872faa5df24fd229d1
4
+ data.tar.gz: c448bfe8446285da07c61ac8b5cfbb908477cf98a9e1bf703cfdae47d17cb2c9
5
5
  SHA512:
6
- metadata.gz: 8d259cbf42c0f4abde3af3622aa8792bbe89c6926628cc4adb091c8baf89023e2d1782f386ef1f001288743e60a29ac37db323b692ca58d1fd2bda2a6106da03
7
- data.tar.gz: e242b86a519584d7f9a0e6252b0691cb05f6bd2de8606564ad037615b8ba88906da8e23309bfd4b6696fad0fc13f6d41157cbb1698b69b47095387cf69896594
6
+ metadata.gz: 1fe629ddc4d985d96b63d20e6bacfb7e9c7d7cbe429232a9dcb8f5e972f9be5e0263bb675e11d78e272de4a3c58d0ced9a7a8b2646e2f94d64d0aea8b632f66c
7
+ data.tar.gz: 05bb98f645a560bf44bc2b64884a301b0869f7df1b7694291c82d991abe21538df5b8a08d57ab716e8e30482770e9db8dc6f49146de2ba36aa9640e355265329
data/AUTHORS CHANGED
@@ -5,3 +5,5 @@ Lasse Skindstad Ebert (https://github.com/lasseebert)
5
5
  Joel Ibaceta (https://github.com/joelibaceta)
6
6
  Jackson Harper <jackson@juvo.com>
7
7
  absrd (https://github.com/absrd)
8
+ Nicolas Leger (https://github.com/nicolasleger)
9
+ Jérémie Bonal (https://github.com/Aquaj)
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ 0.2.4
2
+ =========
3
+ better errors for missing bitmap
4
+ cleanup warnings
5
+
1
6
  0.2.3
2
7
  =========
3
8
  Change Fixnum to Integer as Fixnum is deprecated
data/Rakefile CHANGED
@@ -84,7 +84,6 @@ spec = Gem::Specification.new do |s|
84
84
  s.requirements << "none"
85
85
  s.require_path = "lib"
86
86
  s.description = LONG_DESC
87
- s.has_rdoc = true
88
87
  s.authors = ["Tim Becker", "Slava Kravchenko"]
89
88
  s.email = ["tim.becker@kuriositaet.de","cordawyn@gmail.com"]
90
89
  s.homepage = "http://github.com/a2800276/8583/"
@@ -125,7 +124,7 @@ end
125
124
  Rake::TestTask.new do |t|
126
125
  t.libs << "test"
127
126
  t.libs << "."
128
- t.ruby_opts = ["-rubygems"]
127
+ t.ruby_opts = ["-rrubygems"]
129
128
  t.test_files = FileList["test/*.rb"]
130
129
  t.verbose = true
131
130
  end
@@ -72,7 +72,7 @@ if __FILE__==$0
72
72
  mes[2] = 474747474747
73
73
  mes["Processing Code"] = "123456"
74
74
 
75
- pan = mes["Primary Account Number (PAN)"]
75
+ #pan = mes["Primary Account Number (PAN)"]
76
76
  #mes.pan = 47474747474747
77
77
 
78
78
  #puts mes.pan
data/lib/iso8583/codec.rb CHANGED
@@ -113,7 +113,7 @@ module ISO8583
113
113
  [val].pack("H*")
114
114
  }
115
115
  Packed_Number.decoder = lambda{|encoded|
116
- d = encoded.unpack("H*")[0].to_i
116
+ encoded.unpack("H*")[0].to_i
117
117
  }
118
118
 
119
119
  A_Codec = Codec.new
@@ -57,63 +57,75 @@ module ISO8583
57
57
  }
58
58
 
59
59
  LL_BCD = BCDField.new
60
+ LL_BCD.name = "LL_BCD"
60
61
  LL_BCD.length = 2
61
62
  LL_BCD.codec = Packed_Number
62
63
 
63
64
  # Two byte variable length ASCII numeral, payload ASCII numerals
64
65
  LLVAR_N = Field.new
66
+ LLVAR_N.name = "LLVAR_N"
65
67
  LLVAR_N.length = LL
66
68
  LLVAR_N.codec = ASCII_Number
67
69
 
68
70
  # Three byte variable length ASCII numeral, payload ASCII numerals
69
71
  LLLVAR_N = Field.new
72
+ LLLVAR_N.name = "LLLVAR_N"
70
73
  LLLVAR_N.length = LLL
71
74
  LLLVAR_N.codec = ASCII_Number
72
75
 
73
76
  # Two byte variable length ASCII numeral, payload Track2 data
74
77
  LLVAR_Z = Field.new
78
+ LLVAR_Z.name = "LLVAR_Z"
75
79
  LLVAR_Z.length = LL
76
80
  LLVAR_Z.codec = Track2
77
81
 
78
82
  # Two byte variable length ASCII numeral, payload ASCII, fixed length, zeropadded (right)
79
83
  LLVAR_AN = Field.new
84
+ LLVAR_AN.name = "LLVAR_AN"
80
85
  LLVAR_AN.length = LL
81
86
  LLVAR_AN.codec = AN_Codec
82
87
 
83
88
  # Two byte variable length ASCII numeral, payload ASCII+special
84
89
  LLVAR_ANS = Field.new
90
+ LLVAR_ANS.name = "LLVAR_ANS"
85
91
  LLVAR_ANS.length = LL
86
92
  LLVAR_ANS.codec = ANS_Codec
87
93
 
88
94
  # Three byte variable length ASCII numeral, payload ASCII, fixed length, zeropadded (right)
89
95
  LLLVAR_AN = Field.new
96
+ LLLVAR_AN.name = "LLLVAR_AN"
90
97
  LLLVAR_AN.length = LLL
91
98
  LLLVAR_AN.codec = AN_Codec
92
99
 
93
100
  # Three byte variable length ASCII numeral, payload ASCII+special
94
101
  LLLVAR_ANS = Field.new
102
+ LLLVAR_ANS.name = "LLLVAR_ANS"
95
103
  LLLVAR_ANS.length = LLL
96
104
  LLLVAR_ANS.codec = ANS_Codec
97
105
 
98
106
  # Two byte variable length binary payload
99
107
  LLVAR_B = Field.new
108
+ LLVAR_B.name = "LLVAR_B"
100
109
  LLVAR_B.length = LL
101
110
  LLVAR_B.codec = Null_Codec
102
111
 
103
112
 
104
113
  # Three byte variable length binary payload
105
114
  LLLVAR_B = Field.new
115
+ LLLVAR_B.name = "LLLVAR_B"
106
116
  LLLVAR_B.length = LLL
107
117
  LLLVAR_B.codec = Null_Codec
108
118
 
109
119
  # Fixed lengh numerals, repesented in ASCII, padding right justified using zeros
110
120
  N = Field.new
121
+ N.name = "N"
111
122
  N.codec = ASCII_Number
112
123
  N.padding = lambda {|val, len|
113
124
  sprintf("%0#{len}d", val)
114
125
  }
115
126
 
116
127
  N_BCD = BCDField.new
128
+ N_BCD.name = "N_BCD"
117
129
  N_BCD.codec = Packed_Number
118
130
 
119
131
  PADDING_LEFT_JUSTIFIED_SPACES = lambda {|val, len|
@@ -122,25 +134,30 @@ module ISO8583
122
134
 
123
135
  # Fixed length ASCII letters [A-Za-z]
124
136
  A = Field.new
137
+ A.name = "A"
125
138
  A.codec = A_Codec
126
139
 
127
140
  # Fixed lengh ASCII [A-Za-z0-9], padding left justified using spaces.
128
141
  AN = Field.new
142
+ AN.name = "AN"
129
143
  AN.codec = AN_Codec
130
144
  AN.padding = PADDING_LEFT_JUSTIFIED_SPACES
131
145
 
132
146
  # Fixed lengh ASCII [A-Za-z0-9] and space, padding left, spaces
133
147
  ANP = Field.new
148
+ ANP.name = "ANP"
134
149
  ANP.codec = ANP_Codec
135
150
  ANP.padding = PADDING_LEFT_JUSTIFIED_SPACES
136
151
 
137
152
  # Fixed length ASCII [\x20-\x7E], padding left, spaces
138
153
  ANS = Field.new
154
+ ANS.name = ANS
139
155
  ANS.codec = ANS_Codec
140
156
  ANS.padding = PADDING_LEFT_JUSTIFIED_SPACES
141
157
 
142
158
  # Binary data, padding left using nulls (0x00)
143
159
  B = Field.new
160
+ B.name = "B"
144
161
  B.codec = Null_Codec
145
162
  B.padding = lambda {|val, len|
146
163
  while val.length < len
@@ -151,24 +168,29 @@ module ISO8583
151
168
 
152
169
  # Date, formatted as described in ASCII numerals
153
170
  MMDDhhmmss = Field.new
171
+ MMDDhhmmss.name = "MMDDhhmmss"
154
172
  MMDDhhmmss.codec = MMDDhhmmssCodec
155
173
  MMDDhhmmss.length = 10
156
174
 
157
175
  #Date, formatted as described in ASCII numerals
158
176
  YYMMDDhhmmss = Field.new
177
+ YYMMDDhhmmss.name = "YYMMDDhhmmss"
159
178
  YYMMDDhhmmss.codec = YYMMDDhhmmssCodec
160
179
  YYMMDDhhmmss.length = 12
161
180
 
162
181
  #Date, formatted as described in ASCII numerals
163
182
  YYMM = Field.new
183
+ YYMM.name = "YYMM"
164
184
  YYMM.codec = YYMMCodec
165
185
  YYMM.length = 4
166
186
 
167
187
  MMDD = Field.new
188
+ MMDD.name = "MMDD"
168
189
  MMDD.codec = MMDDCodec
169
190
  MMDD.length = 4
170
191
 
171
192
  Hhmmss = Field.new
193
+ Hhmmss.name = "Hhmmss"
172
194
  Hhmmss.codec = HhmmssCodec
173
195
  Hhmmss.length = 6
174
196
 
@@ -135,7 +135,7 @@ module ISO8583
135
135
  # mes = MyMessage.new
136
136
  # mes.mti = 1100 # or mes.mti = "Authorization Request Acquirer Gateway"
137
137
  def mti=(value)
138
- num, name = _get_mti_definition(value)
138
+ num, _ = _get_mti_definition(value)
139
139
  @mti = num
140
140
  end
141
141
 
@@ -343,15 +343,19 @@ module ISO8583
343
343
  # @values[bmp] = bmp_def
344
344
  }
345
345
  end
346
-
346
+
347
347
  # Parse the bytes `str` returning a message of the defined type.
348
+ #
349
+ # returns an instance of Message
350
+ #
351
+ # will raise an ISO8583Exception if the bitmap definition can't be found
348
352
  def parse(str)
349
353
  str = str.force_encoding('ASCII-8BIT')
350
354
  message = self.new
351
355
  message.mti, rest = _mti_format.parse(str)
352
356
  bmp,rest = Bitmap.parse(rest)
353
357
  bmp.each {|bit|
354
- bmp_def = _definitions[bit]
358
+ bmp_def = message._get_definition(bit)
355
359
  value, rest = bmp_def.field.parse(rest)
356
360
  message[bit] = value
357
361
  }
@@ -1,4 +1,4 @@
1
1
  # -*- mode: ruby; encoding: utf-8; tab-width: 2; indent-tabs-mode: nil -*-
2
2
  module ISO8583
3
- VERSION = "0.2.3"
3
+ VERSION = "0.2.4"
4
4
  end
data/test/BitmapTests.rb CHANGED
@@ -22,14 +22,14 @@ class BitmapTests < Test::Unit::TestCase
22
22
 
23
23
  assert_raises(ISO8583Exception) {b.set 1000 }
24
24
  assert_raises(ISO8583Exception) { b.set 1 }
25
- assert_raises(ISO8583Exception) { b.set -1 }
25
+ assert_raises(ISO8583Exception) { b.set(-1) }
26
26
  end
27
27
 
28
28
  def test_out_of_bounds_errors
29
29
  b = Bitmap.new
30
30
  assert_raises(ISO8583Exception) {b.set 1000 }
31
31
  assert_raises(ISO8583Exception) { b.set 1 }
32
- assert_raises(ISO8583Exception) { b.set -1 }
32
+ assert_raises(ISO8583Exception) { b.set(-1) }
33
33
  end
34
34
 
35
35
  def test_parse_bmp
@@ -82,7 +82,7 @@ class BitmapTests < Test::Unit::TestCase
82
82
  tst = "\x80\x00\x10\x20\x40\x81\x02\x04\x08\x10\x20\x40\x81\x02\x04\x08"
83
83
  bmp = Bitmap.new tst
84
84
  arr = []
85
- first = bmp.each{|bit|
85
+ bmp.each{|bit|
86
86
  arr.push bit
87
87
  }
88
88
  assert_equal 20, arr.first
data/test/message_test.rb CHANGED
@@ -38,18 +38,25 @@ class MessageTest < Test::Unit::TestCase
38
38
  pan = 474747474747
39
39
 
40
40
  assert_raises(ISO8583Exception) {
41
- mes = BerlinMessage.parse "@\000\000\000\000\000\000\00012474747474747"
41
+ BerlinMessage.parse "@\000\000\000\000\000\000\00012474747474747"
42
42
  }
43
43
  mes = BerlinMessage.parse "1430@\000\000\000\000\000\000\00012474747474747"
44
44
  assert_equal pan, mes.pan
45
45
  assert_equal 1430, mes.mti
46
46
  end
47
47
 
48
+ def test_unknown_field
49
+ assert_raises(ISO8583Exception.new("no definition for field: 8")) {
50
+ mes = BerlinMessage.parse "1430A\000\000\000\000\000\000\00012474747474747"
51
+ }
52
+ end
53
+
48
54
  def test_rescue_standard_error
49
55
  rescued = false
50
56
  begin
51
57
  BerlinMessage.parse("bogus")
52
58
  rescue => error
59
+ assert_instance_of ISO8583Exception, error
53
60
  rescued = true
54
61
  end
55
62
 
@@ -168,8 +175,8 @@ END
168
175
  mes[64] = "\xF0\xF0\xF0\xF0"
169
176
 
170
177
  bytes = mes.to_b
171
- mes2 = BerlinMessage.parse(mes.to_b)
172
- assert_equal(mes.to_b, mes2.to_b)
178
+ mes2 = BerlinMessage.parse(bytes)
179
+ assert_equal(bytes, mes2.to_b)
173
180
  end
174
181
 
175
182
  def test_remove_field
data/test/test_codec.rb CHANGED
@@ -101,7 +101,7 @@ class FieldTest < Test::Unit::TestCase
101
101
  end
102
102
  def test_A_Codec
103
103
  assert_raise(ISO8583Exception) {
104
- dt = A_Codec.encode "!!!"
104
+ A_Codec.encode "!!!"
105
105
  }
106
106
  assert_equal "bla", AN_Codec.encode("bla")
107
107
  assert_equal "bla", AN_Codec.decode("bla")
@@ -109,7 +109,7 @@ class FieldTest < Test::Unit::TestCase
109
109
 
110
110
  def test_AN_Codec
111
111
  assert_raise(ISO8583Exception) {
112
- dt = AN_Codec.encode "!!!"
112
+ AN_Codec.encode "!!!"
113
113
  }
114
114
  assert_equal "bla", AN_Codec.encode("bla")
115
115
  assert_equal "bla", AN_Codec.decode("bla")
@@ -117,10 +117,10 @@ class FieldTest < Test::Unit::TestCase
117
117
 
118
118
  def test_Track2_Codec
119
119
  assert_raise(ISO8583Exception) {
120
- dt = Track2.encode "!!!"
120
+ Track2.encode "!!!"
121
121
  }
122
122
  assert_raise(ISO8583Exception) {
123
- dt = Track2.encode ";12312312=123?5"
123
+ Track2.encode ";12312312=123?5"
124
124
  }
125
125
  assert_equal ";123123123=123?5", Track2.encode(";123123123=123?5")
126
126
  assert_equal ";123123123=123?5", Track2.decode(";123123123=123?5")
@@ -133,10 +133,10 @@ class FieldTest < Test::Unit::TestCase
133
133
  assert_equal "\x02", Packed_Number.encode(2)
134
134
  assert_equal "\x02\x55", Packed_Number.encode(0xff)
135
135
  assert_raise(ISO8583Exception) {
136
- dt = Packed_Number.encode ";12312312=123?5"
136
+ Packed_Number.encode ";12312312=123?5"
137
137
  }
138
138
  assert_raise(ISO8583Exception) {
139
- dt = Packed_Number.encode "F"
139
+ Packed_Number.encode "F"
140
140
  }
141
141
  end
142
142
 
@@ -145,7 +145,7 @@ class FieldTest < Test::Unit::TestCase
145
145
  BE_U16.encode 2**16
146
146
  }
147
147
  assert_raise(ISO8583Exception) {
148
- BE_U16.encode -1
148
+ BE_U16.encode(-1)
149
149
  }
150
150
  assert_equal "\0\0", BE_U16.encode(0)
151
151
  expected = "\xff\xff".force_encoding('ASCII-8BIT')
@@ -164,7 +164,7 @@ class FieldTest < Test::Unit::TestCase
164
164
  BE_U32.encode 2**32
165
165
  }
166
166
  assert_raise(ISO8583Exception) {
167
- BE_U32.encode -1
167
+ BE_U32.encode(-1)
168
168
  }
169
169
  assert_equal "\0\0\0\0", BE_U32.encode(0)
170
170
  expected = "\xff\xff\xff\xff".force_encoding('ASCII-8BIT')
data/test/test_fields.rb CHANGED
@@ -10,7 +10,7 @@ class FieldTest < Test::Unit::TestCase
10
10
  assert_equal "456", rest
11
11
 
12
12
  assert_raise(ISO8583ParseException) {
13
- l,rest = LLL.parse "12"
13
+ _,rest = LLL.parse "12"
14
14
  }
15
15
 
16
16
  enc = LLL.encode 123
@@ -50,10 +50,10 @@ class FieldTest < Test::Unit::TestCase
50
50
  assert_equal "123ABC", value
51
51
  assert_equal "", rest
52
52
  assert_raise(ISO8583ParseException) {
53
- l,rest = LLLVAR_AN.parse "12"
53
+ _,rest = LLLVAR_AN.parse "12"
54
54
  }
55
55
  assert_raise(ISO8583ParseException) {
56
- l,rest = LLVAR_AN.parse "12123"
56
+ _,rest = LLVAR_AN.parse "12123"
57
57
  }
58
58
 
59
59
  enc = LLVAR_AN.encode "123A"
@@ -83,10 +83,10 @@ class FieldTest < Test::Unit::TestCase
83
83
  assert_equal 1234, value
84
84
  assert_equal "", rest
85
85
  assert_raise(ISO8583ParseException) {
86
- l,rest = LLLVAR_N.parse "12"
86
+ _,rest = LLLVAR_N.parse "12"
87
87
  }
88
88
  assert_raise(ISO8583ParseException) {
89
- l,rest = LLVAR_N.parse "12123"
89
+ _,rest = LLVAR_N.parse "12123"
90
90
  }
91
91
 
92
92
  enc = LLVAR_N.encode 1234
@@ -116,10 +116,10 @@ class FieldTest < Test::Unit::TestCase
116
116
  assert_equal ";123123123=123?5", value
117
117
  assert_equal "", rest
118
118
  assert_raise(ISO8583ParseException) {
119
- l,rest = LLVAR_Z.parse "12"
119
+ _,rest = LLVAR_Z.parse "12"
120
120
  }
121
121
  assert_raise(ISO8583ParseException) {
122
- l,rest = LLVAR_Z.parse "17;123123123=123?5"
122
+ _,rest = LLVAR_Z.parse "17;123123123=123?5"
123
123
  }
124
124
 
125
125
  enc = LLVAR_Z.encode ";123123123=123?5"
@@ -213,6 +213,7 @@ class FieldTest < Test::Unit::TestCase
213
213
  fld.length=3
214
214
  value, rest = fld.parse "\x01\x23\x45"
215
215
  assert_equal 123, value
216
+ assert_equal "\x45", rest
216
217
 
217
218
  assert_equal "\x01\x23", fld.encode(123)
218
219
  assert_equal "\x01\x23", fld.encode("123")
@@ -241,6 +242,7 @@ class FieldTest < Test::Unit::TestCase
241
242
  assert_equal 12, dt.hour
242
243
  assert_equal 34, dt.min
243
244
  assert_equal 56, dt.sec
245
+ assert_equal "", rest
244
246
 
245
247
  assert_raise(ISO8583Exception) {
246
248
  fld.encode 1234567
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iso8583
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Becker
@@ -9,10 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-08-15 00:00:00.000000000 Z
12
+ date: 2021-07-04 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: |
15
- Ruby implementation of ISO 8583 financial messaging
14
+ description: 'Ruby implementation of ISO 8583 financial messaging
15
+
16
+ '
16
17
  email:
17
18
  - tim.becker@kuriositaet.de
18
19
  - cordawyn@gmail.com
@@ -20,6 +21,13 @@ executables: []
20
21
  extensions: []
21
22
  extra_rdoc_files: []
22
23
  files:
24
+ - AUTHORS
25
+ - CHANGELOG
26
+ - Gemfile
27
+ - LICENSE
28
+ - README.md
29
+ - Rakefile
30
+ - TODO
23
31
  - lib/8583.rb
24
32
  - lib/iso8583.rb
25
33
  - lib/iso8583/berlin.rb
@@ -31,14 +39,6 @@ files:
31
39
  - lib/iso8583/message.rb
32
40
  - lib/iso8583/util.rb
33
41
  - lib/iso8583/version.rb
34
- - AUTHORS
35
- - CHANGELOG
36
- - Gemfile
37
- - Gemfile.lock
38
- - LICENSE
39
- - README.md
40
- - Rakefile
41
- - TODO
42
42
  - test/BitmapTests.rb
43
43
  - test/message_test.rb
44
44
  - test/test_codec.rb
@@ -55,18 +55,17 @@ require_paths:
55
55
  - lib
56
56
  required_ruby_version: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - '>='
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  required_rubygems_version: !ruby/object:Gem::Requirement
62
62
  requirements:
63
- - - '>='
63
+ - - ">="
64
64
  - !ruby/object:Gem::Version
65
65
  version: '0'
66
66
  requirements:
67
67
  - none
68
- rubyforge_project: iso8583
69
- rubygems_version: 2.0.14.1
68
+ rubygems_version: 3.1.2
70
69
  signing_key:
71
70
  specification_version: 4
72
71
  summary: 'iso8583: Ruby implementation of ISO 8583 financial messaging'
data/Gemfile.lock DELETED
@@ -1,38 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- iso8583 (0.3.0)
5
- test-unit (~> 3.0.0)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- diff-lcs (1.2.5)
11
- power_assert (0.2.4)
12
- rake (10.4.2)
13
- rspec (3.3.0)
14
- rspec-core (~> 3.3.0)
15
- rspec-expectations (~> 3.3.0)
16
- rspec-mocks (~> 3.3.0)
17
- rspec-core (3.3.2)
18
- rspec-support (~> 3.3.0)
19
- rspec-expectations (3.3.1)
20
- diff-lcs (>= 1.2.0, < 2.0)
21
- rspec-support (~> 3.3.0)
22
- rspec-mocks (3.3.2)
23
- diff-lcs (>= 1.2.0, < 2.0)
24
- rspec-support (~> 3.3.0)
25
- rspec-support (3.3.0)
26
- test-unit (3.0.9)
27
- power_assert
28
-
29
- PLATFORMS
30
- ruby
31
-
32
- DEPENDENCIES
33
- iso8583!
34
- rake
35
- rspec (~> 3.3.0)
36
-
37
- BUNDLED WITH
38
- 1.10.6