pin_pays 0.2.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/.gitignore +4 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +288 -0
- data/Rakefile +8 -0
- data/lib/pin_pays/api.rb +48 -0
- data/lib/pin_pays/cards.rb +16 -0
- data/lib/pin_pays/charges.rb +42 -0
- data/lib/pin_pays/config.rb +21 -0
- data/lib/pin_pays/customers.rb +43 -0
- data/lib/pin_pays/error.rb +25 -0
- data/lib/pin_pays/refunds.rb +23 -0
- data/lib/pin_pays/version.rb +3 -0
- data/lib/pin_pays.rb +11 -0
- data/pin_pays.gemspec +21 -0
- data/spec/README.txt +12 -0
- data/spec/fixtures/vcr/cards-create.yml +53 -0
- data/spec/fixtures/vcr/charges-create.yml +52 -0
- data/spec/fixtures/vcr/charges-list.yml +79 -0
- data/spec/fixtures/vcr/charges-show.yml +52 -0
- data/spec/fixtures/vcr/customers-charges.yml +52 -0
- data/spec/fixtures/vcr/customers-create.yml +51 -0
- data/spec/fixtures/vcr/customers-list.yml +60 -0
- data/spec/fixtures/vcr/customers-show.yml +51 -0
- data/spec/fixtures/vcr/customers-update.yml +51 -0
- data/spec/fixtures/vcr/refunds-create.yml +50 -0
- data/spec/fixtures/vcr/refunds-list.yml +50 -0
- data/spec/lib/pin_pays/api_spec.rb +22 -0
- data/spec/lib/pin_pays/cards_spec.rb +40 -0
- data/spec/lib/pin_pays/charges_spec.rb +124 -0
- data/spec/lib/pin_pays/config_spec.rb +30 -0
- data/spec/lib/pin_pays/customers_spec.rb +131 -0
- data/spec/lib/pin_pays/refunds_spec.rb +79 -0
- data/spec/spec_helper.rb +22 -0
- metadata +150 -0
@@ -0,0 +1,124 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
def create_charge(customer_token)
|
5
|
+
charge = nil
|
6
|
+
VCR.use_cassette('charges-create') do
|
7
|
+
charge = PinPays::Charges.create({
|
8
|
+
customer_token: customer_token,
|
9
|
+
email: 'test@example.com',
|
10
|
+
description: 'Flux Capacitor (box of 10)',
|
11
|
+
amount: 9995,
|
12
|
+
ip_address: '127.0.0.1',
|
13
|
+
capture: true
|
14
|
+
})
|
15
|
+
end
|
16
|
+
charge
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def create_preauth(customer_token)
|
21
|
+
charge = nil
|
22
|
+
VCR.use_cassette('charges-create-preauth') do
|
23
|
+
charge = PinPays::Charges.create({
|
24
|
+
email: 'test@example.com',
|
25
|
+
description: 'Flux Capacitor (box of 10)',
|
26
|
+
amount: 9995,
|
27
|
+
ip_address: '127.0.0.1',
|
28
|
+
capture: false
|
29
|
+
})
|
30
|
+
end
|
31
|
+
charge
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
describe PinPays::Charges do
|
36
|
+
|
37
|
+
before do
|
38
|
+
PinPays.configure do |config|
|
39
|
+
config.key = SECRET_KEY
|
40
|
+
config.mode = :test
|
41
|
+
end
|
42
|
+
|
43
|
+
card_token = nil
|
44
|
+
VCR.use_cassette('cards-create') do
|
45
|
+
card = PinPays::Cards.create({
|
46
|
+
number: '5520000000000000',
|
47
|
+
expiry_month: '12',
|
48
|
+
expiry_year: '2020',
|
49
|
+
cvc: '123',
|
50
|
+
name: 'Mr Test Case',
|
51
|
+
address_line1: '1 Long St',
|
52
|
+
address_line2: '',
|
53
|
+
address_city: 'Somewhereville',
|
54
|
+
address_postcode: '30000',
|
55
|
+
address_state: 'Somewherestate',
|
56
|
+
address_country: 'Australia'
|
57
|
+
})
|
58
|
+
card_token = card[:token]
|
59
|
+
end
|
60
|
+
|
61
|
+
VCR.use_cassette('customers-create') do
|
62
|
+
customer = PinPays::Customers.create('test@example.com', card_token)
|
63
|
+
@customer_token = customer[:token]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
describe "create" do
|
69
|
+
before do
|
70
|
+
@charge = create_charge(@customer_token)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "must include charge token in result" do
|
74
|
+
@charge[:token].wont_be_nil
|
75
|
+
@charge[:token].must_be_instance_of String
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
# describe "capture" do
|
81
|
+
# end
|
82
|
+
|
83
|
+
|
84
|
+
describe "list" do
|
85
|
+
before do
|
86
|
+
VCR.use_cassette('charges-list') do
|
87
|
+
@list = PinPays::Charges.list()
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it "must return a pagination style result" do
|
92
|
+
@list[:items].wont_be_nil
|
93
|
+
@list[:items].must_be_instance_of Array
|
94
|
+
@list[:pages].wont_be_nil
|
95
|
+
@list[:pages].must_be_instance_of Hash
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
# describe "search" do
|
101
|
+
# end
|
102
|
+
|
103
|
+
|
104
|
+
describe "show" do
|
105
|
+
before do
|
106
|
+
@charge = create_charge(@customer_token)
|
107
|
+
VCR.use_cassette('charges-show') do
|
108
|
+
@show = PinPays::Charges.show(@charge[:token])
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it "must include requested charges's token in result" do
|
113
|
+
@show[:token].wont_be_nil
|
114
|
+
@show[:token].must_be_instance_of String
|
115
|
+
@show[:token].must_equal @charge[:token]
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
# todo - test the more exotic alternative ways to create a charge, and
|
121
|
+
# verify the non-success modes using pin-payment's sentinal card values
|
122
|
+
|
123
|
+
|
124
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe PinPays::Configuration do
|
5
|
+
|
6
|
+
before do
|
7
|
+
PinPays.configure do |config|
|
8
|
+
config.key = 'testkey'
|
9
|
+
config.mode = :test
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "must have a configuration object on the module" do
|
14
|
+
PinPays.configuration.wont_be_nil
|
15
|
+
PinPays.configuration.must_be_instance_of PinPays::Configuration
|
16
|
+
end
|
17
|
+
|
18
|
+
it "must configure key" do
|
19
|
+
PinPays.configuration.key.must_equal 'testkey'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "must configure mode" do
|
23
|
+
PinPays.configuration.mode.must_equal :test
|
24
|
+
end
|
25
|
+
|
26
|
+
it "must configure base_url on api class" do
|
27
|
+
(PinPays::Api.base_uri).must_equal PinPays::Api::TEST_URI
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
def create_customer(card_token)
|
5
|
+
customer = nil
|
6
|
+
VCR.use_cassette('customers-create') do
|
7
|
+
customer = PinPays::Customers.create('test@example.com', card_token)
|
8
|
+
end
|
9
|
+
customer
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
describe PinPays::Customers do
|
14
|
+
|
15
|
+
before do
|
16
|
+
PinPays.configure do |config|
|
17
|
+
config.key = SECRET_KEY
|
18
|
+
config.mode = :test
|
19
|
+
end
|
20
|
+
VCR.use_cassette('cards-create') do
|
21
|
+
card = PinPays::Cards.create({
|
22
|
+
number: '5520000000000000',
|
23
|
+
expiry_month: '12',
|
24
|
+
expiry_year: '2020',
|
25
|
+
cvc: '123',
|
26
|
+
name: 'Mr Test Case',
|
27
|
+
address_line1: '1 Long St',
|
28
|
+
address_line2: '',
|
29
|
+
address_city: 'Somewhereville',
|
30
|
+
address_postcode: '30000',
|
31
|
+
address_state: 'Somewherestate',
|
32
|
+
address_country: 'Australia'
|
33
|
+
})
|
34
|
+
@card_token = card[:token]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
describe "create" do
|
40
|
+
|
41
|
+
before do
|
42
|
+
@customer = create_customer(@card_token)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "must include customer token in result" do
|
46
|
+
@customer[:token].wont_be_nil
|
47
|
+
@customer[:token].must_be_instance_of String
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
describe "list" do
|
54
|
+
|
55
|
+
before do
|
56
|
+
@customer = create_customer(@card_token)
|
57
|
+
VCR.use_cassette('customers-list') do
|
58
|
+
@list = PinPays::Customers.list()
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it "must return a pagination style result" do
|
63
|
+
@list[:items].wont_be_nil
|
64
|
+
@list[:items].must_be_instance_of Array
|
65
|
+
@list[:pages].wont_be_nil
|
66
|
+
@list[:pages].must_be_instance_of Hash
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
describe "show" do
|
73
|
+
|
74
|
+
before do
|
75
|
+
@customer = create_customer(@card_token)
|
76
|
+
VCR.use_cassette('customers-show') do
|
77
|
+
@show = PinPays::Customers.show(@customer[:token])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
it "must include requested customer's token in result" do
|
82
|
+
@show[:token].wont_be_nil
|
83
|
+
@show[:token].must_be_instance_of String
|
84
|
+
@show[:token].must_equal @customer[:token]
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
describe "update" do
|
91
|
+
|
92
|
+
before do
|
93
|
+
@customer = create_customer(@card_token)
|
94
|
+
@updated_email = 'foo@bar.com'
|
95
|
+
VCR.use_cassette('customers-update') do
|
96
|
+
@update = PinPays::Customers.update(@customer[:token], { email: @updated_email })
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
it "must include requested customer's token in result" do
|
101
|
+
@update[:token].wont_be_nil
|
102
|
+
@update[:token].must_be_instance_of String
|
103
|
+
@update[:token].must_equal @customer[:token]
|
104
|
+
end
|
105
|
+
|
106
|
+
it "must include updated email in result" do
|
107
|
+
@update[:email].must_equal @updated_email
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
describe "charges" do
|
114
|
+
|
115
|
+
before do
|
116
|
+
@customer = create_customer(@card_token)
|
117
|
+
VCR.use_cassette('customers-charges') do
|
118
|
+
@charges = PinPays::Customers.charges(@customer[:token])
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
it "must return a pagination style result" do
|
123
|
+
@charges[:items].wont_be_nil
|
124
|
+
@charges[:items].must_be_instance_of Array
|
125
|
+
@charges[:pages].wont_be_nil
|
126
|
+
@charges[:pages].must_be_instance_of Hash
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe PinPays::Refunds do
|
5
|
+
|
6
|
+
before do
|
7
|
+
PinPays.configure do |config|
|
8
|
+
config.key = SECRET_KEY
|
9
|
+
config.mode = :test
|
10
|
+
end
|
11
|
+
|
12
|
+
card_token = nil
|
13
|
+
VCR.use_cassette('cards-create') do
|
14
|
+
card = PinPays::Cards.create({
|
15
|
+
number: '5520000000000000',
|
16
|
+
expiry_month: '12',
|
17
|
+
expiry_year: '2020',
|
18
|
+
cvc: '123',
|
19
|
+
name: 'Mr Test Case',
|
20
|
+
address_line1: '1 Long St',
|
21
|
+
address_line2: '',
|
22
|
+
address_city: 'Somewhereville',
|
23
|
+
address_postcode: '30000',
|
24
|
+
address_state: 'Somewherestate',
|
25
|
+
address_country: 'Australia'
|
26
|
+
})
|
27
|
+
@card_token = card[:token]
|
28
|
+
end
|
29
|
+
|
30
|
+
VCR.use_cassette('customers-create') do
|
31
|
+
customer = PinPays::Customers.create('test@example.com', @card_token)
|
32
|
+
@customer_token = customer[:token]
|
33
|
+
end
|
34
|
+
|
35
|
+
VCR.use_cassette('charges-create') do
|
36
|
+
charge = PinPays::Charges.create({
|
37
|
+
customer_token: @customer_token,
|
38
|
+
email: 'test@example.com',
|
39
|
+
description: 'Flux Capacitor (box of 10)',
|
40
|
+
amount: 9995,
|
41
|
+
ip_address: '127.0.0.1',
|
42
|
+
capture: true
|
43
|
+
})
|
44
|
+
@charge_token = charge[:token]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
describe "create" do
|
50
|
+
before do
|
51
|
+
VCR.use_cassette('refunds-create') do
|
52
|
+
@refund = PinPays::Refunds.create(@charge_token)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it "must include refund token in result" do
|
57
|
+
@refund[:token].wont_be_nil
|
58
|
+
@refund[:token].must_be_instance_of String
|
59
|
+
end
|
60
|
+
|
61
|
+
it "must include original charge token in result" do
|
62
|
+
@refund[:charge].must_equal @charge_token
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
describe "list" do
|
68
|
+
before do
|
69
|
+
VCR.use_cassette('refunds-list') do
|
70
|
+
@list = PinPays::Refunds.list(@charge_token)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it "must return an array result" do
|
75
|
+
@list.must_be_instance_of Array
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.expand_path('../../lib/pin_pays.rb', __FILE__)
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'webmock/minitest'
|
5
|
+
require 'vcr'
|
6
|
+
require 'turn'
|
7
|
+
|
8
|
+
#SECRET_KEY = 'your-pinpayments-secret-key'
|
9
|
+
|
10
|
+
Turn.config do |c|
|
11
|
+
c.format = :outline
|
12
|
+
c.trace = true
|
13
|
+
c.natural = true
|
14
|
+
c.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
VCR.configure do |c|
|
18
|
+
c.cassette_library_dir = 'spec/fixtures/vcr'
|
19
|
+
c.hook_into :webmock
|
20
|
+
c.filter_sensitive_data('<SECRET_KEY>') { SECRET_KEY }
|
21
|
+
end
|
22
|
+
|
metadata
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pin_pays
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael Lilley
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.13'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.13'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: webmock
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.17'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.17'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: vcr
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: turn
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.9'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.9'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.3'
|
83
|
+
description: Provides an implementation of the Pin Payments API (pin.com.au) for Ruby
|
84
|
+
and Rails projects
|
85
|
+
email: mike@mlilley.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".ruby-gemset"
|
92
|
+
- ".ruby-version"
|
93
|
+
- Gemfile
|
94
|
+
- LICENSE
|
95
|
+
- README.md
|
96
|
+
- Rakefile
|
97
|
+
- lib/pin_pays.rb
|
98
|
+
- lib/pin_pays/api.rb
|
99
|
+
- lib/pin_pays/cards.rb
|
100
|
+
- lib/pin_pays/charges.rb
|
101
|
+
- lib/pin_pays/config.rb
|
102
|
+
- lib/pin_pays/customers.rb
|
103
|
+
- lib/pin_pays/error.rb
|
104
|
+
- lib/pin_pays/refunds.rb
|
105
|
+
- lib/pin_pays/version.rb
|
106
|
+
- pin_pays.gemspec
|
107
|
+
- spec/README.txt
|
108
|
+
- spec/fixtures/vcr/cards-create.yml
|
109
|
+
- spec/fixtures/vcr/charges-create.yml
|
110
|
+
- spec/fixtures/vcr/charges-list.yml
|
111
|
+
- spec/fixtures/vcr/charges-show.yml
|
112
|
+
- spec/fixtures/vcr/customers-charges.yml
|
113
|
+
- spec/fixtures/vcr/customers-create.yml
|
114
|
+
- spec/fixtures/vcr/customers-list.yml
|
115
|
+
- spec/fixtures/vcr/customers-show.yml
|
116
|
+
- spec/fixtures/vcr/customers-update.yml
|
117
|
+
- spec/fixtures/vcr/refunds-create.yml
|
118
|
+
- spec/fixtures/vcr/refunds-list.yml
|
119
|
+
- spec/lib/pin_pays/api_spec.rb
|
120
|
+
- spec/lib/pin_pays/cards_spec.rb
|
121
|
+
- spec/lib/pin_pays/charges_spec.rb
|
122
|
+
- spec/lib/pin_pays/config_spec.rb
|
123
|
+
- spec/lib/pin_pays/customers_spec.rb
|
124
|
+
- spec/lib/pin_pays/refunds_spec.rb
|
125
|
+
- spec/spec_helper.rb
|
126
|
+
homepage: https://github.com/mlilley/pin_pays
|
127
|
+
licenses:
|
128
|
+
- MIT
|
129
|
+
metadata: {}
|
130
|
+
post_install_message:
|
131
|
+
rdoc_options: []
|
132
|
+
require_paths:
|
133
|
+
- lib
|
134
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
requirements: []
|
145
|
+
rubyforge_project:
|
146
|
+
rubygems_version: 2.2.2
|
147
|
+
signing_key:
|
148
|
+
specification_version: 4
|
149
|
+
summary: Pin Payments API Implementation for Ruby and Rails
|
150
|
+
test_files: []
|