iwoca 1.0.1 → 1.1.1

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.
@@ -0,0 +1,94 @@
1
+ module Iwoca
2
+ # For more information about webhooks, see:
3
+ # https://iwoca.stoplight.io/docs/lapi-notifications/branches/2.0.0/ZG9jOjI4NzI5MTI5-webhooks-configuration
4
+ class Webhooks
5
+ def self.connection
6
+ @connection ||= Connection.new('notifications')
7
+ end
8
+
9
+ # Will return a payload that looks like this:
10
+ #
11
+ # {
12
+ # "data": {
13
+ # "webhook_url": "https://app.finpoint.co.uk/fast_lender_webhooks/iwoca_event",
14
+ # "webhook_secret_token": "cddafc72e1bca9b33d7ee922a95ae3fdcdf4f37c",
15
+ # "encryption_method": "sha256"
16
+ # }
17
+ # }
18
+ def self.configuration
19
+ connection.get('configuration/')
20
+ end
21
+
22
+ # Setup a webhook, the params is a payload that looks like this:
23
+ #
24
+ # {
25
+ # "data": {
26
+ # "regenerate_webhook_secret_token": true,
27
+ # "webhook_url": "string"
28
+ # }
29
+ # }
30
+ def self.update(config:)
31
+ connection.put('configuration/', config)
32
+ end
33
+
34
+ # Get a list of the possible event types
35
+ #
36
+ # {
37
+ # "data": {
38
+ # "webhook_event_types": [
39
+ # "approval_status_changed",
40
+ # "customer_funded",
41
+ # "application_offered",
42
+ # "application_declined",
43
+ # "application_deferred",
44
+ # "cashflow_added",
45
+ # "mca_context_changed",
46
+ # "bank_account_setup",
47
+ # "application_status_changed",
48
+ # "application_attributed"
49
+ # ]
50
+ # }
51
+ # }
52
+ def self.event_types
53
+ connection.get('webhook_event_types/')
54
+ end
55
+
56
+ def self.subscribe(event_types:)
57
+ json = { data: { subscriptions: [] }}
58
+
59
+ subscriptions = event_types.map do |event_type|
60
+ { webhook_event_type: event_type }
61
+ end
62
+
63
+ json[:data][:subscriptions] = subscriptions
64
+
65
+ connection.post('subscriptions/', json)
66
+ end
67
+
68
+ def self.unsubscribe(event_types:)
69
+ json = {}
70
+ connection.delete('subscriptions/', json)
71
+ end
72
+
73
+ # Returns the active subscriptions in a payload like this:
74
+ # {
75
+ # "data": {
76
+ # "subscriptions": [
77
+ # { "webhook_event_type": "approval_status_changed", "url": null, "subscribed": true },
78
+ # { "webhook_event_type": "customer_funded", "url": null, "subscribed": true },
79
+ # { "webhook_event_type": "application_offered", "url": null, "subscribed": true },
80
+ # { "webhook_event_type": "application_declined", "url": null, "subscribed": true },
81
+ # { "webhook_event_type": "application_deferred", "url": null, "subscribed": true },
82
+ # { "webhook_event_type": "cashflow_added", "url": null, "subscribed": true },
83
+ # { "webhook_event_type": "mca_context_changed", "url": null, "subscribed": true },
84
+ # { "webhook_event_type": "bank_account_setup", "url": null, "subscribed": true },
85
+ # { "webhook_event_type": "application_status_changed", "url": null, "subscribed": true },
86
+ # { "webhook_event_type": "application_attributed", "url": null, "subscribed": true }
87
+ # ]
88
+ # }
89
+ # }
90
+ def self.subscriptions
91
+ connection.get('subscriptions/')
92
+ end
93
+ end
94
+ end
data/lib/iwoca.rb CHANGED
@@ -4,7 +4,10 @@ require 'iwoca/version'
4
4
  require 'iwoca/path_sanitizer'
5
5
  require 'iwoca/configuration'
6
6
  require 'iwoca/connection'
7
- require 'iwoca/quote'
7
+ require 'iwoca/customer'
8
+ require 'iwoca/application'
9
+ require 'iwoca/webhooks'
10
+ require 'rainbow'
8
11
 
9
12
  module Iwoca
10
13
  module_function
@@ -17,6 +20,18 @@ module Iwoca
17
20
  @connection ||= Connection.new
18
21
  end
19
22
 
23
+ def authentication_check
24
+ response = connection.get('/authentication_check/')
25
+
26
+ if response.success?
27
+ puts Rainbow("Authentication check successful: #{response.body.to_json}").green.bright
28
+ else
29
+ puts Rainbow("Authentication check failed: #{response.body.to_json}").red.bright
30
+ end
31
+
32
+ response.success?
33
+ end
34
+
20
35
  def configure
21
36
  yield(configuration)
22
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iwoca
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - rikas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-02 00:00:00.000000000 Z
11
+ date: 2023-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: json-schema
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Iwoca API wrapper
56
70
  email:
57
71
  - oterosantos@gmail.com
@@ -72,13 +86,19 @@ files:
72
86
  - bin/setup
73
87
  - iwoca.gemspec
74
88
  - lib/iwoca.rb
89
+ - lib/iwoca/application.rb
90
+ - lib/iwoca/application_generator.rb
75
91
  - lib/iwoca/configuration.rb
76
92
  - lib/iwoca/connection.rb
93
+ - lib/iwoca/customer.rb
77
94
  - lib/iwoca/customer_generator.rb
78
95
  - lib/iwoca/path_sanitizer.rb
79
- - lib/iwoca/quote.rb
80
96
  - lib/iwoca/response.rb
97
+ - lib/iwoca/schemas/customer_payload.json
98
+ - lib/iwoca/schemas/last_12_months_turnover.json
99
+ - lib/iwoca/schemas/requested_product.json
81
100
  - lib/iwoca/version.rb
101
+ - lib/iwoca/webhooks.rb
82
102
  - vcr_cassettes/approval_invalid.yml
83
103
  - vcr_cassettes/approval_valid.yml
84
104
  - vcr_cassettes/create_customer_invalid.yml
data/lib/iwoca/quote.rb DELETED
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Iwoca
4
- class Quote
5
- # The POST request should be used to create an iwoca account for the customer. It's always the
6
- # first endpoint and method you should call when submitting a new customer. It returns a
7
- # state_key used to identify the customer in all future requests. Almost all fields in the
8
- # State are optional since you can submit a partial application initially, then add or update
9
- # data over time (through the PUT method). Your iwoca contact will be able to give you details
10
- # on which fields are recommended to help us make a lending decision.
11
- def self.create_customer(params)
12
- Iwoca.connection.post('state/', params)
13
- end
14
-
15
- # The PUT request should be used to add or update data for a customer. Note that the entire
16
- # State should be submitted each time you use this endpoint, even if you are just updating a
17
- # few fields.
18
- def self.update_customer(state_key, params)
19
- Iwoca.connection.put("state/#{state_key}/", params)
20
- end
21
-
22
- # This method should be used when a decision needs to be made for a customer. It doesn't expect
23
- # any payload, all needed information should have been provided in the state of the customer.
24
- def self.approval(state_key)
25
- Iwoca.connection.post("approval_request/#{state_key}/")
26
- end
27
-
28
- # The GET request will return a one-time login link that the user can follow to get into
29
- # their iwoca account (on iwoca.co.uk) without entering a password.
30
- # You can generate multiple login links which will be active simultaneously. However, all
31
- # links will expire when the user next logs into their iwoca account (either by following one
32
- # of the links or by entering their username and password).
33
- def self.login_link(state_key)
34
- Iwoca.connection.get("login_link/#{state_key}/")
35
- end
36
-
37
- # The data returned contains information like approval status, loan status, repayments,
38
- # cashflows, ...
39
- def self.credit_facility_status(state_key)
40
- Iwoca.connection.get("credit_facility_status/#{state_key}")
41
- end
42
- end
43
- end