iso8583 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +9 -9
- data/CHANGELOG +15 -0
- data/lib/iso8583.rb +1 -0
- data/lib/iso8583/codec.rb +6 -1
- data/lib/iso8583/field.rb +5 -1
- data/lib/iso8583/fields.rb +10 -0
- data/lib/iso8583/message.rb +7 -3
- data/lib/iso8583/version.rb +1 -1
- data/test/message_test.rb +10 -0
- data/test/test_codec.rb +37 -0
- data/test/test_fields.rb +13 -0
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjVlYWQ5YmQzY2ZlYWVjYWYxODliYTQ4NjViMzhiZDM3Y2NiY2I5Mw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
7
|
-
|
6
|
+
YzQ0OTBiYmI4MGQ0NjViMTI2YzNlM2NiZTUzNTIxZTliYWU4OTQzOQ==
|
7
|
+
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWU4Zjg3NDQwNjdmNThjOWYwZWYyOWEwZTQ5ZDU1ZDFkNWNlZDE5OWFiOTgw
|
10
|
+
NjY4M2QzNWIxNTlkNDAwM2Y5ZjUzZTM3ZTc3ZGNhMGQ3ODI4Zjg1OWVmOGMx
|
11
|
+
YmIzZWE4YWJlNDc5ZGIwNWJjMmMyZDBkZDE2M2EzMjdjNjU0OTg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzQ2YzU2N2E1YzM2YjRjZThiNTdiOWE2NGViYjA1NmMzNWQwZGNjZmJkMTg2
|
14
|
+
MDBlOWU2MTdmOTkyOWZkYmQwYWVmNjJkMTkxMDkyMTY3NDk1MjcyYjI3OWM2
|
15
|
+
MGU1MDVlN2QzNTAxNTAzZjQ4YzA0NmQ2ZmVmMzI0ZDlkMzYyZWQ=
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
0.1.6
|
2
|
+
=========
|
3
|
+
restrict to ruby < 2
|
4
|
+
allow removal of empty fields
|
5
|
+
|
6
|
+
0.1.5
|
7
|
+
=========
|
8
|
+
MMDD Codec
|
9
|
+
BCD encoder checks odd length fields
|
10
|
+
|
11
|
+
0.1.4
|
12
|
+
=========
|
13
|
+
Gemspec
|
14
|
+
reformatting
|
15
|
+
|
1
16
|
0.1.3
|
2
17
|
==========
|
3
18
|
bugfix, field definitions not duplicated
|
data/lib/iso8583.rb
CHANGED
data/lib/iso8583/codec.rb
CHANGED
@@ -58,6 +58,9 @@ module ISO8583
|
|
58
58
|
# [+MMDDhhmmssCodec+] encodes Time, Datetime or String to the described date format, checking
|
59
59
|
# that it is a valid date. Decodes to a DateTime instance, decoding and
|
60
60
|
# encoding perform validity checks!
|
61
|
+
# [+MMDDCodec+] encodes Time, Datetime or String to the described date format, checking
|
62
|
+
# that it is a valid date. Decodes to a DateTime instance, decoding and
|
63
|
+
# encoding perform validity checks!
|
61
64
|
# [+YYMMDDhhmmssCodec+] encodes Time, Datetime or String to the described date format, checking
|
62
65
|
# that it is a valid date. Decodes to a DateTime instance, decoding and
|
63
66
|
# encoding perform validity checks!
|
@@ -134,7 +137,7 @@ module ISO8583
|
|
134
137
|
|
135
138
|
ANS_Codec = Codec.new
|
136
139
|
ANS_Codec.encoder = lambda{|str|
|
137
|
-
raise ISO8583Exception.new("Invalid value: #{str} must be [
|
140
|
+
raise ISO8583Exception.new("Invalid value: #{str} must be [\\x20-\\x7E]") unless str =~ /^[\x20-\x7E]*$/
|
138
141
|
str
|
139
142
|
}
|
140
143
|
ANS_Codec.decoder = PASS_THROUGH_DECODER
|
@@ -192,7 +195,9 @@ module ISO8583
|
|
192
195
|
end
|
193
196
|
|
194
197
|
MMDDhhmmssCodec = _date_codec("%m%d%H%M%S")
|
198
|
+
HhmmssCodec = _date_codec("%H%M%S")
|
195
199
|
YYMMDDhhmmssCodec = _date_codec("%y%m%d%H%M%S")
|
196
200
|
YYMMCodec = _date_codec("%y%m")
|
201
|
+
MMDDCodec = _date_codec("%m%d")
|
197
202
|
|
198
203
|
end
|
data/lib/iso8583/field.rb
CHANGED
@@ -52,7 +52,11 @@ module ISO8583
|
|
52
52
|
# special treatment, you may need to override this method alltogether.
|
53
53
|
# In other cases, the padding has to be implemented by the codec, such as BCD with an odd number of nibbles.
|
54
54
|
def encode(value)
|
55
|
-
|
55
|
+
begin
|
56
|
+
encoded_value = codec.encode(value)
|
57
|
+
rescue ISO8583Exception
|
58
|
+
raise ISO8583Exception.new($!.message+" (#{name})")
|
59
|
+
end
|
56
60
|
|
57
61
|
if padding
|
58
62
|
if padding.arity == 1
|
data/lib/iso8583/fields.rb
CHANGED
@@ -33,8 +33,10 @@ module ISO8583
|
|
33
33
|
# [+ANS+] fixed length ASCII [\x20-\x7E], padding left, spaces
|
34
34
|
# [+B+] binary data, padding left using nulls (0x00)
|
35
35
|
# [+MMDDhhmmss+] Date, formatted as described in ASCII numerals
|
36
|
+
# [+MMDD+] Date, formatted as described in ASCII numerals
|
36
37
|
# [+YYMMDDhhmmss+] Date, formatted as named in ASCII numerals
|
37
38
|
# [+YYMM+] Expiration Date, formatted as named in ASCII numerals
|
39
|
+
# [+Hhmmss+] Date, formatted in ASCII hhmmss
|
38
40
|
|
39
41
|
|
40
42
|
# Special form to de/encode variable length indicators, two bytes ASCII numerals
|
@@ -161,5 +163,13 @@ module ISO8583
|
|
161
163
|
YYMM = Field.new
|
162
164
|
YYMM.codec = YYMMCodec
|
163
165
|
YYMM.length = 4
|
166
|
+
|
167
|
+
MMDD = Field.new
|
168
|
+
MMDD.codec = MMDDCodec
|
169
|
+
MMDD.length = 4
|
170
|
+
|
171
|
+
Hhmmss = Field.new
|
172
|
+
Hhmmss.codec = HhmmssCodec
|
173
|
+
Hhmmss.length = 6
|
164
174
|
|
165
175
|
end
|
data/lib/iso8583/message.rb
CHANGED
@@ -147,9 +147,13 @@ module ISO8583
|
|
147
147
|
# mes[2]=47474747 # bmp 2 is generally the PAN
|
148
148
|
# mes["Primary Account Number"]=47474747 # if thats what you called the field in Message.bmp.
|
149
149
|
def []=(key, value)
|
150
|
-
|
151
|
-
|
152
|
-
|
150
|
+
if value.nil?
|
151
|
+
@values.delete(key)
|
152
|
+
else
|
153
|
+
bmp_def = _get_definition key
|
154
|
+
bmp_def.value = value
|
155
|
+
@values[bmp_def.bmp] = bmp_def
|
156
|
+
end
|
153
157
|
end
|
154
158
|
|
155
159
|
# Retrieve the decoded value of the contents of a bitmap
|
data/lib/iso8583/version.rb
CHANGED
data/test/message_test.rb
CHANGED
@@ -160,4 +160,14 @@ END
|
|
160
160
|
mes2 = BerlinMessage.parse(mes.to_b)
|
161
161
|
assert_equal(mes.to_b, mes2.to_b)
|
162
162
|
end
|
163
|
+
|
164
|
+
def test_remove_field
|
165
|
+
mes = BerlinMessage.new
|
166
|
+
mes.mti = "Network Management Request Response Issuer Gateway or Acquirer Gateway"
|
167
|
+
mes[3] = nil
|
168
|
+
|
169
|
+
assert_nothing_raised do
|
170
|
+
mes.to_b
|
171
|
+
end
|
172
|
+
end
|
163
173
|
end
|
data/test/test_codec.rb
CHANGED
@@ -4,6 +4,24 @@ require 'lib/iso8583'
|
|
4
4
|
include ISO8583
|
5
5
|
|
6
6
|
class FieldTest < Test::Unit::TestCase
|
7
|
+
def test_hhmmssCodec
|
8
|
+
dt = HhmmssCodec.decode "121212"
|
9
|
+
assert_equal DateTime, dt.class
|
10
|
+
assert_equal 12, dt.hour
|
11
|
+
assert_equal 12, dt.min
|
12
|
+
assert_equal 12, dt.sec
|
13
|
+
assert_equal DateTime, dt.class
|
14
|
+
|
15
|
+
assert_raise(ISO8583Exception) {
|
16
|
+
dt = HhmmssCodec.decode "261212"
|
17
|
+
}
|
18
|
+
assert_raise(ISO8583Exception) {
|
19
|
+
dt = HhmmssCodec.encode "121261"
|
20
|
+
}
|
21
|
+
t = Time.new(2002, 10, 31, 2, 2, 2, "+02:00")
|
22
|
+
assert_equal "020202", HhmmssCodec.encode(t)
|
23
|
+
|
24
|
+
end
|
7
25
|
def test_MMDDhhmmssCodec
|
8
26
|
dt = MMDDhhmmssCodec.decode "1212121212"
|
9
27
|
assert_equal DateTime, dt.class
|
@@ -12,6 +30,7 @@ class FieldTest < Test::Unit::TestCase
|
|
12
30
|
assert_equal 12, dt.hour
|
13
31
|
assert_equal 12, dt.min
|
14
32
|
assert_equal 12, dt.sec
|
33
|
+
assert_equal DateTime, dt.class
|
15
34
|
|
16
35
|
assert_raise(ISO8583Exception) {
|
17
36
|
dt = MMDDhhmmssCodec.decode "1312121212"
|
@@ -62,6 +81,24 @@ class FieldTest < Test::Unit::TestCase
|
|
62
81
|
assert_equal "0912", YYMMCodec.encode("0912")
|
63
82
|
end
|
64
83
|
|
84
|
+
def test_YMMCodec
|
85
|
+
dt = MMDDCodec.decode "0812"
|
86
|
+
assert_equal DateTime, dt.class
|
87
|
+
assert_equal 8, dt.month
|
88
|
+
assert_equal 12, dt.day
|
89
|
+
|
90
|
+
assert_raise(ISO8583Exception) {
|
91
|
+
dt = MMDDCodec.decode "1313"
|
92
|
+
}
|
93
|
+
|
94
|
+
assert_raise(ISO8583Exception) {
|
95
|
+
dt = MMDDCodec.encode "0231"
|
96
|
+
}
|
97
|
+
|
98
|
+
assert_equal "0912", MMDDCodec.encode("0912")
|
99
|
+
t = Time.new(2002, 10, 31, 2, 2, 2, "+02:00")
|
100
|
+
assert_equal "1031", MMDDCodec.encode(t)
|
101
|
+
end
|
65
102
|
def test_A_Codec
|
66
103
|
assert_raise(ISO8583Exception) {
|
67
104
|
dt = A_Codec.encode "!!!"
|
data/test/test_fields.rb
CHANGED
@@ -234,4 +234,17 @@ class FieldTest < Test::Unit::TestCase
|
|
234
234
|
fld = YYMMDDhhmmss
|
235
235
|
assert_equal "740808120000", fld.encode("740808120000")
|
236
236
|
end
|
237
|
+
def test_Hhmmss
|
238
|
+
fld = Hhmmss
|
239
|
+
assert_equal "123456", fld.encode("123456")
|
240
|
+
dt, rest = fld.parse("123456")
|
241
|
+
assert_equal 12, dt.hour
|
242
|
+
assert_equal 34, dt.min
|
243
|
+
assert_equal 56, dt.sec
|
244
|
+
|
245
|
+
assert_raise(ISO8583Exception) {
|
246
|
+
fld.encode 1234567
|
247
|
+
}
|
248
|
+
|
249
|
+
end
|
237
250
|
end
|
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.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Becker
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-12-10 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'Ruby implementation of ISO 8583 financial messaging
|
15
15
|
|
@@ -21,6 +21,12 @@ executables: []
|
|
21
21
|
extensions: []
|
22
22
|
extra_rdoc_files: []
|
23
23
|
files:
|
24
|
+
- AUTHORS
|
25
|
+
- CHANGELOG
|
26
|
+
- LICENSE
|
27
|
+
- README
|
28
|
+
- Rakefile
|
29
|
+
- TODO
|
24
30
|
- lib/8583.rb
|
25
31
|
- lib/iso8583.rb
|
26
32
|
- lib/iso8583/berlin.rb
|
@@ -32,12 +38,6 @@ files:
|
|
32
38
|
- lib/iso8583/message.rb
|
33
39
|
- lib/iso8583/util.rb
|
34
40
|
- lib/iso8583/version.rb
|
35
|
-
- AUTHORS
|
36
|
-
- CHANGELOG
|
37
|
-
- LICENSE
|
38
|
-
- README
|
39
|
-
- Rakefile
|
40
|
-
- TODO
|
41
41
|
- test/BitmapTests.rb
|
42
42
|
- test/message_test.rb
|
43
43
|
- test/test_codec.rb
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
65
65
|
- none
|
66
66
|
rubyforge_project: iso8583
|
67
|
-
rubygems_version: 2.
|
67
|
+
rubygems_version: 2.2.2
|
68
68
|
signing_key:
|
69
69
|
specification_version: 4
|
70
70
|
summary: ! 'iso8583: Ruby implementation of ISO 8583 financial messaging'
|