callcredit 0.3.5 → 0.3.6
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/CHANGELOG.md +4 -0
- data/callcredit.gemspec +3 -3
- data/lib/callcredit.rb +3 -2
- data/lib/callcredit/errors/invalid_response_error.rb +4 -0
- data/lib/callcredit/middleware/check_response.rb +2 -1
- data/lib/callcredit/request.rb +7 -2
- data/lib/callcredit/validations.rb +12 -25
- data/lib/callcredit/version.rb +1 -1
- data/spec/request_spec.rb +2 -1
- data/spec/validations_spec.rb +17 -38
- metadata +14 -14
- data/lib/callcredit/errors/authentication_error.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0b7b4efd89e1305129eb3d2ddd8647df7287f2b
|
4
|
+
data.tar.gz: d259558cc18200f91398fcdf91d569a08d0e84c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9c8638f029f7ec78207d9b4039cf6abe97efa32cd050604de97263a1c64910162a01f2f5f72a6a3c47754b82edccc011478a823734878fcca725731e26fc3c6
|
7
|
+
data.tar.gz: 59f925b4e118bf737f787974c2098668163e5b5093fff3868f747bb92c3a0f79a02d531c4882ddf0b26acaed6acd92964ea1616385a039d19be6687f1928dd6d
|
data/CHANGELOG.md
CHANGED
data/callcredit.gemspec
CHANGED
@@ -5,10 +5,10 @@ Gem::Specification.new do |gem|
|
|
5
5
|
gem.add_runtime_dependency 'faraday_middleware', '>= 0.8.2'
|
6
6
|
gem.add_runtime_dependency 'multi_xml', '~> 0.5.1'
|
7
7
|
gem.add_runtime_dependency 'nokogiri', '~> 1.4'
|
8
|
-
gem.add_runtime_dependency '
|
8
|
+
gem.add_runtime_dependency 'unicode_utils', '~> 1.4.0'
|
9
9
|
|
10
|
-
gem.add_development_dependency 'rspec'
|
11
|
-
gem.add_development_dependency 'webmock'
|
10
|
+
gem.add_development_dependency 'rspec', '~> 2.14.1'
|
11
|
+
gem.add_development_dependency 'webmock', '~> 1.17.2'
|
12
12
|
|
13
13
|
gem.authors = ['Grey Baker']
|
14
14
|
gem.description = %q{Ruby wrapper for Callcredit's CallValidate API}
|
data/lib/callcredit.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'faraday_middleware'
|
2
2
|
require 'nokogiri'
|
3
|
+
require 'unicode_utils'
|
3
4
|
|
4
5
|
require 'callcredit/version'
|
5
6
|
require 'callcredit/util'
|
@@ -15,8 +16,8 @@ require 'callcredit/middleware/check_response'
|
|
15
16
|
# Errors
|
16
17
|
require 'callcredit/errors/callcredit_error'
|
17
18
|
require 'callcredit/errors/api_error'
|
18
|
-
require 'callcredit/errors/authentication_error'
|
19
19
|
require 'callcredit/errors/invalid_request_error'
|
20
|
+
require 'callcredit/errors/invalid_response_error'
|
20
21
|
|
21
22
|
module Callcredit
|
22
23
|
def self.configure(&block)
|
@@ -38,7 +39,7 @@ module Callcredit
|
|
38
39
|
else
|
39
40
|
msg = "No config found. Use Callcredit.configure to set username, " +
|
40
41
|
"password, company and application name. See " +
|
41
|
-
"https://github.com/gocardless/callcredit for details."
|
42
|
+
"https://github.com/gocardless/callcredit-ruby for details."
|
42
43
|
raise CallcreditError.new(msg)
|
43
44
|
end
|
44
45
|
end
|
@@ -4,7 +4,8 @@ module Callcredit
|
|
4
4
|
def call(env)
|
5
5
|
@app.call(env).on_complete do |env|
|
6
6
|
unless results = env[:body]["Results"]
|
7
|
-
raise
|
7
|
+
raise InvalidResponseError.new(
|
8
|
+
"Invalid response", env[:status], env)
|
8
9
|
end
|
9
10
|
|
10
11
|
if results["Errors"]
|
data/lib/callcredit/request.rb
CHANGED
@@ -14,7 +14,11 @@ module Callcredit
|
|
14
14
|
end
|
15
15
|
@config[:raw] ? response : response.body
|
16
16
|
rescue Faraday::Error::ClientError => e
|
17
|
-
|
17
|
+
if e.response.nil?
|
18
|
+
raise APIError.new
|
19
|
+
else
|
20
|
+
raise APIError.new(e.response[:body], e.response[:status], e.response)
|
21
|
+
end
|
18
22
|
end
|
19
23
|
|
20
24
|
# Compile the complete XML request to send to Callcredit
|
@@ -76,7 +80,8 @@ module Callcredit
|
|
76
80
|
end
|
77
81
|
xml.AddressDetails do
|
78
82
|
Constants::ADDRESS_DETAILS.each do |param, element_name|
|
79
|
-
|
83
|
+
value = Validations.clean_param(param, data[param])
|
84
|
+
xml.send(element_name, value) if value
|
80
85
|
end
|
81
86
|
end
|
82
87
|
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
require 'unidecoder'
|
2
|
-
|
3
1
|
module Callcredit
|
4
2
|
module Validations
|
5
3
|
|
6
4
|
VALIDATIONS = {
|
7
5
|
date_of_birth: ->(value) { clean_date_of_birth(value) },
|
8
6
|
title: ->(value) { value || "Unknown" },
|
9
|
-
first_name: ->(value) {
|
10
|
-
last_name: ->(value) {
|
11
|
-
middle_names: ->(value) {
|
12
|
-
postcode: ->(value) { clean_postcode(value) }
|
7
|
+
first_name: ->(value) { clean_name(value, :first_name) },
|
8
|
+
last_name: ->(value) { clean_name(value, :last_name) },
|
9
|
+
middle_names: ->(value) { clean_name(value, :middle_names) },
|
10
|
+
postcode: ->(value) { clean_postcode(value, :postcode) },
|
11
|
+
previous_postcode: ->(value) { clean_postcode(value, :previous_postcode) },
|
12
|
+
delivery_postcode: ->(value) { clean_postcode(value, :delivery_postcode) }
|
13
13
|
}
|
14
14
|
|
15
15
|
def self.clean_param(key, value)
|
@@ -25,31 +25,18 @@ module Callcredit
|
|
25
25
|
input_error(:date_of_birth, date_of_birth)
|
26
26
|
end
|
27
27
|
|
28
|
-
def self.
|
29
|
-
return unless name
|
30
|
-
name = name.to_ascii
|
31
|
-
input_error(:first_name, name) unless name =~ /\A[a-z A-Z'-]{1,30}\z/
|
32
|
-
name
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.clean_last_name(name)
|
36
|
-
return unless name
|
37
|
-
name = name.to_ascii
|
38
|
-
input_error(:last_name, name) unless name =~ /\A[a-z A-Z'-]{1,30}\z/
|
39
|
-
name
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.clean_middle_names(name)
|
28
|
+
def self.clean_name(name, param)
|
43
29
|
return unless name
|
44
|
-
name
|
45
|
-
|
30
|
+
# Convert name to ASCII characters only
|
31
|
+
name = UnicodeUtils.nfkd(name).gsub(/(\p{Letter})\p{Mark}+/,'\\1')
|
32
|
+
input_error(param, name) unless name =~ /\A[a-z A-Z'-]{1,30}\z/
|
46
33
|
name
|
47
34
|
end
|
48
35
|
|
49
|
-
def self.clean_postcode(postcode)
|
36
|
+
def self.clean_postcode(postcode, param)
|
50
37
|
return unless postcode
|
51
38
|
postcode = postcode.upcase.strip
|
52
|
-
input_error(
|
39
|
+
input_error(param, postcode) unless postcode =~ /\A[A-Z 0-9]{5,8}\z/
|
53
40
|
postcode
|
54
41
|
end
|
55
42
|
|
data/lib/callcredit/version.rb
CHANGED
data/spec/request_spec.rb
CHANGED
@@ -109,7 +109,8 @@ describe Callcredit::Request do
|
|
109
109
|
let(:body) { "<TopLevel></TopLevel>" }
|
110
110
|
|
111
111
|
it "wraps the error" do
|
112
|
-
expect { perform_check }.
|
112
|
+
expect { perform_check }.
|
113
|
+
to raise_error Callcredit::InvalidResponseError
|
113
114
|
end
|
114
115
|
end
|
115
116
|
end
|
data/spec/validations_spec.rb
CHANGED
@@ -1,18 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Callcredit::Validations do
|
4
|
-
let(:check_data) do
|
5
|
-
{ personal_data: {
|
6
|
-
first_name: "Grey",
|
7
|
-
last_name: "Baker",
|
8
|
-
date_of_birth: date_of_birth,
|
9
|
-
postcode: "EC2A 1DX",
|
10
|
-
building_number: "22-25"
|
11
|
-
}
|
12
|
-
}
|
13
|
-
end
|
14
|
-
let(:date_of_birth) { "01/01/2000" }
|
15
|
-
|
16
4
|
describe '#clean_date_of_birth' do
|
17
5
|
subject { Callcredit::Validations.clean_date_of_birth(date_of_birth) }
|
18
6
|
|
@@ -39,62 +27,53 @@ describe Callcredit::Validations do
|
|
39
27
|
end
|
40
28
|
end
|
41
29
|
|
42
|
-
describe '#
|
43
|
-
subject { Callcredit::Validations.
|
30
|
+
describe '#clean_name' do
|
31
|
+
subject { Callcredit::Validations.clean_name(name, :first_name) }
|
44
32
|
|
45
|
-
context "without a
|
46
|
-
let(:
|
33
|
+
context "without a name" do
|
34
|
+
let(:name) { nil }
|
47
35
|
it { should == nil }
|
48
36
|
end
|
49
37
|
|
50
|
-
context "with a simple
|
51
|
-
let(:
|
52
|
-
it { should ==
|
38
|
+
context "with a simple name" do
|
39
|
+
let(:name) { "Grey" }
|
40
|
+
it { should == name }
|
53
41
|
end
|
54
42
|
|
55
|
-
context "with a
|
56
|
-
let(:
|
43
|
+
context "with a name with non-ASCII characters" do
|
44
|
+
let(:name) { "Gréy" }
|
57
45
|
it { should == "Grey" }
|
58
46
|
end
|
59
47
|
|
60
|
-
context "with a very long
|
61
|
-
let(:
|
48
|
+
context "with a very long name" do
|
49
|
+
let(:name) { "A" * 31 }
|
62
50
|
it "raises an error" do
|
63
51
|
expect { subject }.to raise_error Callcredit::InvalidRequestError
|
64
52
|
end
|
65
53
|
end
|
66
54
|
|
67
|
-
context "with a
|
68
|
-
let(:
|
55
|
+
context "with a name with numbers in it" do
|
56
|
+
let(:name) { "David the 3rd" }
|
69
57
|
it "raises an error" do
|
70
58
|
expect { subject }.to raise_error Callcredit::InvalidRequestError
|
71
59
|
end
|
72
60
|
end
|
73
61
|
end
|
74
62
|
|
75
|
-
describe '#clean_middle_names' do
|
76
|
-
subject { Callcredit::Validations.clean_middle_names(name) }
|
77
|
-
|
78
|
-
context "without a middle name" do
|
79
|
-
let(:name) { nil }
|
80
|
-
it { should == nil }
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
63
|
describe '#clean_postcode' do
|
85
|
-
subject { Callcredit::Validations.clean_postcode(postcode) }
|
64
|
+
subject { Callcredit::Validations.clean_postcode(postcode, :postcode) }
|
86
65
|
|
87
|
-
context "without a
|
66
|
+
context "without a postcode" do
|
88
67
|
let(:postcode) { nil }
|
89
68
|
it { should == nil }
|
90
69
|
end
|
91
70
|
|
92
|
-
context "with a correct
|
71
|
+
context "with a correct postcode" do
|
93
72
|
let(:postcode) { "EC2A 1DX" }
|
94
73
|
it { should == postcode }
|
95
74
|
end
|
96
75
|
|
97
|
-
context "with a padded
|
76
|
+
context "with a padded postcode" do
|
98
77
|
let(:postcode) { "EC2A 1DX " }
|
99
78
|
it { should == "EC2A 1DX" }
|
100
79
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: callcredit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grey Baker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -67,47 +67,47 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.4'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: unicode_utils
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
75
|
+
version: 1.4.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
82
|
+
version: 1.4.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 2.14.1
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 2.14.1
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: webmock
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ~>
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 1.17.2
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 1.17.2
|
111
111
|
description: Ruby wrapper for Callcredit's CallValidate API
|
112
112
|
email:
|
113
113
|
- grey@gocardless.com
|
@@ -127,9 +127,9 @@ files:
|
|
127
127
|
- lib/callcredit/config.rb
|
128
128
|
- lib/callcredit/constants.rb
|
129
129
|
- lib/callcredit/errors/api_error.rb
|
130
|
-
- lib/callcredit/errors/authentication_error.rb
|
131
130
|
- lib/callcredit/errors/callcredit_error.rb
|
132
131
|
- lib/callcredit/errors/invalid_request_error.rb
|
132
|
+
- lib/callcredit/errors/invalid_response_error.rb
|
133
133
|
- lib/callcredit/middleware/check_response.rb
|
134
134
|
- lib/callcredit/request.rb
|
135
135
|
- lib/callcredit/response.rb
|