gocardless_pro 2.7.0 → 2.8.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
  SHA256:
3
- metadata.gz: 88c2d215e0c85d03f6564b77c2ea9815a33b080544cf2987030407b46b54472f
4
- data.tar.gz: f0f9af3de5d443b2fb94bc39c64fd6478b86328e50a9283bdcaabe622e5013c8
3
+ metadata.gz: f0dcc61e6ad974bee34243805fb1a45bec38c51db4ebf9bbdc6ee240ca96e782
4
+ data.tar.gz: 9ef2aabea6263516ba9cee0e1bb1efa682f59f9ede69c880a20d9d73a2b8c820
5
5
  SHA512:
6
- metadata.gz: '08ebee113a782abd51bd043cf41684b0a025ce6e25a5105c724d1b26663e645484c69f6c261bb5ad0f34f0e24b5b8688b22a40689e7144497a958e699a0a599e'
7
- data.tar.gz: efc1fcf7ce492542fe13c455333e9a0846d6ce2c0b96e18aefc5f92790d3535618949b4f8ae1b74176e07505f182ad2936d1d9811bf784f8469d8035bbb0b43a
6
+ metadata.gz: 116e36fef2b4f6bec63d06f1a792fb240537bd2c1ed23b6684409367c24cb6148f21d7f52a14a7710642ba0e01cc5011c4f72d9cbc1c83918fc128759997cf96
7
+ data.tar.gz: cc8ad6e8119952e90cecc405a82a38d5631e06f42c2ea48cf03127526e644927c5f316be27968f9b3b466622c57b87a9c2842cd6fca9da7ecff06dae4d453bed
@@ -58,6 +58,12 @@ require_relative 'gocardless_pro/services/events_service'
58
58
  require_relative 'gocardless_pro/resources/mandate'
59
59
  require_relative 'gocardless_pro/services/mandates_service'
60
60
 
61
+ require_relative 'gocardless_pro/resources/mandate_import'
62
+ require_relative 'gocardless_pro/services/mandate_imports_service'
63
+
64
+ require_relative 'gocardless_pro/resources/mandate_import_entry'
65
+ require_relative 'gocardless_pro/services/mandate_import_entries_service'
66
+
61
67
  require_relative 'gocardless_pro/resources/mandate_pdf'
62
68
  require_relative 'gocardless_pro/services/mandate_pdfs_service'
63
69
 
@@ -38,6 +38,16 @@ module GoCardlessPro
38
38
  @mandates ||= Services::MandatesService.new(@api_service)
39
39
  end
40
40
 
41
+ # Access to the service for mandate_import to make API calls
42
+ def mandate_imports
43
+ @mandate_imports ||= Services::MandateImportsService.new(@api_service)
44
+ end
45
+
46
+ # Access to the service for mandate_import_entry to make API calls
47
+ def mandate_import_entries
48
+ @mandate_import_entries ||= Services::MandateImportEntriesService.new(@api_service)
49
+ end
50
+
41
51
  # Access to the service for mandate_pdf to make API calls
42
52
  def mandate_pdfs
43
53
  @mandate_pdfs ||= Services::MandatePdfsService.new(@api_service)
@@ -123,7 +133,7 @@ module GoCardlessPro
123
133
  'User-Agent' => user_agent.to_s,
124
134
  'Content-Type' => 'application/json',
125
135
  'GoCardless-Client-Library' => 'gocardless-pro-ruby',
126
- 'GoCardless-Client-Version' => '2.7.0',
136
+ 'GoCardless-Client-Version' => '2.8.0',
127
137
  },
128
138
  }
129
139
  end
@@ -0,0 +1,88 @@
1
+ # encoding: utf-8
2
+
3
+ #
4
+ # This client is automatically generated from a template and JSON schema definition.
5
+ # See https://github.com/gocardless/gocardless-pro-ruby#contributing before editing.
6
+ #
7
+
8
+ require 'uri'
9
+
10
+ module GoCardlessPro
11
+ # A module containing classes for each of the resources in the GC Api
12
+ module Resources
13
+ # Represents an instance of a mandate_import resource returned from the API
14
+
15
+ # Mandate Imports allow you to migrate existing mandates from other
16
+ # providers into the
17
+ # GoCardless platform.
18
+ #
19
+ # The process is as follows:
20
+ #
21
+ # 1. [Create a mandate
22
+ # import](#mandate-imports-create-a-new-mandate-import)
23
+ # 2. [Add entries](#mandate-import-entries-add-a-mandate-import-entry) to
24
+ # the import
25
+ # 3. [Submit](#mandate-imports-submit-a-mandate-import) the import
26
+ # 4. Wait until a member of the GoCardless team approves the import, at
27
+ # which point the mandates will be created
28
+ # 5. [Link up the
29
+ # mandates](#mandate-import-entries-list-all-mandate-import-entries) in your
30
+ # system
31
+ #
32
+ # When you add entries to your mandate import, they are not turned into
33
+ # actual mandates
34
+ # until the mandate import is submitted by you via the API, and then
35
+ # processed by a member
36
+ # of the GoCardless team. When that happens, a mandate will be created for
37
+ # each entry in the import.
38
+ #
39
+ # We will issue a `mandate_created` webhook for each entry, which will be
40
+ # the same as the webhooks
41
+ # triggered when [ creating a mandate ](#mandates-create-a-mandate) using
42
+ # the mandates API. Once these
43
+ # webhooks start arriving, any reconciliation can now be accomplished by
44
+ # [checking the current status](#mandate-imports-get-a-mandate-import) of
45
+ # the mandate import and
46
+ # [linking up the mandates to your
47
+ # system](#mandate-import-entries-list-all-mandate-import-entries).
48
+ #
49
+ # <p class="notice">Note that all Mandate Imports have an upper limit of
50
+ # 30,000 entries, so
51
+ # we recommend you split your import into several smaller imports if you're
52
+ # planning to
53
+ # exceed this threshold.</p>
54
+ #
55
+ # <p class="restricted-notice"><strong>Restricted</strong>: This API is
56
+ # currently
57
+ # only available for approved partners - please <a
58
+ # href="mailto:help@gocardless.com">get
59
+ # in touch</a> if you would like to use this API.</p>
60
+ class MandateImport
61
+ attr_reader :created_at
62
+ attr_reader :id
63
+ attr_reader :scheme
64
+ attr_reader :status
65
+
66
+ # Initialize a mandate_import resource instance
67
+ # @param object [Hash] an object returned from the API
68
+ def initialize(object, response = nil)
69
+ @object = object
70
+
71
+ @created_at = object['created_at']
72
+ @id = object['id']
73
+ @scheme = object['scheme']
74
+ @status = object['status']
75
+ @response = response
76
+ end
77
+
78
+ def api_response
79
+ ApiResponse.new(@response)
80
+ end
81
+
82
+ # Provides the mandate_import resource as a hash of all its readable attributes
83
+ def to_h
84
+ @object
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,99 @@
1
+ # encoding: utf-8
2
+
3
+ #
4
+ # This client is automatically generated from a template and JSON schema definition.
5
+ # See https://github.com/gocardless/gocardless-pro-ruby#contributing before editing.
6
+ #
7
+
8
+ require 'uri'
9
+
10
+ module GoCardlessPro
11
+ # A module containing classes for each of the resources in the GC Api
12
+ module Resources
13
+ # Represents an instance of a mandate_import_entry resource returned from the API
14
+
15
+ # Mandate Import Entries are added to a [Mandate
16
+ # Import](#core-endpoints-mandate-imports).
17
+ # Each entry corresponds to one mandate to be imported into GoCardless.
18
+ #
19
+ # To import a mandate you will need:
20
+ # <ol>
21
+ # <li>Identifying information about the customer (name/company and
22
+ # address)</li>
23
+ # <li>Bank account details, consisting of an account holder name and
24
+ # either an IBAN or <a href="#appendix-local-bank-details">local bank
25
+ # details</a></li>
26
+ # <li>Amendment details (SEPA only)</li>
27
+ # </ol>
28
+ #
29
+ # We suggest you provide a `record_identifier` (which is unique within the
30
+ # context of a
31
+ # single mandate import) to help you to identify mandates that have been
32
+ # created once the
33
+ # import has been processed by GoCardless. You can
34
+ # [list the mandate import
35
+ # entries](#mandate-import-entries-list-all-mandate-import-entries),
36
+ # match them up in your system using the `record_identifier`, and look at
37
+ # the `links`
38
+ # fields to find the mandate, customer and customer bank account that have
39
+ # been imported.
40
+ #
41
+ # <p class="restricted-notice"><strong>Restricted</strong>: This API is
42
+ # currently
43
+ # only available for approved partners - please <a
44
+ # href="mailto:help@gocardless.com">get
45
+ # in touch</a> if you would like to use this API.</p>
46
+ #
47
+ class MandateImportEntry
48
+ attr_reader :created_at
49
+ attr_reader :record_identifier
50
+
51
+ # Initialize a mandate_import_entry resource instance
52
+ # @param object [Hash] an object returned from the API
53
+ def initialize(object, response = nil)
54
+ @object = object
55
+
56
+ @created_at = object['created_at']
57
+ @links = object['links']
58
+ @record_identifier = object['record_identifier']
59
+ @response = response
60
+ end
61
+
62
+ def api_response
63
+ ApiResponse.new(@response)
64
+ end
65
+
66
+ # Return the links that the resource has
67
+ def links
68
+ @mandate_import_entry_links ||= Links.new(@links)
69
+ end
70
+
71
+ # Provides the mandate_import_entry resource as a hash of all its readable attributes
72
+ def to_h
73
+ @object
74
+ end
75
+
76
+ class Links
77
+ def initialize(links)
78
+ @links = links || {}
79
+ end
80
+
81
+ def customer
82
+ @links['customer']
83
+ end
84
+
85
+ def customer_bank_account
86
+ @links['customer_bank_account']
87
+ end
88
+
89
+ def mandate
90
+ @links['mandate']
91
+ end
92
+
93
+ def mandate_import
94
+ @links['mandate_import']
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,99 @@
1
+ require_relative './base_service'
2
+ require 'uri'
3
+
4
+ # encoding: utf-8
5
+ #
6
+ # This client is automatically generated from a template and JSON schema definition.
7
+ # See https://github.com/gocardless/gocardless-pro-ruby#contributing before editing.
8
+ #
9
+
10
+ module GoCardlessPro
11
+ module Services
12
+ # Service for making requests to the MandateImportEntry endpoints
13
+ class MandateImportEntriesService < BaseService
14
+ # For an existing [mandate import](#core-endpoints-mandate-imports), this
15
+ # endpoint can
16
+ # be used to add individual mandates to be imported into GoCardless.
17
+ #
18
+ # You can add no more than 30,000 rows to a single mandate import.
19
+ # If you attempt to go over this limit, the API will return a
20
+ # `record_limit_exceeded` error.
21
+ # Example URL: /mandate_import_entries
22
+ # @param options [Hash] parameters as a hash, under a params key.
23
+ def create(options = {})
24
+ path = '/mandate_import_entries'
25
+
26
+ params = options.delete(:params) || {}
27
+ options[:params] = {}
28
+ options[:params][envelope_key] = params
29
+
30
+ options[:retry_failures] = true
31
+
32
+ response = make_request(:post, path, options)
33
+
34
+ return if response.body.nil?
35
+
36
+ Resources::MandateImportEntry.new(unenvelope_body(response.body), response)
37
+ end
38
+
39
+ # For an existing mandate import, this endpoint lists all of the entries
40
+ # attached.
41
+ #
42
+ # After a mandate import has been submitted, you can use this endpoint to
43
+ # associate records
44
+ # in your system (using the `record_identifier` that you provided when creating
45
+ # the
46
+ # mandate import).
47
+ #
48
+ # Example URL: /mandate_import_entries
49
+ # @param options [Hash] parameters as a hash, under a params key.
50
+ def list(options = {})
51
+ path = '/mandate_import_entries'
52
+
53
+ options[:retry_failures] = true
54
+
55
+ response = make_request(:get, path, options)
56
+
57
+ ListResponse.new(
58
+ response: response,
59
+ unenveloped_body: unenvelope_body(response.body),
60
+ resource_class: Resources::MandateImportEntry
61
+ )
62
+ end
63
+
64
+ # Get a lazily enumerated list of all the items returned. This is simmilar to the `list` method but will paginate for you automatically.
65
+ #
66
+ # @param options [Hash] parameters as a hash. If the request is a GET, these will be converted to query parameters.
67
+ # Otherwise they will be the body of the request.
68
+ def all(options = {})
69
+ Paginator.new(
70
+ service: self,
71
+ options: options
72
+ ).enumerator
73
+ end
74
+
75
+ private
76
+
77
+ # Unenvelope the response of the body using the service's `envelope_key`
78
+ #
79
+ # @param body [Hash]
80
+ def unenvelope_body(body)
81
+ body[envelope_key] || body['data']
82
+ end
83
+
84
+ # return the key which API responses will envelope data under
85
+ def envelope_key
86
+ 'mandate_import_entries'
87
+ end
88
+
89
+ # take a URL with placeholder params and substitute them out for the actual value
90
+ # @param url [String] the URL with placeholders in
91
+ # @param param_map [Hash] a hash of placeholders and their actual values (which will be escaped)
92
+ def sub_url(url, param_map)
93
+ param_map.reduce(url) do |new_url, (param, value)|
94
+ new_url.gsub(":#{param}", URI.escape(value))
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,156 @@
1
+ require_relative './base_service'
2
+ require 'uri'
3
+
4
+ # encoding: utf-8
5
+ #
6
+ # This client is automatically generated from a template and JSON schema definition.
7
+ # See https://github.com/gocardless/gocardless-pro-ruby#contributing before editing.
8
+ #
9
+
10
+ module GoCardlessPro
11
+ module Services
12
+ # Service for making requests to the MandateImport endpoints
13
+ class MandateImportsService < BaseService
14
+ # Mandate imports are first created, before mandates are added one-at-a-time, so
15
+ # this endpoint merely signals the start of the import process. Once you've
16
+ # finished
17
+ # adding entries to an import, you should
18
+ # [submit](#mandate-imports-submit-a-mandate-import) it.
19
+ # Example URL: /mandate_imports
20
+ # @param options [Hash] parameters as a hash, under a params key.
21
+ def create(options = {})
22
+ path = '/mandate_imports'
23
+
24
+ params = options.delete(:params) || {}
25
+ options[:params] = {}
26
+ options[:params][envelope_key] = params
27
+
28
+ options[:retry_failures] = true
29
+
30
+ begin
31
+ response = make_request(:post, path, options)
32
+
33
+ # Response doesn't raise any errors until #body is called
34
+ response.tap(&:body)
35
+ rescue InvalidStateError => e
36
+ return get(e.conflicting_resource_id) if e.idempotent_creation_conflict?
37
+
38
+ raise e
39
+ end
40
+
41
+ return if response.body.nil?
42
+
43
+ Resources::MandateImport.new(unenvelope_body(response.body), response)
44
+ end
45
+
46
+ # Returns a single mandate import.
47
+ # Example URL: /mandate_imports/:identity
48
+ #
49
+ # @param identity # Unique identifier, beginning with "IM".
50
+ # @param options [Hash] parameters as a hash, under a params key.
51
+ def get(identity, options = {})
52
+ path = sub_url('/mandate_imports/:identity', 'identity' => identity)
53
+
54
+ options[:retry_failures] = true
55
+
56
+ response = make_request(:get, path, options)
57
+
58
+ return if response.body.nil?
59
+
60
+ Resources::MandateImport.new(unenvelope_body(response.body), response)
61
+ end
62
+
63
+ # Submits the mandate import, which allows it to be processed by a member of the
64
+ # GoCardless team. Once the import has been submitted, it can no longer have
65
+ # entries
66
+ # added to it.
67
+ # Example URL: /mandate_imports/:identity/actions/submit
68
+ #
69
+ # @param identity # Unique identifier, beginning with "IM".
70
+ # @param options [Hash] parameters as a hash, under a params key.
71
+ def submit(identity, options = {})
72
+ path = sub_url('/mandate_imports/:identity/actions/submit', 'identity' => identity)
73
+
74
+ params = options.delete(:params) || {}
75
+ options[:params] = {}
76
+ options[:params]['data'] = params
77
+
78
+ options[:retry_failures] = false
79
+
80
+ begin
81
+ response = make_request(:post, path, options)
82
+
83
+ # Response doesn't raise any errors until #body is called
84
+ response.tap(&:body)
85
+ rescue InvalidStateError => e
86
+ return get(e.conflicting_resource_id) if e.idempotent_creation_conflict?
87
+
88
+ raise e
89
+ end
90
+
91
+ return if response.body.nil?
92
+
93
+ Resources::MandateImport.new(unenvelope_body(response.body), response)
94
+ end
95
+
96
+ # Cancels the mandate import, which aborts the import process and stops the
97
+ # mandates
98
+ # being set up in GoCardless. Once the import has been cancelled, it can no
99
+ # longer have
100
+ # entries added to it. Mandate imports which have already been submitted cannot
101
+ # be
102
+ # cancelled.
103
+ # Example URL: /mandate_imports/:identity/actions/cancel
104
+ #
105
+ # @param identity # Unique identifier, beginning with "IM".
106
+ # @param options [Hash] parameters as a hash, under a params key.
107
+ def cancel(identity, options = {})
108
+ path = sub_url('/mandate_imports/:identity/actions/cancel', 'identity' => identity)
109
+
110
+ params = options.delete(:params) || {}
111
+ options[:params] = {}
112
+ options[:params]['data'] = params
113
+
114
+ options[:retry_failures] = false
115
+
116
+ begin
117
+ response = make_request(:post, path, options)
118
+
119
+ # Response doesn't raise any errors until #body is called
120
+ response.tap(&:body)
121
+ rescue InvalidStateError => e
122
+ return get(e.conflicting_resource_id) if e.idempotent_creation_conflict?
123
+
124
+ raise e
125
+ end
126
+
127
+ return if response.body.nil?
128
+
129
+ Resources::MandateImport.new(unenvelope_body(response.body), response)
130
+ end
131
+
132
+ private
133
+
134
+ # Unenvelope the response of the body using the service's `envelope_key`
135
+ #
136
+ # @param body [Hash]
137
+ def unenvelope_body(body)
138
+ body[envelope_key] || body['data']
139
+ end
140
+
141
+ # return the key which API responses will envelope data under
142
+ def envelope_key
143
+ 'mandate_imports'
144
+ end
145
+
146
+ # take a URL with placeholder params and substitute them out for the actual value
147
+ # @param url [String] the URL with placeholders in
148
+ # @param param_map [Hash] a hash of placeholders and their actual values (which will be escaped)
149
+ def sub_url(url, param_map)
150
+ param_map.reduce(url) do |new_url, (param, value)|
151
+ new_url.gsub(":#{param}", URI.escape(value))
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end