gocardless_pro 0.3.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 +7 -0
- data/.rspec +2 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +22 -0
- data/README.md +146 -0
- data/circle.yml +3 -0
- data/demo.rb +9 -0
- data/gocardless_pro.gemspec +26 -0
- data/lib/gocardless_pro.rb +73 -0
- data/lib/gocardless_pro/api_service.rb +58 -0
- data/lib/gocardless_pro/client.rb +135 -0
- data/lib/gocardless_pro/error.rb +42 -0
- data/lib/gocardless_pro/error/gocardless_error.rb +5 -0
- data/lib/gocardless_pro/error/invalid_api_usage_error.rb +5 -0
- data/lib/gocardless_pro/error/invalid_state_error.rb +5 -0
- data/lib/gocardless_pro/error/validation_error.rb +5 -0
- data/lib/gocardless_pro/list_response.rb +29 -0
- data/lib/gocardless_pro/paginator.rb +43 -0
- data/lib/gocardless_pro/request.rb +69 -0
- data/lib/gocardless_pro/resources/creditor.rb +84 -0
- data/lib/gocardless_pro/resources/creditor_bank_account.rb +78 -0
- data/lib/gocardless_pro/resources/customer.rb +75 -0
- data/lib/gocardless_pro/resources/customer_bank_account.rb +80 -0
- data/lib/gocardless_pro/resources/event.rb +75 -0
- data/lib/gocardless_pro/resources/helper.rb +29 -0
- data/lib/gocardless_pro/resources/mandate.rb +70 -0
- data/lib/gocardless_pro/resources/payment.rb +87 -0
- data/lib/gocardless_pro/resources/payout.rb +66 -0
- data/lib/gocardless_pro/resources/redirect_flow.rb +106 -0
- data/lib/gocardless_pro/resources/refund.rb +71 -0
- data/lib/gocardless_pro/resources/subscription.rb +155 -0
- data/lib/gocardless_pro/response.rb +77 -0
- data/lib/gocardless_pro/services/base_service.rb +28 -0
- data/lib/gocardless_pro/services/creditor_bank_accounts_service.rb +119 -0
- data/lib/gocardless_pro/services/creditors_service.rb +113 -0
- data/lib/gocardless_pro/services/customer_bank_accounts_service.rb +154 -0
- data/lib/gocardless_pro/services/customers_service.rb +113 -0
- data/lib/gocardless_pro/services/events_service.rb +80 -0
- data/lib/gocardless_pro/services/helpers_service.rb +99 -0
- data/lib/gocardless_pro/services/mandates_service.rb +173 -0
- data/lib/gocardless_pro/services/payments_service.rb +168 -0
- data/lib/gocardless_pro/services/payouts_service.rb +82 -0
- data/lib/gocardless_pro/services/redirect_flows_service.rb +98 -0
- data/lib/gocardless_pro/services/refunds_service.rb +132 -0
- data/lib/gocardless_pro/services/subscriptions_service.rb +134 -0
- data/lib/gocardless_pro/version.rb +8 -0
- data/spec/api_service_spec.rb +73 -0
- data/spec/client_spec.rb +19 -0
- data/spec/error_spec.rb +44 -0
- data/spec/resources/creditor_bank_account_spec.rb +109 -0
- data/spec/resources/creditor_spec.rb +125 -0
- data/spec/resources/customer_bank_account_spec.rb +109 -0
- data/spec/resources/customer_spec.rb +135 -0
- data/spec/resources/event_spec.rb +113 -0
- data/spec/resources/helper_spec.rb +23 -0
- data/spec/resources/mandate_spec.rb +97 -0
- data/spec/resources/payment_spec.rb +129 -0
- data/spec/resources/payout_spec.rb +89 -0
- data/spec/resources/redirect_flow_spec.rb +97 -0
- data/spec/resources/refund_spec.rb +77 -0
- data/spec/resources/subscription_spec.rb +165 -0
- data/spec/response_spec.rb +89 -0
- data/spec/services/creditor_bank_accounts_service_spec.rb +413 -0
- data/spec/services/creditors_service_spec.rb +388 -0
- data/spec/services/customer_bank_accounts_service_spec.rb +452 -0
- data/spec/services/customers_service_spec.rb +429 -0
- data/spec/services/events_service_spec.rb +217 -0
- data/spec/services/helpers_service_spec.rb +122 -0
- data/spec/services/mandates_service_spec.rb +495 -0
- data/spec/services/payments_service_spec.rb +546 -0
- data/spec/services/payouts_service_spec.rb +217 -0
- data/spec/services/redirect_flows_service_spec.rb +254 -0
- data/spec/services/refunds_service_spec.rb +323 -0
- data/spec/services/subscriptions_service_spec.rb +557 -0
- data/spec/spec_helper.rb +91 -0
- metadata +224 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bc56592c0c41639dd981845de276d9634b423c9c
|
4
|
+
data.tar.gz: 54d4dd9ed407bb39e3ce73de1fe0acfab24d3b61
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 48da3d84a089b8b8de211e397c21bdb8c4c495c743b22286a90f975a2858be91469f80e0d14be88efeb29592f4829ac69a371177daae2a918d7374bb85b5297b
|
7
|
+
data.tar.gz: c328b8e0cd31285c2979c80bf79854e65b672352d3f7fdc3c0df4f655de32f91a34cdbab950a164fccc5974ef1859790578919eafe210ff0a207b0e2ecb0a137
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 GoCardless
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
# Ruby Client for GoCardless Pro API
|
2
|
+
|
3
|
+
- [YARD Docs](http://gocardless.github.io/pro-client-ruby/)
|
4
|
+
- [GoCardless Pro API Docs](https://developer.gocardless.com/pro/)
|
5
|
+
- [RubyGems](https://rubygems.org/gems/gocardless_pro)
|
6
|
+
|
7
|
+
This client is still in beta and is subject to change. Until a stable major version is released you should expect breaking changes.
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'gocardless_pro'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then load it into your application:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
require 'gocardless_pro'
|
19
|
+
```
|
20
|
+
|
21
|
+
## Usage Examples
|
22
|
+
|
23
|
+
- In the case of a single response, the client will return you an instance of the resource
|
24
|
+
- In the case of list responses, the client will return an instance of `ListResponse`, which is enumerable.
|
25
|
+
- You can also call `#all` to get a lazily paginated list of resource that will deal with making extra API requests to paginate through all the data
|
26
|
+
|
27
|
+
### Initialising the client
|
28
|
+
|
29
|
+
The client is initialised with an Access Token.
|
30
|
+
You can also pass in `environment` as `:sandbox` to make requests to the sandbox environment rather than the live one.
|
31
|
+
|
32
|
+
```rb
|
33
|
+
@client = GoCardlessPro::Client.new(
|
34
|
+
token: ENV["GOCARDLESS_TOKEN"]
|
35
|
+
)
|
36
|
+
```
|
37
|
+
|
38
|
+
### GET requests
|
39
|
+
|
40
|
+
You can make a request to get a list of resources using the `list` method:
|
41
|
+
|
42
|
+
```rb
|
43
|
+
@client.customers.list
|
44
|
+
```
|
45
|
+
|
46
|
+
This README will use `customers` throughout but each of the resources in the API is available in this library. They are defined in [`gocardless.rb`](https://github.com/gocardless/pro-client-ruby/blob/master/lib/gocardless_pro.rb#L87).
|
47
|
+
|
48
|
+
If you need to pass any options, the last (or in the absence of URL params, the only) argument is an options hash. This is used to pass query parameters for `GET` requests:
|
49
|
+
|
50
|
+
```rb
|
51
|
+
@client.customers.list(params: { limit: 400 })
|
52
|
+
```
|
53
|
+
|
54
|
+
A call to `list` returns an instance of `GoCardlessPro::ListResponse`. You can call `records` on this to iterate through results:
|
55
|
+
|
56
|
+
```rb
|
57
|
+
@client.customers.list.records do |customer|
|
58
|
+
p customer.given_name
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
In the case where a url parameter is needed, the method signature will contain required arguments:
|
63
|
+
|
64
|
+
```rb
|
65
|
+
@client.customers.get(customers_id)
|
66
|
+
```
|
67
|
+
|
68
|
+
As with list, the last argument can be an options hash, with any URL parameters given under the `params` key:
|
69
|
+
|
70
|
+
```rb
|
71
|
+
@client.customers.get(customers_id, params: { limit: 200 })
|
72
|
+
```
|
73
|
+
|
74
|
+
### POST/PUT Requests
|
75
|
+
|
76
|
+
For POST and PUT requests you need to pass in the body in under the `params` key:
|
77
|
+
|
78
|
+
```rb
|
79
|
+
@client.customers.create(
|
80
|
+
params: {
|
81
|
+
first_name: "Pete",
|
82
|
+
last_name: "Hamilton",
|
83
|
+
...
|
84
|
+
}
|
85
|
+
)
|
86
|
+
```
|
87
|
+
|
88
|
+
As with GET requests, if any parameters are required they come first:
|
89
|
+
|
90
|
+
```rb
|
91
|
+
@client.customers.update(customer_id, {...})
|
92
|
+
```
|
93
|
+
|
94
|
+
### Custom Headers
|
95
|
+
|
96
|
+
If you need to pass in a custom header to an endpoint, you can pass in a `headers` object to the options hash:
|
97
|
+
|
98
|
+
```rb
|
99
|
+
@client.helpers.mandate({
|
100
|
+
params: {
|
101
|
+
account_number: 200000,
|
102
|
+
...
|
103
|
+
},
|
104
|
+
headers: {
|
105
|
+
'Accept': 'application/pdf'
|
106
|
+
}
|
107
|
+
})
|
108
|
+
```
|
109
|
+
|
110
|
+
There are very few endpoints in the API that require custom headers. Currently, the only ones that do are [helpers](https://developer.gocardless.com/pro/#api-endpoints-helpers).
|
111
|
+
|
112
|
+
### Handling failures
|
113
|
+
|
114
|
+
When an API returns an error, the client __will raise__ an error that corresponds to the type of error. All errors subclass `GoCardless::Error`. There are four errors that could be thrown:
|
115
|
+
|
116
|
+
- `GoCardless::GoCardlessError`
|
117
|
+
- `GoCardless::InvalidApiUsageError`
|
118
|
+
- `GoCardless::InvalidStateError`
|
119
|
+
- `GoCardless::ValidationError`
|
120
|
+
|
121
|
+
These errors are fully documented in the [API documentation](https://developer.gocardless.com/pro/#overview-errors).
|
122
|
+
|
123
|
+
The error has the following methods to allow you to access the information from the API response:
|
124
|
+
|
125
|
+
- `#documentation_url`
|
126
|
+
- `#message`
|
127
|
+
- `#type`
|
128
|
+
- `#code`
|
129
|
+
- `#request_id`
|
130
|
+
- `#errors`
|
131
|
+
|
132
|
+
## Supporting Ruby < 2.0.0
|
133
|
+
The client only supports Ruby >= 2.0.0 out of the box due to our use of
|
134
|
+
Enumerable::Lazy for lazy loading of paginated API resources.
|
135
|
+
|
136
|
+
However, support for previous ruby versions can be added using a gem such as
|
137
|
+
[backports](https://github.com/marcandre/backports).
|
138
|
+
|
139
|
+
1. Add backports to your Gemfile
|
140
|
+
```gem 'backports'```
|
141
|
+
2. Require lazy enumerables
|
142
|
+
```require 'backports/2.0.0/enumerable/lazy.rb'```
|
143
|
+
|
144
|
+
## Contributing
|
145
|
+
|
146
|
+
This client is auto-generated from Crank, a toolchain that we hope to soon open source. Issues should for now be reported on this repository. __Please do not modify the source code yourself, your changes will be overriden!__
|
data/circle.yml
ADDED
data/demo.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gocardless_pro/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "gocardless_pro"
|
8
|
+
spec.version = GoCardlessPro::VERSION
|
9
|
+
spec.authors = %w(GoCardless)
|
10
|
+
spec.email = %w(engineering@gocardless.com)
|
11
|
+
spec.summary = %q{A gem for calling the GoCardless Pro API}
|
12
|
+
spec.homepage = "https://github.com/gocardless/gocardless-pro-ruby"
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_development_dependency 'rspec', '~> 3.1'
|
21
|
+
spec.add_development_dependency 'webmock', '~> 1.18'
|
22
|
+
spec.add_development_dependency 'rubocop', '~> 0.30.0'
|
23
|
+
spec.add_development_dependency 'yard', '~> 0.8.7.6'
|
24
|
+
|
25
|
+
spec.add_dependency 'faraday', ['>= 0.8.9', '< 0.10']
|
26
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# WARNING: Do not edit by hand, this file was generated by Crank:
|
4
|
+
#
|
5
|
+
# https://github.com/gocardless/crank
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'json'
|
9
|
+
require 'zlib'
|
10
|
+
require 'faraday'
|
11
|
+
require 'time'
|
12
|
+
|
13
|
+
require 'uri'
|
14
|
+
|
15
|
+
module GoCardlessPro
|
16
|
+
end
|
17
|
+
|
18
|
+
version_file = 'gocardless_pro/version'
|
19
|
+
|
20
|
+
if File.file? File.expand_path("#{version_file}.rb", File.dirname(__FILE__))
|
21
|
+
require_relative version_file
|
22
|
+
else
|
23
|
+
GoCardlessPro::VERSION = ''
|
24
|
+
end
|
25
|
+
|
26
|
+
require_relative 'gocardless_pro/api_service'
|
27
|
+
require_relative 'gocardless_pro/list_response'
|
28
|
+
require_relative 'gocardless_pro/error'
|
29
|
+
require_relative 'gocardless_pro/error/validation_error'
|
30
|
+
require_relative 'gocardless_pro/error/gocardless_error'
|
31
|
+
require_relative 'gocardless_pro/error/invalid_api_usage_error'
|
32
|
+
require_relative 'gocardless_pro/error/invalid_state_error'
|
33
|
+
require_relative 'gocardless_pro/paginator'
|
34
|
+
require_relative 'gocardless_pro/request'
|
35
|
+
require_relative 'gocardless_pro/response'
|
36
|
+
|
37
|
+
require_relative 'gocardless_pro/resources/creditor'
|
38
|
+
require_relative 'gocardless_pro/services/creditors_service'
|
39
|
+
|
40
|
+
require_relative 'gocardless_pro/resources/creditor_bank_account'
|
41
|
+
require_relative 'gocardless_pro/services/creditor_bank_accounts_service'
|
42
|
+
|
43
|
+
require_relative 'gocardless_pro/resources/customer'
|
44
|
+
require_relative 'gocardless_pro/services/customers_service'
|
45
|
+
|
46
|
+
require_relative 'gocardless_pro/resources/customer_bank_account'
|
47
|
+
require_relative 'gocardless_pro/services/customer_bank_accounts_service'
|
48
|
+
|
49
|
+
require_relative 'gocardless_pro/resources/event'
|
50
|
+
require_relative 'gocardless_pro/services/events_service'
|
51
|
+
|
52
|
+
require_relative 'gocardless_pro/resources/helper'
|
53
|
+
require_relative 'gocardless_pro/services/helpers_service'
|
54
|
+
|
55
|
+
require_relative 'gocardless_pro/resources/mandate'
|
56
|
+
require_relative 'gocardless_pro/services/mandates_service'
|
57
|
+
|
58
|
+
require_relative 'gocardless_pro/resources/payment'
|
59
|
+
require_relative 'gocardless_pro/services/payments_service'
|
60
|
+
|
61
|
+
require_relative 'gocardless_pro/resources/payout'
|
62
|
+
require_relative 'gocardless_pro/services/payouts_service'
|
63
|
+
|
64
|
+
require_relative 'gocardless_pro/resources/redirect_flow'
|
65
|
+
require_relative 'gocardless_pro/services/redirect_flows_service'
|
66
|
+
|
67
|
+
require_relative 'gocardless_pro/resources/refund'
|
68
|
+
require_relative 'gocardless_pro/services/refunds_service'
|
69
|
+
|
70
|
+
require_relative 'gocardless_pro/resources/subscription'
|
71
|
+
require_relative 'gocardless_pro/services/subscriptions_service'
|
72
|
+
|
73
|
+
require_relative 'gocardless_pro/client.rb'
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# WARNING: Do not edit by hand, this file was generated by Crank:
|
4
|
+
#
|
5
|
+
# https://github.com/gocardless/crank
|
6
|
+
#
|
7
|
+
require 'uri'
|
8
|
+
require 'base64'
|
9
|
+
|
10
|
+
module GoCardlessPro
|
11
|
+
# GoCardless Pro API
|
12
|
+
class ApiService
|
13
|
+
# Initialize an APIService
|
14
|
+
#
|
15
|
+
# @param url [String] the URL to make requests to
|
16
|
+
# @param key [String] the API Key ID to use
|
17
|
+
# @param secret [String] the API key secret to use
|
18
|
+
# @param options [Hash] additional options to use when creating the service
|
19
|
+
def initialize(url, token, options = {})
|
20
|
+
@url = url
|
21
|
+
root_url, @path_prefix = unpack_url(url)
|
22
|
+
http_adapter = options[:http_adapter] || [:net_http]
|
23
|
+
@connection = Faraday.new(url: root_url) do |faraday|
|
24
|
+
faraday.adapter(*http_adapter)
|
25
|
+
end
|
26
|
+
|
27
|
+
@headers = options[:default_headers] || {}
|
28
|
+
@headers['Authorization'] = "Bearer #{token}"
|
29
|
+
end
|
30
|
+
|
31
|
+
# Make a request to the API
|
32
|
+
#
|
33
|
+
# @param method [Symbol] the method to use to make the request
|
34
|
+
# @param path [String] the URL (without the base domain) to make the request to
|
35
|
+
# @param options [Hash] the options hash
|
36
|
+
def make_request(method, path, options = {})
|
37
|
+
fail ArgumentError, 'options must be a hash' unless options.is_a?(Hash)
|
38
|
+
options[:headers] ||= {}
|
39
|
+
options[:headers] = @headers.merge(options[:headers])
|
40
|
+
Request.new(@connection, method, @path_prefix + path, options).request
|
41
|
+
end
|
42
|
+
|
43
|
+
# inspect the API Service
|
44
|
+
def inspect
|
45
|
+
url = URI.parse(@url)
|
46
|
+
url.password = 'REDACTED' unless url.password.nil?
|
47
|
+
"#<GoCardlessPro::Client url=\"#{url}\">"
|
48
|
+
end
|
49
|
+
alias_method :to_s, :inspect
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def unpack_url(url)
|
54
|
+
path = URI.parse(url).path
|
55
|
+
[URI.join(url).to_s, path == '/' ? '' : path]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
module GoCardlessPro
|
2
|
+
# A class for working with and talking to the GoCardless API
|
3
|
+
class Client
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
# Access to the service for creditor to make API calls
|
7
|
+
def creditors
|
8
|
+
@creditors ||= Services::CreditorsService.new(@api_service)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Access to the service for creditor_bank_account to make API calls
|
12
|
+
def creditor_bank_accounts
|
13
|
+
@creditor_bank_accounts ||= Services::CreditorBankAccountsService.new(@api_service)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Access to the service for customer to make API calls
|
17
|
+
def customers
|
18
|
+
@customers ||= Services::CustomersService.new(@api_service)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Access to the service for customer_bank_account to make API calls
|
22
|
+
def customer_bank_accounts
|
23
|
+
@customer_bank_accounts ||= Services::CustomerBankAccountsService.new(@api_service)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Access to the service for event to make API calls
|
27
|
+
def events
|
28
|
+
@events ||= Services::EventsService.new(@api_service)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Access to the service for helper to make API calls
|
32
|
+
def helpers
|
33
|
+
@helpers ||= Services::HelpersService.new(@api_service)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Access to the service for mandate to make API calls
|
37
|
+
def mandates
|
38
|
+
@mandates ||= Services::MandatesService.new(@api_service)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Access to the service for payment to make API calls
|
42
|
+
def payments
|
43
|
+
@payments ||= Services::PaymentsService.new(@api_service)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Access to the service for payout to make API calls
|
47
|
+
def payouts
|
48
|
+
@payouts ||= Services::PayoutsService.new(@api_service)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Access to the service for redirect_flow to make API calls
|
52
|
+
def redirect_flows
|
53
|
+
@redirect_flows ||= Services::RedirectFlowsService.new(@api_service)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Access to the service for refund to make API calls
|
57
|
+
def refunds
|
58
|
+
@refunds ||= Services::RefundsService.new(@api_service)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Access to the service for subscription to make API calls
|
62
|
+
def subscriptions
|
63
|
+
@subscriptions ||= Services::SubscriptionsService.new(@api_service)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Get a Client configured to use HTTP Basic authentication with the GC Api
|
67
|
+
#
|
68
|
+
# @param options [Hash<Symbol,String>] configuration for creating the client
|
69
|
+
# @option options [Symbol] :environment the environment to connect to - one of `:live` or `:sandbox`.
|
70
|
+
# @option options [Symbol] :access_token the API token
|
71
|
+
# @option options [Symbol] :url the full URL used to make requests to. If you specify this, it will be used over the `environment` option.
|
72
|
+
# @return [Client] A client configured to use the API with HTTP Basic
|
73
|
+
# authentication.
|
74
|
+
#
|
75
|
+
def initialize(options)
|
76
|
+
access_token = options.delete(:access_token) || fail('No Access Token given to GoCardless Client')
|
77
|
+
environment = options.delete(:environment) || :live
|
78
|
+
url = options.delete(:url) || url_for_environment(environment)
|
79
|
+
options = custom_options(options)
|
80
|
+
@api_service = ApiService.new(url, access_token, options)
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def url_for_environment(environment)
|
86
|
+
if environment === :live
|
87
|
+
'https://api.gocardless.com'
|
88
|
+
elsif environment === :sandbox
|
89
|
+
'https://api-sandbox.gocardless.com'
|
90
|
+
else
|
91
|
+
fail "Unknown environment key: #{environment}"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# Get customized options.
|
96
|
+
def custom_options(options)
|
97
|
+
return default_options if options.nil?
|
98
|
+
|
99
|
+
return default_options.merge(options) unless options[:default_headers]
|
100
|
+
|
101
|
+
opts = default_options.merge(options)
|
102
|
+
opts[:default_headers] = default_options[:default_headers].merge(options[:default_headers])
|
103
|
+
|
104
|
+
opts
|
105
|
+
end
|
106
|
+
|
107
|
+
# Get the default options.
|
108
|
+
def default_options
|
109
|
+
{
|
110
|
+
default_headers: {
|
111
|
+
'GoCardless-Version' => '2015-04-29',
|
112
|
+
'User-Agent' => "#{user_agent}",
|
113
|
+
'Content-Type' => 'application/json'
|
114
|
+
}
|
115
|
+
}
|
116
|
+
end
|
117
|
+
|
118
|
+
def user_agent
|
119
|
+
@user_agent ||=
|
120
|
+
begin
|
121
|
+
gem_name = 'gocardless_pro'
|
122
|
+
gem_info = "#{gem_name}"
|
123
|
+
gem_info += "/v#{ GoCardlessPro::VERSION}" if defined?(GoCardlessPro::VERSION)
|
124
|
+
ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'
|
125
|
+
ruby_version = RUBY_VERSION
|
126
|
+
ruby_version += " p#{RUBY_PATCHLEVEL}" if defined?(RUBY_PATCHLEVEL)
|
127
|
+
comment = ["#{ruby_engine} #{ruby_version}"]
|
128
|
+
comment << "gocardless_pro v#{ GoCardlessPro::VERSION}"
|
129
|
+
comment << "faraday v#{Faraday::VERSION}"
|
130
|
+
comment << RUBY_PLATFORM if defined?(RUBY_PLATFORM)
|
131
|
+
"#{gem_info} (#{comment.join('; ')})"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|