sepa_king 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +13 -3
- data/LICENSE.txt +1 -1
- data/README.md +6 -5
- data/gemfiles/Gemfile-activemodel-3.0.x +1 -1
- data/gemfiles/Gemfile-activemodel-3.1.x +1 -1
- data/gemfiles/Gemfile-activemodel-3.2.x +1 -1
- data/gemfiles/Gemfile-activemodel-4.0.x +1 -1
- data/gemfiles/Gemfile-activemodel-4.1.x +1 -1
- data/gemfiles/Gemfile-activemodel-4.2.x +1 -1
- data/gemfiles/Gemfile-activemodel-5.0.x +5 -0
- data/lib/{core_ext → sepa_king/core_ext}/string.rb +0 -0
- data/lib/sepa_king/message/direct_debit.rb +23 -0
- data/lib/sepa_king/message.rb +11 -3
- data/lib/sepa_king/transaction/credit_transfer_transaction.rb +1 -5
- data/lib/sepa_king/transaction/direct_debit_transaction.rb +3 -5
- data/lib/sepa_king/transaction.rb +13 -1
- data/lib/sepa_king/version.rb +1 -1
- data/lib/sepa_king.rb +1 -1
- data/sepa_king.gemspec +1 -1
- data/spec/credit_transfer_spec.rb +6 -5
- data/spec/credit_transfer_transaction_spec.rb +1 -1
- data/spec/direct_debit_spec.rb +33 -11
- data/spec/direct_debit_transaction_spec.rb +1 -1
- data/spec/message_spec.rb +36 -5
- data/spec/spec_helper.rb +2 -2
- data/spec/transaction_spec.rb +1 -1
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c07809500fdf4e08660e27eef792b69530285d64
|
4
|
+
data.tar.gz: c54f6fa344d87892a6642e3ef2dd3e140b643eb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4fbe19893a4147654d7f65a04f57caf74c85876cc547173157e427c36d92e919c7b10bd48e12fb3fcce03ff78e4fbf16f234b2d78983753edad209885f71f784
|
7
|
+
data.tar.gz: 90ad61a32ef0c8f1e0b6e3a190a448b54c4fb5f90ea30d81e6c0775d0df18ad03123d5964faf319b787f6a70c2f7e77736e813f990186d42d0c89f4f50f48010
|
data/.travis.yml
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
rvm:
|
2
2
|
- 1.9.3
|
3
|
-
- 2.0
|
4
|
-
- 2.1
|
5
|
-
- 2.2
|
3
|
+
- 2.0.0
|
4
|
+
- 2.1.10
|
5
|
+
- 2.2.5
|
6
|
+
- 2.3.1
|
6
7
|
gemfile:
|
7
8
|
- gemfiles/Gemfile-activemodel-3.0.x
|
8
9
|
- gemfiles/Gemfile-activemodel-3.1.x
|
@@ -10,4 +11,13 @@ gemfile:
|
|
10
11
|
- gemfiles/Gemfile-activemodel-4.0.x
|
11
12
|
- gemfiles/Gemfile-activemodel-4.1.x
|
12
13
|
- gemfiles/Gemfile-activemodel-4.2.x
|
14
|
+
- gemfiles/Gemfile-activemodel-5.0.x
|
15
|
+
matrix:
|
16
|
+
exclude:
|
17
|
+
- rvm: 1.9.3
|
18
|
+
gemfile: gemfiles/Gemfile-activemodel-5.0.x
|
19
|
+
- rvm: 2.0.0
|
20
|
+
gemfile: gemfiles/Gemfile-activemodel-5.0.x
|
21
|
+
- rvm: 2.1.10
|
22
|
+
gemfile: gemfiles/Gemfile-activemodel-5.0.x
|
13
23
|
sudo: false
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -13,8 +13,8 @@ We love building payment applications! So after developing the [DTAUS library fo
|
|
13
13
|
|
14
14
|
This gem implements the following two messages out of the ISO 20022 standard:
|
15
15
|
|
16
|
-
* Credit Transfer Initiation (pain.001.003.03 and pain.001.
|
17
|
-
* Direct Debit Initiation (pain.008.003.02
|
16
|
+
* Credit Transfer Initiation (`pain.001.003.03`, `pain.001.002.03` and `pain.001.001.03`)
|
17
|
+
* Direct Debit Initiation (`pain.008.003.02`, `pain.008.002.02` and `pain.008.001.02`)
|
18
18
|
|
19
19
|
This means it handles the "Specification of Data Formats" in version 2.6 (2012-11-17) and version 2.7 (2013-11-04)
|
20
20
|
|
@@ -24,6 +24,7 @@ BTW: **pain** is a shortcut for **Pa**yment **In**itiation.
|
|
24
24
|
## Requirements
|
25
25
|
|
26
26
|
* Ruby 1.9.3 or newer
|
27
|
+
* ActiveModel 3.0 or newer
|
27
28
|
|
28
29
|
|
29
30
|
## Installation
|
@@ -185,10 +186,10 @@ sct.add_transaction(
|
|
185
186
|
# True or False
|
186
187
|
batch_booking: true,
|
187
188
|
|
188
|
-
# OPTIONAL: Urgent
|
189
|
+
# OPTIONAL: Urgent Payment
|
189
190
|
# One of these strings:
|
190
191
|
# 'SEPA' ("SEPA-Zahlung")
|
191
|
-
# 'URGP' ("Taggleiche
|
192
|
+
# 'URGP' ("Taggleiche Eilüberweisung")
|
192
193
|
service_level: 'URGP'
|
193
194
|
)
|
194
195
|
sct.add_transaction ...
|
@@ -251,4 +252,4 @@ https://github.com/salesking/sepa_king/graphs/contributors
|
|
251
252
|
|
252
253
|
Released under the MIT license
|
253
254
|
|
254
|
-
Copyright (c) 2013-
|
255
|
+
Copyright (c) 2013-2016 Georg Leciejewski (SalesKing), Georg Ledermann (https://github.com/ledermann)
|
File without changes
|
@@ -83,6 +83,28 @@ module SEPA
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
+
def build_amendment_informations(builder, transaction)
|
87
|
+
return unless transaction.original_debtor_account || transaction.same_mandate_new_debtor_agent
|
88
|
+
builder.AmdmntInd(true)
|
89
|
+
builder.AmdmntInfDtls do
|
90
|
+
if transaction.original_debtor_account
|
91
|
+
builder.OrgnlDbtrAcct do
|
92
|
+
builder.Id do
|
93
|
+
builder.IBAN(transaction.original_debtor_account)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
else
|
97
|
+
builder.OrgnlDbtrAgt do
|
98
|
+
builder.FinInstnId do
|
99
|
+
builder.Othr do
|
100
|
+
builder.Id('SMNDA')
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
86
108
|
def build_transaction(builder, transaction)
|
87
109
|
builder.DrctDbtTxInf do
|
88
110
|
builder.PmtId do
|
@@ -93,6 +115,7 @@ module SEPA
|
|
93
115
|
builder.MndtRltdInf do
|
94
116
|
builder.MndtId(transaction.mandate_id)
|
95
117
|
builder.DtOfSgntr(transaction.mandate_date_of_signature.iso8601)
|
118
|
+
build_amendment_informations(builder, transaction)
|
96
119
|
end
|
97
120
|
end
|
98
121
|
builder.DbtrAgt do
|
data/lib/sepa_king/message.rb
CHANGED
@@ -66,11 +66,19 @@ module SEPA
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
|
69
|
+
# Set unique identifer for the message
|
70
|
+
def message_identification=(value)
|
71
|
+
raise ArgumentError.new('mesage_identification must be a string!') unless value.is_a?(String)
|
70
72
|
|
71
|
-
|
73
|
+
regex = /\A([A-Za-z0-9]|[\+|\?|\/|\-|\:|\(|\)|\.|\,|\'|\ ]){1,35}\z/
|
74
|
+
raise ArgumentError.new("mesage_identification does not match #{regex}!") unless value.match(regex)
|
75
|
+
|
76
|
+
@message_identification = value
|
77
|
+
end
|
78
|
+
|
79
|
+
# Get unique identifer for the message (with fallback to a random string)
|
72
80
|
def message_identification
|
73
|
-
@message_identification ||= "SEPA-KING/#{
|
81
|
+
@message_identification ||= "SEPA-KING/#{SecureRandom.hex(11)}"
|
74
82
|
end
|
75
83
|
|
76
84
|
# Returns the id of the batch to which the given transaction belongs
|
@@ -5,11 +5,7 @@ module SEPA
|
|
5
5
|
|
6
6
|
validates_inclusion_of :service_level, :in => %w(SEPA URGP)
|
7
7
|
|
8
|
-
validate
|
9
|
-
if t.requested_date.is_a?(Date)
|
10
|
-
errors.add(:requested_date, 'is in the past') if t.requested_date < Date.today
|
11
|
-
end
|
12
|
-
end
|
8
|
+
validate { |t| t.validate_requested_date_after(Date.today) }
|
13
9
|
|
14
10
|
def initialize(attributes = {})
|
15
11
|
super
|
@@ -4,13 +4,15 @@ module SEPA
|
|
4
4
|
SEQUENCE_TYPES = %w(FRST OOFF RCUR FNAL)
|
5
5
|
LOCAL_INSTRUMENTS = %w(CORE COR1 B2B)
|
6
6
|
|
7
|
-
attr_accessor :mandate_id, :mandate_date_of_signature, :local_instrument, :sequence_type, :creditor_account
|
7
|
+
attr_accessor :mandate_id, :mandate_date_of_signature, :local_instrument, :sequence_type, :creditor_account, :original_debtor_account, :same_mandate_new_debtor_agent
|
8
8
|
|
9
9
|
validates_with MandateIdentifierValidator, field_name: :mandate_id
|
10
10
|
validates_presence_of :mandate_date_of_signature
|
11
11
|
validates_inclusion_of :local_instrument, in: LOCAL_INSTRUMENTS
|
12
12
|
validates_inclusion_of :sequence_type, in: SEQUENCE_TYPES
|
13
13
|
|
14
|
+
validate { |t| t.validate_requested_date_after(Date.today.next) }
|
15
|
+
|
14
16
|
validate do |t|
|
15
17
|
if creditor_account
|
16
18
|
errors.add(:creditor_account, 'is not correct') unless creditor_account.valid?
|
@@ -21,10 +23,6 @@ module SEPA
|
|
21
23
|
else
|
22
24
|
errors.add(:mandate_date_of_signature, 'is not a Date')
|
23
25
|
end
|
24
|
-
|
25
|
-
if t.requested_date.is_a?(Date)
|
26
|
-
errors.add(:requested_date, 'is not in the future') if t.requested_date <= Date.today
|
27
|
-
end
|
28
26
|
end
|
29
27
|
|
30
28
|
def initialize(attributes = {})
|
@@ -4,6 +4,8 @@ module SEPA
|
|
4
4
|
include ActiveModel::Validations
|
5
5
|
extend Converter
|
6
6
|
|
7
|
+
DEFAULT_REQUESTED_DATE = Date.new(1999, 1, 1).freeze
|
8
|
+
|
7
9
|
attr_accessor :name, :iban, :bic, :amount, :instruction, :reference, :remittance_information, :requested_date, :batch_booking
|
8
10
|
convert :name, :instruction, :reference, :remittance_information, to: :text
|
9
11
|
convert :amount, to: :decimal
|
@@ -22,9 +24,19 @@ module SEPA
|
|
22
24
|
send("#{name}=", value)
|
23
25
|
end
|
24
26
|
|
25
|
-
self.requested_date ||=
|
27
|
+
self.requested_date ||= DEFAULT_REQUESTED_DATE
|
26
28
|
self.reference ||= 'NOTPROVIDED'
|
27
29
|
self.batch_booking = true if self.batch_booking.nil?
|
28
30
|
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def validate_requested_date_after(min_requested_date)
|
35
|
+
return unless requested_date.is_a?(Date)
|
36
|
+
|
37
|
+
if requested_date != DEFAULT_REQUESTED_DATE && requested_date < min_requested_date
|
38
|
+
errors.add(:requested_date, "must be greater or equal to #{min_requested_date}, or nil")
|
39
|
+
end
|
40
|
+
end
|
29
41
|
end
|
30
42
|
end
|
data/lib/sepa_king/version.rb
CHANGED
data/lib/sepa_king.rb
CHANGED
data/sepa_king.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_development_dependency 'bundler'
|
29
29
|
s.add_development_dependency 'rspec', '~> 3.0'
|
30
30
|
s.add_development_dependency 'coveralls'
|
31
|
-
s.add_development_dependency 'simplecov'
|
31
|
+
s.add_development_dependency 'simplecov', '~> 0.11.0'
|
32
32
|
s.add_development_dependency 'rake'
|
33
33
|
s.add_development_dependency 'nokogiri'
|
34
34
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe SEPA::CreditTransfer do
|
5
|
+
let(:message_id_regex) { /SEPA-KING\/[0-9a-z_]{22}/ }
|
5
6
|
let(:credit_transfer) {
|
6
7
|
SEPA::CreditTransfer.new name: 'Schuldner GmbH',
|
7
8
|
bic: 'BANKDEFFXXX',
|
@@ -120,15 +121,15 @@ describe SEPA::CreditTransfer do
|
|
120
121
|
end
|
121
122
|
|
122
123
|
it 'should have message_identification' do
|
123
|
-
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/GrpHdr/MsgId',
|
124
|
+
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/GrpHdr/MsgId', message_id_regex)
|
124
125
|
end
|
125
126
|
|
126
127
|
it 'should contain <PmtInfId>' do
|
127
|
-
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf/PmtInfId',
|
128
|
+
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf/PmtInfId', /#{message_id_regex}\/1/)
|
128
129
|
end
|
129
130
|
|
130
131
|
it 'should contain <ReqdExctnDt>' do
|
131
|
-
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf/ReqdExctnDt', Date.
|
132
|
+
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf/ReqdExctnDt', Date.new(1999, 1, 1).iso8601)
|
132
133
|
end
|
133
134
|
|
134
135
|
it 'should contain <PmtMtd>' do
|
@@ -209,8 +210,8 @@ describe SEPA::CreditTransfer do
|
|
209
210
|
end
|
210
211
|
|
211
212
|
it 'should contain two payment_informations with different <PmtInfId>' do
|
212
|
-
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf[1]/PmtInfId',
|
213
|
-
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf[2]/PmtInfId',
|
213
|
+
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf[1]/PmtInfId', /#{message_id_regex}\/1/)
|
214
|
+
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf[2]/PmtInfId', /#{message_id_regex}\/2/)
|
214
215
|
end
|
215
216
|
end
|
216
217
|
|
@@ -36,7 +36,7 @@ describe SEPA::CreditTransferTransaction do
|
|
36
36
|
|
37
37
|
context 'Requested date' do
|
38
38
|
it 'should allow valid value' do
|
39
|
-
expect(SEPA::CreditTransferTransaction).to accept(nil, Date.today, Date.today.next, Date.today + 2, for: :requested_date)
|
39
|
+
expect(SEPA::CreditTransferTransaction).to accept(nil, Date.new(1999, 1, 1), Date.today, Date.today.next, Date.today + 2, for: :requested_date)
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'should not allow invalid value' do
|
data/spec/direct_debit_spec.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe SEPA::DirectDebit do
|
5
|
+
let(:message_id_regex) { /SEPA-KING\/[0-9a-z_]{22}/ }
|
6
|
+
|
5
7
|
let(:direct_debit) {
|
6
8
|
SEPA::DirectDebit.new name: 'Gläubiger GmbH',
|
7
9
|
bic: 'BANKDEFFXXX',
|
@@ -37,7 +39,7 @@ describe SEPA::DirectDebit do
|
|
37
39
|
it 'returns the id of the batch where the given transactions belongs to (1 batch)' do
|
38
40
|
direct_debit.add_transaction(direct_debt_transaction(reference: "EXAMPLE REFERENCE"))
|
39
41
|
|
40
|
-
expect(direct_debit.batch_id("EXAMPLE REFERENCE")).to match(
|
42
|
+
expect(direct_debit.batch_id("EXAMPLE REFERENCE")).to match(/#{message_id_regex}\/1/)
|
41
43
|
end
|
42
44
|
|
43
45
|
it 'returns the id of the batch where the given transactions belongs to (2 batches)' do
|
@@ -45,9 +47,9 @@ describe SEPA::DirectDebit do
|
|
45
47
|
direct_debit.add_transaction(direct_debt_transaction(reference: "EXAMPLE REFERENCE 2", requested_date: Date.today.next.next))
|
46
48
|
direct_debit.add_transaction(direct_debt_transaction(reference: "EXAMPLE REFERENCE 3"))
|
47
49
|
|
48
|
-
expect(direct_debit.batch_id("EXAMPLE REFERENCE 1")).to match(
|
49
|
-
expect(direct_debit.batch_id("EXAMPLE REFERENCE 2")).to match(
|
50
|
-
expect(direct_debit.batch_id("EXAMPLE REFERENCE 3")).to match(
|
50
|
+
expect(direct_debit.batch_id("EXAMPLE REFERENCE 1")).to match(/#{message_id_regex}\/1/)
|
51
|
+
expect(direct_debit.batch_id("EXAMPLE REFERENCE 2")).to match(/#{message_id_regex}\/2/)
|
52
|
+
expect(direct_debit.batch_id("EXAMPLE REFERENCE 3")).to match(/#{message_id_regex}\/1/)
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
@@ -58,8 +60,8 @@ describe SEPA::DirectDebit do
|
|
58
60
|
direct_debit.add_transaction(direct_debt_transaction(reference: "EXAMPLE REFERENCE 3"))
|
59
61
|
|
60
62
|
expect(direct_debit.batches.size).to eq(2)
|
61
|
-
expect(direct_debit.batches[0]).to match(
|
62
|
-
expect(direct_debit.batches[1]).to match(
|
63
|
+
expect(direct_debit.batches[0]).to match(/#{message_id_regex}\/[0-9]+/)
|
64
|
+
expect(direct_debit.batches[1]).to match(/#{message_id_regex}\/[0-9]+/)
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
@@ -164,7 +166,7 @@ describe SEPA::DirectDebit do
|
|
164
166
|
end
|
165
167
|
|
166
168
|
it 'should have message_identification' do
|
167
|
-
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/GrpHdr/MsgId',
|
169
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/GrpHdr/MsgId', message_id_regex)
|
168
170
|
end
|
169
171
|
|
170
172
|
it 'should have creditor identifier' do
|
@@ -172,11 +174,11 @@ describe SEPA::DirectDebit do
|
|
172
174
|
end
|
173
175
|
|
174
176
|
it 'should contain <PmtInfId>' do
|
175
|
-
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/PmtInfId',
|
177
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/PmtInfId', /#{message_id_regex}\/1/)
|
176
178
|
end
|
177
179
|
|
178
180
|
it 'should contain <ReqdColltnDt>' do
|
179
|
-
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/ReqdColltnDt', Date.
|
181
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/ReqdColltnDt', Date.new(1999, 1, 1).iso8601)
|
180
182
|
end
|
181
183
|
|
182
184
|
it 'should contain <PmtMtd>' do
|
@@ -271,8 +273,8 @@ describe SEPA::DirectDebit do
|
|
271
273
|
end
|
272
274
|
|
273
275
|
it 'should contain two payment_informations with different <PmtInfId>' do
|
274
|
-
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/PmtInfId',
|
275
|
-
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/PmtInfId',
|
276
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf[1]/PmtInfId', /#{message_id_regex}\/1/)
|
277
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/PmtInfId', /#{message_id_regex}\/2/)
|
276
278
|
end
|
277
279
|
end
|
278
280
|
|
@@ -389,6 +391,26 @@ describe SEPA::DirectDebit do
|
|
389
391
|
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf[2]/Cdtr/Nm', 'Creditor Inc.')
|
390
392
|
end
|
391
393
|
end
|
394
|
+
|
395
|
+
context 'with mandate amendments' do
|
396
|
+
subject do
|
397
|
+
sdd = direct_debit
|
398
|
+
|
399
|
+
sdd.add_transaction(direct_debt_transaction.merge(original_debtor_account: 'NL08RABO0135742099'))
|
400
|
+
sdd.add_transaction(direct_debt_transaction.merge(same_mandate_new_debtor_agent: true))
|
401
|
+
sdd.to_xml
|
402
|
+
end
|
403
|
+
|
404
|
+
it 'should include amendment indicator' do
|
405
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/DrctDbtTx/MndtRltdInf/AmdmntInd', 'true')
|
406
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/DrctDbtTx/MndtRltdInf/AmdmntInd', 'true')
|
407
|
+
end
|
408
|
+
|
409
|
+
it 'should include amendment information details' do
|
410
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/DrctDbtTx/MndtRltdInf/AmdmntInfDtls/OrgnlDbtrAcct/Id/IBAN', 'NL08RABO0135742099')
|
411
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/DrctDbtTx/MndtRltdInf/AmdmntInfDtls/OrgnlDbtrAgt/FinInstnId/Othr/Id', 'SMNDA')
|
412
|
+
end
|
413
|
+
end
|
392
414
|
end
|
393
415
|
end
|
394
416
|
end
|
@@ -48,7 +48,7 @@ describe SEPA::DirectDebitTransaction do
|
|
48
48
|
|
49
49
|
context 'Requested date' do
|
50
50
|
it 'should allow valid value' do
|
51
|
-
expect(SEPA::DirectDebitTransaction).to accept(nil, Date.today.next, Date.today + 2, for: :requested_date)
|
51
|
+
expect(SEPA::DirectDebitTransaction).to accept(nil, Date.new(1999, 1, 1), Date.today.next, Date.today + 2, for: :requested_date)
|
52
52
|
end
|
53
53
|
|
54
54
|
it 'should not allow invalid value' do
|
data/spec/message_spec.rb
CHANGED
@@ -45,13 +45,44 @@ describe SEPA::Message do
|
|
45
45
|
describe :message_identification do
|
46
46
|
subject { DummyMessage.new }
|
47
47
|
|
48
|
-
|
49
|
-
|
48
|
+
describe 'getter' do
|
49
|
+
it 'should return prefixed random hex string' do
|
50
|
+
expect(subject.message_identification).to match(/SEPA-KING\/([a-f0-9]{2}){11}/)
|
51
|
+
end
|
50
52
|
end
|
51
53
|
|
52
|
-
|
53
|
-
|
54
|
-
|
54
|
+
describe 'setter' do
|
55
|
+
it 'should accept valid ID' do
|
56
|
+
[ 'gid://myMoneyApp/Payment/15108', # for example, Rails Global ID could be a candidate
|
57
|
+
Time.now.to_f.to_s # or a time based string
|
58
|
+
].each do |valid_msgid|
|
59
|
+
subject.message_identification = valid_msgid
|
60
|
+
expect(subject.message_identification).to eq(valid_msgid)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should deny invalid string' do
|
65
|
+
[ 'my_MESSAGE_ID/123', # contains underscore
|
66
|
+
'', # blank string
|
67
|
+
'üöäß', # non-ASCII chars
|
68
|
+
'1' * 36 # too long
|
69
|
+
].each do |arg|
|
70
|
+
expect {
|
71
|
+
subject.message_identification = arg
|
72
|
+
}.to raise_error(ArgumentError)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should deny argument other than String' do
|
77
|
+
[ 123,
|
78
|
+
nil,
|
79
|
+
:foo
|
80
|
+
].each do |arg|
|
81
|
+
expect {
|
82
|
+
subject.message_identification = arg
|
83
|
+
}.to raise_error(ArgumentError)
|
84
|
+
end
|
85
|
+
end
|
55
86
|
end
|
56
87
|
end
|
57
88
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,10 +6,10 @@
|
|
6
6
|
require 'simplecov'
|
7
7
|
require 'coveralls'
|
8
8
|
|
9
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
9
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
|
10
10
|
SimpleCov::Formatter::HTMLFormatter,
|
11
11
|
Coveralls::SimpleCov::Formatter
|
12
|
-
]
|
12
|
+
])
|
13
13
|
SimpleCov.start do
|
14
14
|
add_filter '/spec/'
|
15
15
|
end
|
data/spec/transaction_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe SEPA::Transaction do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should have default for requested_date' do
|
11
|
-
expect(SEPA::Transaction.new.requested_date).to eq(Date.
|
11
|
+
expect(SEPA::Transaction.new.requested_date).to eq(Date.new(1999, 1, 1))
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'should have default for batch_booking' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sepa_king
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Georg Leciejewski
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-05-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -113,16 +113,16 @@ dependencies:
|
|
113
113
|
name: simplecov
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- - "
|
116
|
+
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
118
|
+
version: 0.11.0
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- - "
|
123
|
+
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
125
|
+
version: 0.11.0
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rake
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -173,7 +173,7 @@ files:
|
|
173
173
|
- gemfiles/Gemfile-activemodel-4.0.x
|
174
174
|
- gemfiles/Gemfile-activemodel-4.1.x
|
175
175
|
- gemfiles/Gemfile-activemodel-4.2.x
|
176
|
-
-
|
176
|
+
- gemfiles/Gemfile-activemodel-5.0.x
|
177
177
|
- lib/schema/pain.001.001.03.xsd
|
178
178
|
- lib/schema/pain.001.002.03.xsd
|
179
179
|
- lib/schema/pain.001.003.03.xsd
|
@@ -185,6 +185,7 @@ files:
|
|
185
185
|
- lib/sepa_king/account/creditor_account.rb
|
186
186
|
- lib/sepa_king/account/debtor_account.rb
|
187
187
|
- lib/sepa_king/converter.rb
|
188
|
+
- lib/sepa_king/core_ext/string.rb
|
188
189
|
- lib/sepa_king/message.rb
|
189
190
|
- lib/sepa_king/message/credit_transfer.rb
|
190
191
|
- lib/sepa_king/message/direct_debit.rb
|
@@ -237,7 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
237
238
|
version: '0'
|
238
239
|
requirements: []
|
239
240
|
rubyforge_project:
|
240
|
-
rubygems_version: 2.4
|
241
|
+
rubygems_version: 2.6.4
|
241
242
|
signing_key:
|
242
243
|
specification_version: 4
|
243
244
|
summary: Ruby gem for creating SEPA XML files
|