pensio_api 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +13 -13
- data/README.md +36 -0
- data/lib/pensio_api/credentials.rb +48 -2
- data/lib/pensio_api/funding_list.rb +2 -2
- data/lib/pensio_api/mixins/request_defaults.rb +9 -15
- data/pensio_api.gemspec +1 -1
- data/spec/lib/pensio_api/request_spec.rb +24 -7
- data/spec/spec_helper.rb +1 -0
- metadata +20 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9543dfa7d71a3752517ac385c643f887f78bdb4
|
4
|
+
data.tar.gz: 0fe99ac756ee3145f76f29eae0a993d5e36af8d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 630b0086874a418ca44e8f9a0eb34174a89bbabd840e0fa8571ffea67a6179d45b83551b36239c3ac066a8fd0e05e335c9e7c389473b33e2c2a9aeadeb50bfd0
|
7
|
+
data.tar.gz: 3c0f93a5fca86731e5b784c32d9dfebae6a43b94274d06ac839ad9f61b1373cca937d491615bb6e9f126b6775dc297e9b832de46b86c8eb3a160a917e25948c1
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
pensio_api (0.3.
|
4
|
+
pensio_api (0.3.1)
|
5
5
|
activesupport (>= 3.2)
|
6
6
|
httparty (>= 0.12.0)
|
7
7
|
multi_xml (>= 0.5.2)
|
@@ -9,12 +9,12 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://www.rubygems.org/
|
11
11
|
specs:
|
12
|
-
activesupport (4.
|
13
|
-
i18n (~> 0.
|
14
|
-
|
15
|
-
|
16
|
-
thread_safe (~> 0.
|
17
|
-
tzinfo (~>
|
12
|
+
activesupport (4.2.1)
|
13
|
+
i18n (~> 0.7)
|
14
|
+
json (~> 1.7, >= 1.7.7)
|
15
|
+
minitest (~> 5.1)
|
16
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
17
|
+
tzinfo (~> 1.1)
|
18
18
|
addressable (2.3.5)
|
19
19
|
celluloid (0.15.2)
|
20
20
|
timers (~> 1.1.0)
|
@@ -36,16 +36,15 @@ GEM
|
|
36
36
|
httparty (0.13.0)
|
37
37
|
json (~> 1.8)
|
38
38
|
multi_xml (>= 0.5.2)
|
39
|
-
i18n (0.
|
40
|
-
json (1.8.
|
39
|
+
i18n (0.7.0)
|
40
|
+
json (1.8.2)
|
41
41
|
listen (2.4.0)
|
42
42
|
celluloid (>= 0.15.2)
|
43
43
|
rb-fsevent (>= 0.9.3)
|
44
44
|
rb-inotify (>= 0.9)
|
45
45
|
lumberjack (1.0.4)
|
46
46
|
method_source (0.8.2)
|
47
|
-
minitest (
|
48
|
-
multi_json (1.9.2)
|
47
|
+
minitest (5.5.1)
|
49
48
|
multi_xml (0.5.5)
|
50
49
|
pry (0.9.12.4)
|
51
50
|
coderay (~> 1.0)
|
@@ -65,9 +64,10 @@ GEM
|
|
65
64
|
safe_yaml (0.9.7)
|
66
65
|
slop (3.4.7)
|
67
66
|
thor (0.18.1)
|
68
|
-
thread_safe (0.3.
|
67
|
+
thread_safe (0.3.5)
|
69
68
|
timers (1.1.0)
|
70
|
-
tzinfo (
|
69
|
+
tzinfo (1.2.2)
|
70
|
+
thread_safe (~> 0.1)
|
71
71
|
webmock (1.16.1)
|
72
72
|
addressable (>= 2.2.7)
|
73
73
|
crack (>= 0.3.2)
|
data/README.md
CHANGED
@@ -11,6 +11,10 @@ PensioAPI::Credentials.username = 'Your pensio username'
|
|
11
11
|
PensioAPI::Credentials.password = 'Your pensio password'
|
12
12
|
```
|
13
13
|
|
14
|
+
This is sufficient in the simple case where you only have a single integration with Pensio, using a single set of credentials.
|
15
|
+
|
16
|
+
If you require support for multiple connections to Pensio's API, using different sets of credentials, you must define named 'credentials sets' - see below under [Multiple Credentials Sets](#multiple-credentials-sets).
|
17
|
+
|
14
18
|
## Transactions
|
15
19
|
|
16
20
|
To query transactions in your Pensio gateway, use the method `PensioAPI::Transaction.find`. This takes a number of parameters as defined in the Pensio documentation. For example:
|
@@ -67,6 +71,38 @@ The library provides two generic error classes for requests.
|
|
67
71
|
|
68
72
|
Additionally, a third error class `PensioAPI::NoCredentials` is raised if credentials have not been provided. See "Getting Started" for more details.
|
69
73
|
|
74
|
+
## Multiple Credentials Sets
|
75
|
+
|
76
|
+
If you require multiple connections to Pensio's API using different credentials, you must set up named credentials sets. For example, if you need separate credentials for your membership payments and ticket sales, you can configure them as follows:
|
77
|
+
|
78
|
+
```
|
79
|
+
PensioAPI::Credentials.for(:membership).base_uri = 'Your pensio gateway URI for memberships'
|
80
|
+
PensioAPI::Credentials.for(:membership).username = 'Your pensio username for memberships'
|
81
|
+
PensioAPI::Credentials.for(:membership).password = 'Your pensio password for memberships'
|
82
|
+
```
|
83
|
+
|
84
|
+
```
|
85
|
+
PensioAPI::Credentials.for(:tickets).base_uri = 'Your pensio gateway URI for tickets'
|
86
|
+
PensioAPI::Credentials.for(:tickets).username = 'Your pensio username for tickets'
|
87
|
+
PensioAPI::Credentials.for(:tickets).password = 'Your pensio password for tickets'
|
88
|
+
```
|
89
|
+
|
90
|
+
In this case, you *must* also pass the credential set to each request, by including a 'credentials' key in the options hash. The value should be a String or Symbol with the credential set name (e.g. :tickets, 'tickets'), or the PensioAPI::Credentials instance itself (e.g. PensioAPI::Credentials.for(:tickets)). For example, these three examples are equivalent:
|
91
|
+
|
92
|
+
```
|
93
|
+
PensioAPI::Transaction.find(credentials: :tickets, transaction_id: '123')
|
94
|
+
PensioAPI::Transaction.find(credentials: 'tickets', transaction_id: '123')
|
95
|
+
PensioAPI::Transaction.find(credentials: PensioAPI::Credentials.for(:tickets), transaction_id: '123')
|
96
|
+
```
|
97
|
+
|
98
|
+
Typically if you have multiple credentials sets, the default credentials (i.e. PensioAPI::Credentials.base_uri etc) are ignored, and making any Pensio API requests without explicitly passing a 'credentials' argument will raise `PensioAPI::NoCredentials`. However, if you have an existing Pensio integration using the simple default credentials approach and now want to also use a named credentials set, you can tell the library to explicitly allow this, by setting:
|
99
|
+
|
100
|
+
```
|
101
|
+
PensioAPI::Credentials.allow_defaults = true
|
102
|
+
```
|
103
|
+
|
104
|
+
In this scenario, requests performed without an explicit credentials set will use the default set, and those with named credentials will use those. BE CAREFUL: If you accidentally omit the 'credentials' options key when making a request, it will use the default credentials set, which could lead to undesired behaviour. This is why, by default, if you have multiple credentials sets, the default set is disabled.
|
105
|
+
|
70
106
|
## TODO
|
71
107
|
|
72
108
|
* Better documentation - more examples, RDoc docs
|
@@ -1,7 +1,53 @@
|
|
1
1
|
module PensioAPI
|
2
|
-
|
2
|
+
class Credentials
|
3
3
|
class << self
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :credentials_sets, :allow_defaults
|
5
|
+
|
6
|
+
# backwards compatability - set default credentials
|
7
|
+
|
8
|
+
def base_uri
|
9
|
+
default_credentials.base_uri
|
10
|
+
end
|
11
|
+
|
12
|
+
def base_uri=(value)
|
13
|
+
default_credentials.base_uri = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def username
|
17
|
+
default_credentials.username
|
18
|
+
end
|
19
|
+
|
20
|
+
def username=(value)
|
21
|
+
default_credentials.username = value
|
22
|
+
end
|
23
|
+
|
24
|
+
def password
|
25
|
+
default_credentials.password
|
26
|
+
end
|
27
|
+
|
28
|
+
def password=(value)
|
29
|
+
default_credentials.password = value
|
30
|
+
end
|
31
|
+
|
32
|
+
def for(context)
|
33
|
+
self.credentials_sets ||= {}
|
34
|
+
self.credentials_sets[context.to_sym] ||= PensioAPI::Credentials.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def default_credentials
|
38
|
+
self.for(:default)
|
39
|
+
end
|
40
|
+
|
41
|
+
def credentials_mode
|
42
|
+
self.for(:default)
|
43
|
+
self.credentials_sets.count == 1 ? :default : :multiple
|
44
|
+
end
|
5
45
|
end
|
46
|
+
|
47
|
+
def supplied?
|
48
|
+
!!(base_uri && username && password)
|
49
|
+
end
|
50
|
+
|
51
|
+
attr_accessor :base_uri, :username, :password
|
6
52
|
end
|
7
53
|
end
|
@@ -23,8 +23,8 @@ module PensioAPI
|
|
23
23
|
@download_link = @raw['DownloadLink']
|
24
24
|
end
|
25
25
|
|
26
|
-
def download
|
27
|
-
@result ||= FundingListRequest.new(@download_link).result
|
26
|
+
def download(options={})
|
27
|
+
@result ||= FundingListRequest.new(@download_link, options).result
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -4,13 +4,7 @@ module PensioAPI
|
|
4
4
|
def self.included(base)
|
5
5
|
base.send(:include, HTTParty)
|
6
6
|
base.send(:attr_reader, :response)
|
7
|
-
base.
|
8
|
-
end
|
9
|
-
|
10
|
-
module ClassMethods
|
11
|
-
def set_base_uri
|
12
|
-
self.base_uri PensioAPI::Credentials.base_uri unless self.base_uri
|
13
|
-
end
|
7
|
+
base.send(:attr_accessor, :credentials)
|
14
8
|
end
|
15
9
|
|
16
10
|
HEADERS = {
|
@@ -18,9 +12,12 @@ module PensioAPI
|
|
18
12
|
}
|
19
13
|
|
20
14
|
def initialize(path, options={})
|
21
|
-
|
22
|
-
|
23
|
-
|
15
|
+
@credentials = options.delete(:credentials)
|
16
|
+
@credentials = PensioAPI::Credentials.for(@credentials.to_sym) unless @credentials.nil? || @credentials.is_a?(PensioAPI::Credentials)
|
17
|
+
@credentials ||= PensioAPI::Credentials.default_credentials if PensioAPI::Credentials.credentials_mode == :default || PensioAPI::Credentials.allow_defaults
|
18
|
+
raise Errors::NoCredentials unless @credentials && @credentials.supplied?
|
19
|
+
|
20
|
+
self.class.base_uri @credentials.base_uri unless self.class.base_uri
|
24
21
|
|
25
22
|
@response = self.class.post(path, request_options(options))
|
26
23
|
end
|
@@ -37,14 +34,11 @@ module PensioAPI
|
|
37
34
|
|
38
35
|
def auth
|
39
36
|
{
|
40
|
-
username:
|
41
|
-
password:
|
37
|
+
username: @credentials.username,
|
38
|
+
password: @credentials.password
|
42
39
|
}
|
43
40
|
end
|
44
41
|
|
45
|
-
def credentials_supplied?
|
46
|
-
Credentials.base_uri && Credentials.username && Credentials.password
|
47
|
-
end
|
48
42
|
end
|
49
43
|
end
|
50
44
|
end
|
data/pensio_api.gemspec
CHANGED
@@ -18,8 +18,8 @@ describe PensioAPI::Request do
|
|
18
18
|
before :each do
|
19
19
|
PensioAPI::Request.stub(:post).and_return(
|
20
20
|
construct_response({
|
21
|
-
|
22
|
-
|
21
|
+
'Test' => 'true'
|
22
|
+
})
|
23
23
|
)
|
24
24
|
end
|
25
25
|
|
@@ -82,6 +82,27 @@ describe PensioAPI::Request do
|
|
82
82
|
expect(p.send(:request_options, {transaction_id: 5432})[:body][:transaction_id]).to eq(5432)
|
83
83
|
end
|
84
84
|
end
|
85
|
+
|
86
|
+
context 'with alternative credentials' do
|
87
|
+
it 'sends the correct credentials' do
|
88
|
+
creds = PensioAPI::Credentials.for(:ticketing)
|
89
|
+
creds.base_uri = 'https://www.test.com'
|
90
|
+
creds.username = 'ticketing_username'
|
91
|
+
creds.password = 'ticketing_password'
|
92
|
+
|
93
|
+
# pass credentials instance
|
94
|
+
req1 = PensioAPI::Request.new('/test', credentials: creds)
|
95
|
+
|
96
|
+
# or pass credentials set name
|
97
|
+
req2 = PensioAPI::Request.new('/test', credentials: :ticketing)
|
98
|
+
|
99
|
+
expect(req1.send(:request_options, {})[:basic_auth]).to_not be_nil
|
100
|
+
expect(req1.send(:request_options, {})[:basic_auth]).to eq({ username: creds.username, password: creds.password})
|
101
|
+
|
102
|
+
expect(req2.send(:request_options, {})[:basic_auth]).to_not be_nil
|
103
|
+
expect(req2.send(:request_options, {})[:basic_auth]).to eq({ username: creds.username, password: creds.password})
|
104
|
+
end
|
105
|
+
end
|
85
106
|
end
|
86
107
|
|
87
108
|
describe 'error handling' do
|
@@ -107,11 +128,7 @@ describe PensioAPI::Request do
|
|
107
128
|
|
108
129
|
context 'with incomplete credentials' do
|
109
130
|
before :each do
|
110
|
-
PensioAPI::Credentials =
|
111
|
-
base_uri: nil,
|
112
|
-
username: nil,
|
113
|
-
password: nil
|
114
|
-
})
|
131
|
+
PensioAPI::Credentials.base_uri = nil
|
115
132
|
end
|
116
133
|
|
117
134
|
it 'raises a PensioAPI::Errors::NoCredentials error' do
|
data/spec/spec_helper.rb
CHANGED
@@ -16,6 +16,7 @@ RSpec.configure do |config|
|
|
16
16
|
PensioAPI::Credentials.base_uri = 'https://testgateway.pensio.com'
|
17
17
|
PensioAPI::Credentials.username = 'test_user'
|
18
18
|
PensioAPI::Credentials.password = 'password'
|
19
|
+
PensioAPI::Credentials.allow_defaults = true # because some spec examples set up additional creds
|
19
20
|
end
|
20
21
|
|
21
22
|
# Run specs in random order to surface order dependencies. If you find an
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pensio_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Sell
|
@@ -9,104 +9,104 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '2.14'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '2.14'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: webmock
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: 1.16.1
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 1.16.1
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: guard
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: 2.2.5
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 2.2.5
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: guard-rspec
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: 4.2.4
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: 4.2.4
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: httparty
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: 0.12.0
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: 0.12.0
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: activesupport
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '3.2'
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '3.2'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: multi_xml
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: 0.5.2
|
105
105
|
type: :runtime
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: 0.5.2
|
112
112
|
description:
|
@@ -115,7 +115,7 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
- .rspec
|
118
|
+
- ".rspec"
|
119
119
|
- Gemfile
|
120
120
|
- Gemfile.lock
|
121
121
|
- Guardfile
|
@@ -217,17 +217,17 @@ require_paths:
|
|
217
217
|
- lib
|
218
218
|
required_ruby_version: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
|
-
- -
|
220
|
+
- - ">="
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: '0'
|
223
223
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
224
|
requirements:
|
225
|
-
- -
|
225
|
+
- - ">="
|
226
226
|
- !ruby/object:Gem::Version
|
227
227
|
version: '0'
|
228
228
|
requirements: []
|
229
229
|
rubyforge_project:
|
230
|
-
rubygems_version: 2.
|
230
|
+
rubygems_version: 2.2.2
|
231
231
|
signing_key:
|
232
232
|
specification_version: 4
|
233
233
|
summary: Provides integration for the Pensio Merchant API
|