sepa_king 0.8.0 → 0.9.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -5
- data/README.md +5 -1
- data/lib/sepa_king/account/creditor_account.rb +1 -1
- data/lib/sepa_king/account.rb +1 -1
- data/lib/sepa_king/message/direct_debit.rb +3 -0
- data/lib/sepa_king/transaction/direct_debit_transaction.rb +1 -1
- data/lib/sepa_king/transaction.rb +1 -1
- data/lib/sepa_king/validator.rb +4 -4
- data/lib/sepa_king/version.rb +1 -1
- data/sepa_king.gemspec +2 -2
- data/spec/credit_transfer_spec.rb +21 -0
- data/spec/direct_debit_spec.rb +18 -0
- data/spec/validator_spec.rb +28 -4
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd633edaa40b7ed3cd1dfe6bbcdb5d676053b6a4
|
4
|
+
data.tar.gz: 8bdcfc3411785c55878a7a0039815ff046f9f428
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e9af124aa9adf73f3b49a4b20880b68ed9f04bbf49fa75bac9bb49140fb1e694efb243595864567bb7544c64a581008b8006afc04e7d404bda9f3d074c104f8
|
7
|
+
data.tar.gz: c71cb2fb8a9691c2c9d0e70a9a1d2bc63d96178594ca0f41d913670d0d58d9f188ad3b833e28d63d18a5ff4b4a8b61f05adb039cee23b3f0cbf8065c96fda688
|
data/.travis.yml
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
rvm:
|
2
|
-
- 1.9.3
|
3
2
|
- 2.0.0
|
4
3
|
- 2.1.10
|
5
|
-
- 2.2.
|
6
|
-
- 2.3.
|
4
|
+
- 2.2.6
|
5
|
+
- 2.3.3
|
7
6
|
gemfile:
|
8
7
|
- gemfiles/Gemfile-activemodel-3.0.x
|
9
8
|
- gemfiles/Gemfile-activemodel-3.1.x
|
@@ -14,8 +13,6 @@ gemfile:
|
|
14
13
|
- gemfiles/Gemfile-activemodel-5.0.x
|
15
14
|
matrix:
|
16
15
|
exclude:
|
17
|
-
- rvm: 1.9.3
|
18
|
-
gemfile: gemfiles/Gemfile-activemodel-5.0.x
|
19
16
|
- rvm: 2.0.0
|
20
17
|
gemfile: gemfiles/Gemfile-activemodel-5.0.x
|
21
18
|
- rvm: 2.1.10
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ BTW: **pain** is a shortcut for **Pa**yment **In**itiation.
|
|
23
23
|
|
24
24
|
## Requirements
|
25
25
|
|
26
|
-
* Ruby
|
26
|
+
* Ruby 2.0.0 or newer
|
27
27
|
* ActiveModel 3.0 or newer
|
28
28
|
|
29
29
|
|
@@ -170,6 +170,10 @@ sct.add_transaction(
|
|
170
170
|
# Number with two decimal digit
|
171
171
|
amount: 102.50,
|
172
172
|
|
173
|
+
# OPTIONAL: Instruction Identification, will not be submitted to the creditor
|
174
|
+
# String, max. 35 char
|
175
|
+
instruction: '12345',
|
176
|
+
|
173
177
|
# OPTIONAL: End-To-End-Identification, will be submitted to the creditor
|
174
178
|
# String, max. 35 char
|
175
179
|
reference: 'XYZ-1234/123',
|
data/lib/sepa_king/account.rb
CHANGED
@@ -8,7 +8,7 @@ module SEPA
|
|
8
8
|
convert :name, to: :text
|
9
9
|
|
10
10
|
validates_length_of :name, within: 1..70
|
11
|
-
validates_with BICValidator, IBANValidator
|
11
|
+
validates_with BICValidator, IBANValidator, message: "%{value} is invalid"
|
12
12
|
|
13
13
|
def initialize(attributes = {})
|
14
14
|
attributes.each do |name, value|
|
@@ -108,6 +108,9 @@ module SEPA
|
|
108
108
|
def build_transaction(builder, transaction)
|
109
109
|
builder.DrctDbtTxInf do
|
110
110
|
builder.PmtId do
|
111
|
+
if transaction.instruction.present?
|
112
|
+
builder.InstrId(transaction.instruction)
|
113
|
+
end
|
111
114
|
builder.EndToEndId(transaction.reference)
|
112
115
|
end
|
113
116
|
builder.InstdAmt('%.2f' % transaction.amount, Ccy: 'EUR')
|
@@ -6,7 +6,7 @@ module SEPA
|
|
6
6
|
|
7
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
|
-
validates_with MandateIdentifierValidator, field_name: :mandate_id
|
9
|
+
validates_with MandateIdentifierValidator, field_name: :mandate_id, message: "%{value} is invalid"
|
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
|
@@ -17,7 +17,7 @@ module SEPA
|
|
17
17
|
validates_numericality_of :amount, greater_than: 0
|
18
18
|
validates_presence_of :requested_date
|
19
19
|
validates_inclusion_of :batch_booking, :in => [true, false]
|
20
|
-
validates_with BICValidator, IBANValidator
|
20
|
+
validates_with BICValidator, IBANValidator, message: "%{value} is invalid"
|
21
21
|
|
22
22
|
def initialize(attributes = {})
|
23
23
|
attributes.each do |name, value|
|
data/lib/sepa_king/validator.rb
CHANGED
@@ -9,7 +9,7 @@ module SEPA
|
|
9
9
|
value = record.send(field_name).to_s
|
10
10
|
|
11
11
|
unless IBANTools::IBAN.valid?(value) && value.match(REGEX)
|
12
|
-
record.errors.add(field_name, :invalid)
|
12
|
+
record.errors.add(field_name, :invalid, message: options[:message])
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -24,7 +24,7 @@ module SEPA
|
|
24
24
|
|
25
25
|
if value
|
26
26
|
unless value.to_s.match(REGEX)
|
27
|
-
record.errors.add(field_name, :invalid)
|
27
|
+
record.errors.add(field_name, :invalid, message: options[:message])
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -38,7 +38,7 @@ module SEPA
|
|
38
38
|
value = record.send(field_name)
|
39
39
|
|
40
40
|
unless valid?(value)
|
41
|
-
record.errors.add(field_name, :invalid)
|
41
|
+
record.errors.add(field_name, :invalid, message: options[:message])
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -61,7 +61,7 @@ module SEPA
|
|
61
61
|
value = record.send(field_name)
|
62
62
|
|
63
63
|
unless value.to_s.match(REGEX)
|
64
|
-
record.errors.add(field_name, :invalid)
|
64
|
+
record.errors.add(field_name, :invalid, message: options[:message])
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
data/lib/sepa_king/version.rb
CHANGED
data/sepa_king.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
|
-
s.required_ruby_version = '>=
|
21
|
+
s.required_ruby_version = '>= 2.0.0'
|
22
22
|
|
23
23
|
s.add_runtime_dependency 'activemodel', '>= 3.0.0'
|
24
24
|
s.add_runtime_dependency 'builder'
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_development_dependency 'bundler'
|
28
28
|
s.add_development_dependency 'rspec'
|
29
29
|
s.add_development_dependency 'coveralls'
|
30
|
-
s.add_development_dependency 'simplecov'
|
30
|
+
s.add_development_dependency 'simplecov'
|
31
31
|
s.add_development_dependency 'rake'
|
32
32
|
s.add_development_dependency 'nokogiri'
|
33
33
|
end
|
@@ -267,6 +267,27 @@ describe SEPA::CreditTransfer do
|
|
267
267
|
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf[4]/CtrlSum', '8.00')
|
268
268
|
end
|
269
269
|
end
|
270
|
+
|
271
|
+
context 'with instruction given' do
|
272
|
+
subject do
|
273
|
+
sct = credit_transfer
|
274
|
+
|
275
|
+
sct.add_transaction name: 'Telekomiker AG',
|
276
|
+
iban: 'DE37112589611964645802',
|
277
|
+
amount: 102.50,
|
278
|
+
instruction: '1234/ABC'
|
279
|
+
|
280
|
+
sct.to_xml
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'should create valid XML file' do
|
284
|
+
expect(subject).to validate_against('pain.001.003.03.xsd')
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'should contain <InstrId>' do
|
288
|
+
expect(subject).to have_xml('//Document/CstmrCdtTrfInitn/PmtInf/CdtTrfTxInf[1]/PmtId/InstrId', '1234/ABC')
|
289
|
+
end
|
290
|
+
end
|
270
291
|
end
|
271
292
|
end
|
272
293
|
end
|
data/spec/direct_debit_spec.rb
CHANGED
@@ -411,6 +411,24 @@ describe SEPA::DirectDebit do
|
|
411
411
|
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[2]/DrctDbtTx/MndtRltdInf/AmdmntInfDtls/OrgnlDbtrAgt/FinInstnId/Othr/Id', 'SMNDA')
|
412
412
|
end
|
413
413
|
end
|
414
|
+
|
415
|
+
context 'with instruction given' do
|
416
|
+
subject do
|
417
|
+
sct = direct_debit
|
418
|
+
|
419
|
+
sct.add_transaction(direct_debt_transaction.merge(instruction: '1234/ABC'))
|
420
|
+
|
421
|
+
sct.to_xml
|
422
|
+
end
|
423
|
+
|
424
|
+
it 'should create valid XML file' do
|
425
|
+
expect(subject).to validate_against('pain.008.003.02.xsd')
|
426
|
+
end
|
427
|
+
|
428
|
+
it 'should contain <InstrId>' do
|
429
|
+
expect(subject).to have_xml('//Document/CstmrDrctDbtInitn/PmtInf/DrctDbtTxInf[1]/PmtId/InstrId', '1234/ABC')
|
430
|
+
end
|
431
|
+
end
|
414
432
|
end
|
415
433
|
end
|
416
434
|
end
|
data/spec/validator_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe SEPA::IBANValidator do
|
|
5
5
|
class Validatable
|
6
6
|
include ActiveModel::Model
|
7
7
|
attr_accessor :iban, :iban_the_terrible
|
8
|
-
validates_with SEPA::IBANValidator
|
8
|
+
validates_with SEPA::IBANValidator, message: "%{value} seems wrong"
|
9
9
|
validates_with SEPA::IBANValidator, field_name: :iban_the_terrible
|
10
10
|
end
|
11
11
|
|
@@ -21,13 +21,19 @@ describe SEPA::IBANValidator do
|
|
21
21
|
'DE87 2005 0000 1234 5678 90', # spaces included
|
22
22
|
for: [:iban, :iban_the_terrible])
|
23
23
|
end
|
24
|
+
|
25
|
+
it "should customize error message" do
|
26
|
+
v = Validatable.new(:iban => 'xxx')
|
27
|
+
v.valid?
|
28
|
+
expect(v.errors[:iban]).to eq(['xxx seems wrong'])
|
29
|
+
end
|
24
30
|
end
|
25
31
|
|
26
32
|
describe SEPA::BICValidator do
|
27
33
|
class Validatable
|
28
34
|
include ActiveModel::Model
|
29
35
|
attr_accessor :bic, :custom_bic
|
30
|
-
validates_with SEPA::BICValidator
|
36
|
+
validates_with SEPA::BICValidator, message: "%{value} seems wrong"
|
31
37
|
validates_with SEPA::BICValidator, field_name: :custom_bic
|
32
38
|
end
|
33
39
|
|
@@ -38,13 +44,19 @@ describe SEPA::BICValidator do
|
|
38
44
|
it 'should not accept an invalid BIC' do
|
39
45
|
expect(Validatable).not_to accept('', 'GENODE61HR', 'DEUTDEDBDUEDEUTDEDBDUE', for: [:bic, :custom_bic])
|
40
46
|
end
|
47
|
+
|
48
|
+
it "should customize error message" do
|
49
|
+
v = Validatable.new(:bic => 'xxx')
|
50
|
+
v.valid?
|
51
|
+
expect(v.errors[:bic]).to eq(['xxx seems wrong'])
|
52
|
+
end
|
41
53
|
end
|
42
54
|
|
43
55
|
describe SEPA::CreditorIdentifierValidator do
|
44
56
|
class Validatable
|
45
57
|
include ActiveModel::Model
|
46
58
|
attr_accessor :creditor_identifier, :crid
|
47
|
-
validates_with SEPA::CreditorIdentifierValidator
|
59
|
+
validates_with SEPA::CreditorIdentifierValidator, message: "%{value} seems wrong"
|
48
60
|
validates_with SEPA::CreditorIdentifierValidator, field_name: :crid
|
49
61
|
end
|
50
62
|
|
@@ -55,13 +67,19 @@ describe SEPA::CreditorIdentifierValidator do
|
|
55
67
|
it 'should not accept an invalid creditor_identifier' do
|
56
68
|
expect(Validatable).not_to accept('', 'xxx', 'DE98ZZZ099999999990', for: [:creditor_identifier, :crid])
|
57
69
|
end
|
70
|
+
|
71
|
+
it "should customize error message" do
|
72
|
+
v = Validatable.new(:creditor_identifier => 'xxx')
|
73
|
+
v.valid?
|
74
|
+
expect(v.errors[:creditor_identifier]).to eq(['xxx seems wrong'])
|
75
|
+
end
|
58
76
|
end
|
59
77
|
|
60
78
|
describe SEPA::MandateIdentifierValidator do
|
61
79
|
class Validatable
|
62
80
|
include ActiveModel::Model
|
63
81
|
attr_accessor :mandate_id, :mid
|
64
|
-
validates_with SEPA::MandateIdentifierValidator
|
82
|
+
validates_with SEPA::MandateIdentifierValidator, message: "%{value} seems wrong"
|
65
83
|
validates_with SEPA::MandateIdentifierValidator, field_name: :mid
|
66
84
|
end
|
67
85
|
|
@@ -72,4 +90,10 @@ describe SEPA::MandateIdentifierValidator do
|
|
72
90
|
it 'should not accept an invalid mandate_identifier' do
|
73
91
|
expect(Validatable).not_to accept(nil, '', 'X' * 36, 'ABC 123', '#/*', 'Ümläüt', for: [:mandate_id, :mid])
|
74
92
|
end
|
93
|
+
|
94
|
+
it "should customize error message" do
|
95
|
+
v = Validatable.new(:mandate_id => 'ABC 123')
|
96
|
+
v.valid?
|
97
|
+
expect(v.errors[:mandate_id]).to eq(['ABC 123 seems wrong'])
|
98
|
+
end
|
75
99
|
end
|
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.9.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: 2016-
|
12
|
+
date: 2016-12-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -99,16 +99,16 @@ dependencies:
|
|
99
99
|
name: simplecov
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- - "
|
102
|
+
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: 0
|
104
|
+
version: '0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- - "
|
109
|
+
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: 0
|
111
|
+
version: '0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: rake
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,7 +214,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
214
214
|
requirements:
|
215
215
|
- - ">="
|
216
216
|
- !ruby/object:Gem::Version
|
217
|
-
version:
|
217
|
+
version: 2.0.0
|
218
218
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
220
|
- - ">="
|
@@ -222,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
222
|
version: '0'
|
223
223
|
requirements: []
|
224
224
|
rubyforge_project:
|
225
|
-
rubygems_version: 2.6.
|
225
|
+
rubygems_version: 2.6.8
|
226
226
|
signing_key:
|
227
227
|
specification_version: 4
|
228
228
|
summary: Ruby gem for creating SEPA XML files
|