creditsafe 0.2.0 → 0.3.0

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
2
  SHA1:
3
- metadata.gz: 8da2890acd61ed7db41e62b44682b13cf9963203
4
- data.tar.gz: 03bdc4029107f5c89556dd0f44b1892ca1d64dc1
3
+ metadata.gz: e3f7e899ff7ea1566d2a958e2ebb966971f49af3
4
+ data.tar.gz: a9eca4831066ac57b6c67199d8d34898c795194c
5
5
  SHA512:
6
- metadata.gz: 90ae7bd7b7dddfc87b7b7868dcae3696e324b0e5d15ac1a5f924f915a8c1b74c60a60ca0a5e1d4a095fbe63a52dd9cfaf1834a84dcf9d6a991bbb3af3894c3c0
7
- data.tar.gz: bb9c7e7e14efd24014efc9270a31a788511f1e1fa9f4b4cf9fe26ab89988f74c9da9c0e4dcfb641e7cb0530a0a91c12f65e360f989e61460006f7e389bd09bcb
6
+ metadata.gz: 39c2f54873c5d70bdc66df50c1c44f9813961b888b5b5ed038ebd3b6e5086a7bf8dc2fd7cb195858e45e7f26a4667d19b5ad914e163465c78d26e7e2cc0abd0f
7
+ data.tar.gz: 7fc19fcbca0b22f6003f4f44f8f519a93f9ba43b0a67711cccb02dff2dcbadde0d765f1bd654749eef6c75da5cc5ba0156e0007fcde59d06d901e9f9aea52ee6
data/.rubocop.yml CHANGED
@@ -21,4 +21,4 @@ Metrics/MethodLength:
21
21
  Max: 15
22
22
 
23
23
  Metrics/ClassLength:
24
- Max: 150
24
+ Max: 152
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.1
data/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  gemspec
data/Gemfile.lock CHANGED
@@ -2,33 +2,36 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  creditsafe (0.2.0)
5
+ activesupport (>= 4.2.0)
5
6
  excon (~> 0.45)
6
7
  savon (~> 2.8)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
- addressable (2.3.8)
12
+ activesupport (5.0.0)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (~> 0.7)
15
+ minitest (~> 5.1)
16
+ tzinfo (~> 1.1)
17
+ addressable (2.4.0)
12
18
  akami (1.3.1)
13
19
  gyoku (>= 0.4.0)
14
20
  nokogiri
15
- ast (2.2.0)
21
+ ast (2.3.0)
16
22
  builder (3.2.2)
17
- byebug (4.0.5)
18
- columnize (= 0.9.0)
19
- celluloid (0.16.0)
20
- timers (~> 4.0.0)
21
- coderay (1.1.0)
22
- columnize (0.9.0)
23
- crack (0.4.2)
23
+ byebug (9.0.5)
24
+ coderay (1.1.1)
25
+ concurrent-ruby (1.0.2)
26
+ crack (0.4.3)
24
27
  safe_yaml (~> 1.0.0)
25
28
  diff-lcs (1.2.5)
26
- excon (0.45.3)
27
- ffi (1.9.8)
29
+ excon (0.51.0)
30
+ ffi (1.9.14)
28
31
  formatador (0.2.5)
29
- guard (2.12.6)
32
+ guard (2.14.0)
30
33
  formatador (>= 0.2.4)
31
- listen (~> 2.7)
34
+ listen (>= 2.7, < 4.0)
32
35
  lumberjack (~> 1.0)
33
36
  nenv (~> 0.1)
34
37
  notiffany (~> 0.0)
@@ -36,7 +39,7 @@ GEM
36
39
  shellany (~> 0.0)
37
40
  thor (>= 0.18.1)
38
41
  guard-compat (1.2.1)
39
- guard-rspec (4.5.2)
42
+ guard-rspec (4.7.3)
40
43
  guard (~> 2.1)
41
44
  guard-compat (~> 1.1)
42
45
  rspec (>= 2.99.0, < 4.0)
@@ -45,61 +48,67 @@ GEM
45
48
  rubocop (~> 0.20)
46
49
  gyoku (1.3.1)
47
50
  builder (>= 2.1.2)
48
- hitimes (1.2.2)
49
- httpi (2.4.0)
51
+ hashdiff (0.3.0)
52
+ httpi (2.4.2)
50
53
  rack
51
- listen (2.10.0)
52
- celluloid (~> 0.16.0)
53
- rb-fsevent (>= 0.9.3)
54
- rb-inotify (>= 0.9)
55
- lumberjack (1.0.9)
54
+ socksify
55
+ i18n (0.7.0)
56
+ listen (3.1.5)
57
+ rb-fsevent (~> 0.9, >= 0.9.4)
58
+ rb-inotify (~> 0.9, >= 0.9.7)
59
+ ruby_dep (~> 1.2)
60
+ lumberjack (1.0.10)
56
61
  method_source (0.8.2)
57
- mini_portile (0.6.2)
58
- nenv (0.2.0)
59
- nokogiri (1.6.6.2)
60
- mini_portile (~> 0.6.0)
62
+ mini_portile2 (2.1.0)
63
+ minitest (5.9.0)
64
+ nenv (0.3.0)
65
+ nokogiri (1.6.8)
66
+ mini_portile2 (~> 2.1.0)
67
+ pkg-config (~> 1.1.7)
61
68
  nori (2.6.0)
62
- notiffany (0.0.6)
69
+ notiffany (0.1.1)
63
70
  nenv (~> 0.1)
64
71
  shellany (~> 0.0)
65
- parser (2.3.0.6)
72
+ parser (2.3.1.2)
66
73
  ast (~> 2.2)
74
+ pkg-config (1.1.7)
67
75
  powerpack (0.1.1)
68
- pry (0.10.1)
76
+ pry (0.10.4)
69
77
  coderay (~> 1.1.0)
70
78
  method_source (~> 0.8.1)
71
79
  slop (~> 3.4)
72
- pry-byebug (3.1.0)
73
- byebug (~> 4.0)
80
+ pry-byebug (3.4.0)
81
+ byebug (~> 9.0)
74
82
  pry (~> 0.10)
75
- rack (1.6.1)
83
+ rack (1.6.4)
76
84
  rainbow (2.1.0)
77
- rb-fsevent (0.9.5)
78
- rb-inotify (0.9.5)
85
+ rb-fsevent (0.9.7)
86
+ rb-inotify (0.9.7)
79
87
  ffi (>= 0.5.0)
80
- rspec (3.2.0)
81
- rspec-core (~> 3.2.0)
82
- rspec-expectations (~> 3.2.0)
83
- rspec-mocks (~> 3.2.0)
84
- rspec-core (3.2.3)
85
- rspec-support (~> 3.2.0)
86
- rspec-expectations (3.2.1)
88
+ rspec (3.5.0)
89
+ rspec-core (~> 3.5.0)
90
+ rspec-expectations (~> 3.5.0)
91
+ rspec-mocks (~> 3.5.0)
92
+ rspec-core (3.5.2)
93
+ rspec-support (~> 3.5.0)
94
+ rspec-expectations (3.5.0)
87
95
  diff-lcs (>= 1.2.0, < 2.0)
88
- rspec-support (~> 3.2.0)
96
+ rspec-support (~> 3.5.0)
89
97
  rspec-its (1.2.0)
90
98
  rspec-core (>= 3.0.0)
91
99
  rspec-expectations (>= 3.0.0)
92
- rspec-mocks (3.2.1)
100
+ rspec-mocks (3.5.0)
93
101
  diff-lcs (>= 1.2.0, < 2.0)
94
- rspec-support (~> 3.2.0)
95
- rspec-support (3.2.2)
96
- rubocop (0.37.2)
97
- parser (>= 2.3.0.4, < 3.0)
102
+ rspec-support (~> 3.5.0)
103
+ rspec-support (3.5.0)
104
+ rubocop (0.42.0)
105
+ parser (>= 2.3.1.1, < 3.0)
98
106
  powerpack (~> 0.1)
99
107
  rainbow (>= 1.99.1, < 3.0)
100
108
  ruby-progressbar (~> 1.7)
101
- unicode-display_width (~> 0.3)
102
- ruby-progressbar (1.7.5)
109
+ unicode-display_width (~> 1.0, >= 1.0.1)
110
+ ruby-progressbar (1.8.1)
111
+ ruby_dep (1.4.0)
103
112
  safe_yaml (1.0.4)
104
113
  savon (2.11.1)
105
114
  akami (~> 1.2)
@@ -111,16 +120,20 @@ GEM
111
120
  wasabi (~> 3.4)
112
121
  shellany (0.0.1)
113
122
  slop (3.6.0)
123
+ socksify (1.7.0)
114
124
  thor (0.19.1)
115
- timers (4.0.1)
116
- hitimes
117
- unicode-display_width (0.3.1)
125
+ thread_safe (0.3.5)
126
+ timecop (0.8.1)
127
+ tzinfo (1.2.2)
128
+ thread_safe (~> 0.1)
129
+ unicode-display_width (1.1.0)
118
130
  wasabi (3.5.0)
119
131
  httpi (~> 2.0)
120
132
  nokogiri (>= 1.4.2)
121
- webmock (1.21.0)
133
+ webmock (1.24.6)
122
134
  addressable (>= 2.3.6)
123
135
  crack (>= 0.3.2)
136
+ hashdiff
124
137
 
125
138
  PLATFORMS
126
139
  ruby
@@ -135,7 +148,8 @@ DEPENDENCIES
135
148
  rspec (~> 3.1)
136
149
  rspec-its (~> 1.2)
137
150
  rubocop (~> 0.37)
151
+ timecop (~> 0.8)
138
152
  webmock (~> 1.20)
139
153
 
140
154
  BUNDLED WITH
141
- 1.10.6
155
+ 1.12.5
data/Guardfile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # A sample Guardfile
2
3
  # More info at https://github.com/guard/guard#readme
3
4
 
data/circle.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  machine:
2
2
  ruby:
3
- version: 2.0.0-p353
3
+ version: 2.3.1
4
4
  test:
5
5
  pre:
6
6
  - bundle exec rubocop
7
7
  post:
8
- - bundle exec rspec
8
+ - bundle exec rspec
data/creditsafe.gemspec CHANGED
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'creditsafe/version'
@@ -6,7 +7,7 @@ require 'creditsafe/version'
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = 'creditsafe'
8
9
  spec.version = Creditsafe::VERSION
9
- spec.authors = ['Pete Hamilton']
10
+ spec.authors = ['GoCardless Engineering']
10
11
  spec.email = ['engineering@gocardless.com']
11
12
  spec.summary = 'Ruby client for the Creditsafe SOAP API'
12
13
  spec.description = 'Ruby client for the Creditsafe SOAP API'
@@ -19,6 +20,7 @@ Gem::Specification.new do |spec|
19
20
 
20
21
  spec.add_runtime_dependency 'savon', '~> 2.8'
21
22
  spec.add_runtime_dependency 'excon', '~> 0.45'
23
+ spec.add_runtime_dependency 'activesupport', '>= 4.2.0'
22
24
 
23
25
  spec.add_development_dependency 'bundler', '~> 1.3'
24
26
  spec.add_development_dependency 'rspec', '~> 3.1'
@@ -27,4 +29,5 @@ Gem::Specification.new do |spec|
27
29
  spec.add_development_dependency 'guard-rubocop', '~> 1.2'
28
30
  spec.add_development_dependency 'rubocop', '~> 0.37'
29
31
  spec.add_development_dependency 'webmock', '~> 1.20'
32
+ spec.add_development_dependency 'timecop', '~> 0.8'
30
33
  end
data/lib/creditsafe.rb CHANGED
@@ -1,2 +1,3 @@
1
+ # frozen_string_literal: true
1
2
  require 'creditsafe/errors'
2
3
  require 'creditsafe/client'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'securerandom'
2
3
  require 'savon'
3
4
  require 'excon'
@@ -5,17 +6,19 @@ require 'excon'
5
6
  require 'creditsafe/errors'
6
7
  require 'creditsafe/messages'
7
8
 
9
+ require 'active_support/notifications'
10
+
8
11
  module Creditsafe
9
12
  class Client
10
- XMLNS_OPER = 'oper'.freeze
11
- XMLNS_OPER_VAL = 'http://www.creditsafe.com/globaldata/operations'.freeze
13
+ XMLNS_OPER = 'oper'
14
+ XMLNS_OPER_VAL = 'http://www.creditsafe.com/globaldata/operations'
12
15
 
13
- XMLNS_DAT = 'dat'.freeze
14
- XMLNS_DAT_VAL = 'http://www.creditsafe.com/globaldata/datatypes'.freeze
16
+ XMLNS_DAT = 'dat'
17
+ XMLNS_DAT_VAL = 'http://www.creditsafe.com/globaldata/datatypes'
15
18
 
16
- XMLNS_CRED = 'cred'.freeze
19
+ XMLNS_CRED = 'cred'
17
20
  XMLNS_CRED_VAL =
18
- 'http://schemas.datacontract.org/2004/07/Creditsafe.GlobalData'.freeze
21
+ 'http://schemas.datacontract.org/2004/07/Creditsafe.GlobalData'
19
22
 
20
23
  def initialize(username: nil, password: nil, savon_opts: {})
21
24
  raise ArgumentError, "Username must be provided" if username.nil?
@@ -29,11 +32,8 @@ module Creditsafe
29
32
  def find_company(search_criteria = {})
30
33
  check_search_criteria(search_criteria)
31
34
 
32
- response = wrap_soap_errors do
33
- message = find_company_message(search_criteria)
34
- client.call(:find_companies, message: message)
35
- end
36
-
35
+ response = invoke_soap(:find_companies,
36
+ find_company_message(search_criteria))
37
37
  companies = response.
38
38
  fetch(:find_companies_response).
39
39
  fetch(:find_companies_result).
@@ -43,10 +43,10 @@ module Creditsafe
43
43
  end
44
44
 
45
45
  def company_report(creditsafe_id, custom_data: nil)
46
- response = wrap_soap_errors do
47
- message = retrieve_company_report_message(creditsafe_id, custom_data)
48
- client.call(:retrieve_company_online_report, message: message)
49
- end
46
+ response = invoke_soap(
47
+ :retrieve_company_online_report,
48
+ retrieve_company_report_message(creditsafe_id, custom_data)
49
+ )
50
50
 
51
51
  response.
52
52
  fetch(:retrieve_company_online_report_response).
@@ -127,28 +127,41 @@ module Creditsafe
127
127
  end
128
128
  end
129
129
 
130
- # Takes a proc and rescues any SOAP faults, HTTP errors or Creditsafe errors
131
- # There's a potential bug in the creditsafe API where they actually return
132
- # an HTTP 401 if you're unauthorized, hence the sad special case below
133
- def wrap_soap_errors
134
- response = yield
130
+ def invoke_soap(message_type, message)
131
+ started = Time.now
132
+ notification_payload = { request: message }
133
+
134
+ response = client.call(message_type, message: message)
135
135
  handle_message_for_response(response)
136
- response.body
137
- rescue => error
138
- handle_error(error)
136
+ notification_payload[:response] = response.body
137
+ rescue => raw_error
138
+ processed_error = handle_error(raw_error)
139
+ notification_payload[:error] = processed_error
140
+ raise processed_error
141
+ ensure
142
+ publish("creditsafe.#{message_type}", started, Time.now,
143
+ SecureRandom.hex(10), notification_payload)
144
+ end
145
+
146
+ def publish(*args)
147
+ ActiveSupport::Notifications.publish(*args)
139
148
  end
140
149
 
150
+ # There's a potential bug in the creditsafe API where they actually return
151
+ # an HTTP 401 if you're unauthorized, hence the sad special case below
141
152
  def handle_error(error)
142
- raise error
143
- rescue Savon::SOAPFault => error
144
- raise UnknownApiError, error.message
145
- rescue Savon::HTTPError => error
146
- if error.to_hash[:code] == 401
147
- raise AccountError, 'Unauthorized: invalid credentials'
153
+ case error
154
+ when Savon::SOAPFault
155
+ return UnknownApiError.new(error.message)
156
+ when Savon::HTTPError
157
+ if error.to_hash[:code] == 401
158
+ return AccountError.new('Unauthorized: invalid credentials')
159
+ end
160
+ return UnknownApiError.new(error.message)
161
+ when Excon::Errors::Error
162
+ return HttpError.new("Error making HTTP request: #{error.message}")
148
163
  end
149
- raise UnknownApiError, error.message
150
- rescue Excon::Errors::Error => err
151
- raise HttpError, "Error making HTTP request: #{err.message}"
164
+ error
152
165
  end
153
166
 
154
167
  def client
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Creditsafe
2
3
  class Error < StandardError; end
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'creditsafe/errors'
2
3
 
3
4
  module Creditsafe
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Creditsafe
2
- VERSION = '0.2.0'.freeze
3
+ VERSION = '0.3.0'
3
4
  end
@@ -1,13 +1,40 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
  require 'creditsafe/client'
4
+ require 'timecop'
3
5
 
4
6
  URL = 'https://webservices.creditsafe.com/GlobalData/1.3/'\
5
- 'MainServiceBasic.svc'.freeze
7
+ 'MainServiceBasic.svc'
6
8
 
7
9
  RSpec.describe(Creditsafe::Client) do
10
+ notifications = []
8
11
  let(:username) { "b" }
9
12
  let(:password) { "c" }
13
+ before(:all) do
14
+ ActiveSupport::Notifications.subscribe do |*args|
15
+ notifications << ActiveSupport::Notifications::Event.new(*args)
16
+ end
17
+ end
18
+ before(:each) { notifications = [] }
10
19
 
20
+ shared_examples_for 'sends notifications' do
21
+ let(:time) { Time.local(1990) }
22
+ it 'records a SOAP event' do
23
+ Timecop.freeze(time) do
24
+ method_call
25
+ end
26
+ expect(notifications).to match([have_attributes(
27
+ name: "creditsafe.#{soap_verb}",
28
+ transaction_id: match(/\A.{20}\Z/),
29
+ time: time,
30
+ end: time,
31
+ payload: {
32
+ request: be_truthy,
33
+ response: be_truthy
34
+ }
35
+ )])
36
+ end
37
+ end
11
38
  shared_examples_for 'handles api errors' do
12
39
  context 'when an error occurs due to invalid credentials' do
13
40
  before do
@@ -18,14 +45,20 @@ RSpec.describe(Creditsafe::Client) do
18
45
  end
19
46
 
20
47
  it 'raises an AccountError' do
21
- expect { method_call }.to raise_error(Creditsafe::AccountError)
22
- end
23
-
24
- it 'gives a useful error message' do
25
- begin
26
- method_call
27
- rescue Creditsafe::AccountError => err
28
- expect(err.message).to include 'invalid credentials'
48
+ expect { method_call }.to raise_error(
49
+ Creditsafe::AccountError, /invalid credentials/
50
+ ) do |error|
51
+ expect(notifications).to match(
52
+ [
53
+ have_attributes(
54
+ name: "creditsafe.#{soap_verb}",
55
+ payload: {
56
+ request: be_truthy,
57
+ error: error
58
+ }
59
+ )
60
+ ]
61
+ )
29
62
  end
30
63
  end
31
64
  end
@@ -37,7 +70,21 @@ RSpec.describe(Creditsafe::Client) do
37
70
  end
38
71
 
39
72
  it 'raises an UnknownApiError' do
40
- expect { method_call }.to raise_error(Creditsafe::UnknownApiError)
73
+ expect { method_call }.to raise_error(
74
+ Creditsafe::UnknownApiError
75
+ ) do |error|
76
+ expect(notifications).to match(
77
+ [
78
+ have_attributes(
79
+ name: "creditsafe.#{soap_verb}",
80
+ payload: {
81
+ request: be_truthy,
82
+ error: error
83
+ }
84
+ )
85
+ ]
86
+ )
87
+ end
41
88
  end
42
89
  end
43
90
 
@@ -48,15 +95,8 @@ RSpec.describe(Creditsafe::Client) do
48
95
 
49
96
  it 'raises an HttpError' do
50
97
  expect { method_call }.to(
51
- raise_error(Creditsafe::HttpError))
52
- end
53
-
54
- it 'gives a useful error message' do
55
- begin
56
- method_call
57
- rescue Creditsafe::HttpError => err
58
- expect(err.message).to include 'Excon::Errors::Timeout'
59
- end
98
+ raise_error(Creditsafe::HttpError, /Excon::Error(?:s)?::Timeout/)
99
+ )
60
100
  end
61
101
  end
62
102
  end
@@ -82,6 +122,7 @@ RSpec.describe(Creditsafe::Client) do
82
122
  end
83
123
 
84
124
  describe '#find_company' do
125
+ let(:soap_verb) { 'find_companies' }
85
126
  let(:client) { described_class.new(username: username, password: password) }
86
127
  let(:country_code) { "GB" }
87
128
  let(:registration_number) { "RN123" }
@@ -144,6 +185,7 @@ RSpec.describe(Creditsafe::Client) do
144
185
  :@id => 'GB003/0/07495895')
145
186
  end
146
187
 
188
+ include_examples 'sends notifications'
147
189
  include_examples 'handles api errors'
148
190
 
149
191
  context "when no companies are found" do
@@ -157,6 +199,27 @@ RSpec.describe(Creditsafe::Client) do
157
199
  it "returns nil" do
158
200
  expect(find_company).to be_nil
159
201
  end
202
+
203
+ it "records a nil payload" do
204
+ find_company
205
+ expect(notifications).to match([have_attributes(
206
+ payload: {
207
+ request: be_truthy,
208
+ response: {
209
+ find_companies_response: include(
210
+ find_companies_result: include(
211
+ messages: {
212
+ message: include(
213
+ "There are no results matching specified criteria."
214
+ )
215
+ },
216
+ companies: be_nil
217
+ )
218
+ )
219
+ }
220
+ }
221
+ )])
222
+ end
160
223
  end
161
224
 
162
225
  context "when an error occurs with further details" do
@@ -168,12 +231,10 @@ RSpec.describe(Creditsafe::Client) do
168
231
  end
169
232
 
170
233
  it 'gives a useful error, with the specific error in the response' do
171
- begin
172
- method_call
173
- rescue Creditsafe::RequestError => err
174
- expect(err.message).to eq 'Invalid operation parameters ' \
175
- '(Invalid countries list specified.)'
176
- end
234
+ expect { method_call }.to raise_error(
235
+ Creditsafe::RequestError,
236
+ 'Invalid operation parameters (Invalid countries list specified.)'
237
+ )
177
238
  end
178
239
 
179
240
  context "with further details provided in the response" do
@@ -185,17 +246,17 @@ RSpec.describe(Creditsafe::Client) do
185
246
  end
186
247
 
187
248
  it 'gives a useful error, with the specific error in the response' do
188
- begin
189
- method_call
190
- rescue Creditsafe::RequestError => err
191
- expect(err.message).to eq 'Invalid operation parameters'
192
- end
249
+ expect { method_call }.to raise_error(
250
+ Creditsafe::RequestError,
251
+ 'Invalid operation parameters'
252
+ )
193
253
  end
194
254
  end
195
255
  end
196
256
  end
197
257
 
198
258
  describe '#company_report' do
259
+ let(:soap_verb) { 'retrieve_company_online_report' }
199
260
  before do
200
261
  stub_request(:post, URL).to_return(
201
262
  body: load_fixture('company-report-successful.xml'),
@@ -213,6 +274,7 @@ RSpec.describe(Creditsafe::Client) do
213
274
  expect(company_report).to include(:company_summary)
214
275
  end
215
276
 
277
+ include_examples 'sends notifications'
216
278
  include_examples 'handles api errors'
217
279
 
218
280
  context 'when a report is unavailable' do
@@ -226,11 +288,9 @@ RSpec.describe(Creditsafe::Client) do
226
288
  end
227
289
 
228
290
  it 'gives a useful error message' do
229
- begin
230
- company_report
231
- rescue Creditsafe::DataError => err
232
- expect(err.message).to include 'Report unavailable'
233
- end
291
+ expect { company_report }.to raise_error(
292
+ Creditsafe::DataError, /Report unavailable/
293
+ )
234
294
  end
235
295
  end
236
296
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
  require 'creditsafe/messages'
3
4
 
@@ -29,7 +30,7 @@ RSpec.describe(Creditsafe::Messages) do
29
30
  context "for an empty code" do
30
31
  let(:code) { '' }
31
32
  it "was passed the wrong parameters" do
32
- expect { subject(:message) }.to raise_error
33
+ expect { subject(:message) }.to raise_error(ArgumentError)
33
34
  end
34
35
  end
35
36
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'webmock/rspec'
2
3
  require 'nokogiri'
3
4
  require 'rspec/its'
metadata CHANGED
@@ -1,141 +1,169 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: creditsafe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
- - Pete Hamilton
7
+ - GoCardless Engineering
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-16 00:00:00.000000000 Z
11
+ date: 2016-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: savon
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: excon
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0.45'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.45'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 4.2.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 4.2.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ~>
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
61
  version: '1.3'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ~>
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '1.3'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ~>
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
75
  version: '3.1'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ~>
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '3.1'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec-its
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
89
  version: '1.2'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: '1.2'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: guard-rspec
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ~>
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
103
  version: '4.5'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ~>
108
+ - - "~>"
95
109
  - !ruby/object:Gem::Version
96
110
  version: '4.5'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: guard-rubocop
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - ~>
115
+ - - "~>"
102
116
  - !ruby/object:Gem::Version
103
117
  version: '1.2'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - ~>
122
+ - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '1.2'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rubocop
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - ~>
129
+ - - "~>"
116
130
  - !ruby/object:Gem::Version
117
131
  version: '0.37'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - ~>
136
+ - - "~>"
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0.37'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: webmock
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - ~>
143
+ - - "~>"
130
144
  - !ruby/object:Gem::Version
131
145
  version: '1.20'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - ~>
150
+ - - "~>"
137
151
  - !ruby/object:Gem::Version
138
152
  version: '1.20'
153
+ - !ruby/object:Gem::Dependency
154
+ name: timecop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.8'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.8'
139
167
  description: Ruby client for the Creditsafe SOAP API
140
168
  email:
141
169
  - engineering@gocardless.com
@@ -143,10 +171,11 @@ executables: []
143
171
  extensions: []
144
172
  extra_rdoc_files: []
145
173
  files:
146
- - .gitignore
147
- - .rspec
148
- - .rubocop.yml
149
- - .rubocop_todo.yml
174
+ - ".gitignore"
175
+ - ".rspec"
176
+ - ".rubocop.yml"
177
+ - ".rubocop_todo.yml"
178
+ - ".ruby-version"
150
179
  - CHANGELOG.md
151
180
  - Gemfile
152
181
  - Gemfile.lock
@@ -181,17 +210,17 @@ require_paths:
181
210
  - lib
182
211
  required_ruby_version: !ruby/object:Gem::Requirement
183
212
  requirements:
184
- - - '>='
213
+ - - ">="
185
214
  - !ruby/object:Gem::Version
186
215
  version: '0'
187
216
  required_rubygems_version: !ruby/object:Gem::Requirement
188
217
  requirements:
189
- - - '>='
218
+ - - ">="
190
219
  - !ruby/object:Gem::Version
191
220
  version: '0'
192
221
  requirements: []
193
222
  rubyforge_project:
194
- rubygems_version: 2.2.2
223
+ rubygems_version: 2.5.1
195
224
  signing_key:
196
225
  specification_version: 4
197
226
  summary: Ruby client for the Creditsafe SOAP API