paypro 1.0.0 → 2.0.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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +54 -0
  3. data/.gitignore +8 -47
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +37 -15
  6. data/Gemfile +12 -2
  7. data/LICENSE +1 -1
  8. data/README.md +65 -23
  9. data/Rakefile +5 -1
  10. data/bin/console +8 -0
  11. data/bin/setup +8 -0
  12. data/lib/data/{ca-bundle.crt → cacert.pem} +617 -298
  13. data/lib/pay_pro/api_client.rb +131 -0
  14. data/lib/pay_pro/client.rb +67 -0
  15. data/lib/pay_pro/config.rb +30 -0
  16. data/lib/pay_pro/endpoint.rb +19 -0
  17. data/lib/pay_pro/endpoints/chargebacks.rb +14 -0
  18. data/lib/pay_pro/endpoints/customers.rb +15 -0
  19. data/lib/pay_pro/endpoints/events.rb +14 -0
  20. data/lib/pay_pro/endpoints/installment_plan_periods.rb +13 -0
  21. data/lib/pay_pro/endpoints/installment_plans.rb +15 -0
  22. data/lib/pay_pro/endpoints/mandates.rb +15 -0
  23. data/lib/pay_pro/endpoints/pay_methods.rb +13 -0
  24. data/lib/pay_pro/endpoints/payments.rb +15 -0
  25. data/lib/pay_pro/endpoints/refunds.rb +14 -0
  26. data/lib/pay_pro/endpoints/subscription_periods.rb +13 -0
  27. data/lib/pay_pro/endpoints/subscriptions.rb +15 -0
  28. data/lib/pay_pro/endpoints/webhooks.rb +15 -0
  29. data/lib/pay_pro/entities/chargeback.rb +5 -0
  30. data/lib/pay_pro/entities/customer.rb +10 -0
  31. data/lib/pay_pro/entities/entity.rb +41 -0
  32. data/lib/pay_pro/entities/event.rb +5 -0
  33. data/lib/pay_pro/entities/installment_plan.rb +29 -0
  34. data/lib/pay_pro/entities/installment_plan_period.rb +5 -0
  35. data/lib/pay_pro/entities/list.rb +65 -0
  36. data/lib/pay_pro/entities/mandate.rb +5 -0
  37. data/lib/pay_pro/entities/pay_method.rb +6 -0
  38. data/lib/pay_pro/entities/payment.rb +23 -0
  39. data/lib/pay_pro/entities/refund.rb +11 -0
  40. data/lib/pay_pro/entities/resource.rb +13 -0
  41. data/lib/pay_pro/entities/subscription.rb +38 -0
  42. data/lib/pay_pro/entities/subscription_period.rb +5 -0
  43. data/lib/pay_pro/entities/webhook.rb +30 -0
  44. data/lib/pay_pro/errors.rb +36 -0
  45. data/lib/pay_pro/operations/creatable.rb +11 -0
  46. data/lib/pay_pro/operations/deletable.rb +11 -0
  47. data/lib/pay_pro/operations/getable.rb +11 -0
  48. data/lib/pay_pro/operations/listable.rb +11 -0
  49. data/lib/pay_pro/operations/requestable.rb +12 -0
  50. data/lib/pay_pro/operations/updatable.rb +11 -0
  51. data/lib/pay_pro/response.rb +21 -0
  52. data/lib/pay_pro/signature.rb +59 -0
  53. data/lib/pay_pro/util.rb +48 -0
  54. data/lib/{paypro → pay_pro}/version.rb +1 -1
  55. data/lib/pay_pro.rb +77 -0
  56. data/paypro.gemspec +18 -11
  57. metadata +67 -48
  58. data/.circleci/config.yml +0 -74
  59. data/VERSION +0 -1
  60. data/examples/create_payment.rb +0 -7
  61. data/lib/paypro/client.rb +0 -68
  62. data/lib/paypro/errors.rb +0 -7
  63. data/lib/paypro.rb +0 -16
  64. data/spec/paypro/client_spec.rb +0 -114
  65. data/spec/paypro_spec.rb +0 -13
  66. data/spec/spec_helper.rb +0 -7
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'paypro'
4
-
5
- client = PayPro::Client.new('b507a4d8ea7911f0d955383852990df3')
6
- client.command = 'get_all_pay_methods'
7
- client.execute
data/lib/paypro/client.rb DELETED
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PayPro
4
- # Client class to connect to the PayPro V1 API.
5
- # Requires an API key to authenticate API calls, you
6
- # can also supply your own Faraday connection instead of the default one.
7
- # This can be useful if you want to add more middleware or want finer
8
- # control of the connection being used.
9
- class Client
10
- attr_accessor :command, :params
11
-
12
- def initialize(api_key, conn = default_conn)
13
- @api_key = api_key
14
- @params = {}
15
- @conn = conn
16
- end
17
-
18
- # Executes the API call and handles the response. Will raise errors if
19
- # there were problems while connecting or handeling the response.
20
- def execute
21
- response = @conn.post do |req|
22
- req.body = body
23
- end
24
- handle_response(response)
25
- rescue Faraday::ClientError => e
26
- raise ConnectionError, "Could not connect to the PayPro API: #{e.inspect}"
27
- end
28
-
29
- # Returns the body that is used in the POST request.
30
- def body
31
- {
32
- apikey: @api_key,
33
- command: @command,
34
- params: JSON.generate(@params)
35
- }
36
- end
37
-
38
- private
39
-
40
- def ca_bundle_file
41
- PayPro::CA_BUNDLE_FILE
42
- end
43
-
44
- def cert_store
45
- cert_store = OpenSSL::X509::Store.new
46
- cert_store.add_file ca_bundle_file
47
- cert_store
48
- end
49
-
50
- def default_conn
51
- Faraday.new(
52
- PayPro::API_URL,
53
- ssl: {
54
- cert_store: cert_store,
55
- verify: true
56
- }
57
- )
58
- end
59
-
60
- def handle_response(response)
61
- parsed_response = JSON.parse(response.body)
62
- @params = {}
63
- parsed_response
64
- rescue JSON::ParserError
65
- raise InvalidResponseError, "The API request returned an error or is invalid: #{response.body}"
66
- end
67
- end
68
- end
data/lib/paypro/errors.rb DELETED
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PayPro
4
- class ConnectionError < StandardError; end
5
-
6
- class InvalidResponseError < StandardError; end
7
- end
data/lib/paypro.rb DELETED
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'openssl'
4
- require 'json'
5
-
6
- require 'faraday'
7
-
8
- require 'paypro/client'
9
- require 'paypro/errors'
10
- require 'paypro/version'
11
-
12
- module PayPro
13
- CA_BUNDLE_FILE = "#{File.dirname(__FILE__)}/data/ca-bundle.crt"
14
- API_URL = 'https://www.paypro.nl/post_api'
15
- API_VERSION = 'v1'
16
- end
@@ -1,114 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe PayPro::Client do
6
- let(:api_key) { 'a16e84b3ef5a80ef9af289d37788e87e' }
7
- let(:client) { described_class.new(api_key) }
8
-
9
- describe '#initialize' do
10
- let(:client) { described_class.new(api_key) }
11
-
12
- it 'sets params to an empty hash' do
13
- expect(client.params).to eql({})
14
- end
15
- end
16
-
17
- describe '#body' do
18
- let(:command) { 'create_payment' }
19
-
20
- subject { client.body }
21
-
22
- before { client.command = command }
23
-
24
- it { is_expected.to include(apikey: api_key) }
25
- it { is_expected.to include(command: command) }
26
-
27
- context 'when params is empty' do
28
- it { is_expected.to include(params: '{}') }
29
- end
30
-
31
- context 'when params is not empty' do
32
- before { client.params = { amount: 500 } }
33
- it { is_expected.to include(params: '{"amount":500}') }
34
- end
35
- end
36
-
37
- describe '#execute' do
38
- let(:client) { described_class.new(api_key, conn) }
39
- let(:conn) do
40
- Faraday.new do |builder|
41
- builder.adapter :test, stubs
42
- end
43
- end
44
-
45
- subject { client.execute }
46
-
47
- context 'when connection fails' do
48
- let(:conn) { double }
49
-
50
- before { allow(conn).to receive(:post).and_raise(Faraday::ClientError, 'Message') }
51
-
52
- it 'raises a PayPro::Connection error' do
53
- expect { subject }.to raise_error(PayPro::ConnectionError, kind_of(String))
54
- end
55
- end
56
-
57
- context 'when body is invalid json' do
58
- let(:stubs) do
59
- Faraday::Adapter::Test::Stubs.new do |stub|
60
- stub.post('/') { |_| [200, {}, 'invalid json }'] }
61
- end
62
- end
63
-
64
- it 'raises a PayPro::InvalidResponse error' do
65
- expect { subject }.to raise_error(
66
- PayPro::InvalidResponseError,
67
- 'The API request returned an error or is invalid: invalid json }'
68
- )
69
- end
70
- end
71
-
72
- context 'when api returns an error' do
73
- let(:stubs) do
74
- Faraday::Adapter::Test::Stubs.new do |stub|
75
- stub.post('/') { |_| [200, {}, 'Invalid amount'] }
76
- end
77
- end
78
-
79
- it 'raises a PayPro::InvalidResponse error' do
80
- expect { subject }.to raise_error(
81
- PayPro::InvalidResponseError,
82
- 'The API request returned an error or is invalid: Invalid amount'
83
- )
84
- end
85
- end
86
-
87
- context 'when api call is valid' do
88
- let(:stubs) do
89
- Faraday::Adapter::Test::Stubs.new do |stub|
90
- stub.post('/') do |_|
91
- [
92
- 200,
93
- {},
94
- '{"payment_url":"https://paypro.nl/betalen/payment_hash","payment_hash":"payment_hash"}'
95
- ]
96
- end
97
- end
98
- end
99
-
100
- before { client.params = { amount: 500 } }
101
-
102
- it 'returns a hash with the response' do
103
- expect(subject).to include(
104
- 'payment_url' => 'https://paypro.nl/betalen/payment_hash',
105
- 'payment_hash' => 'payment_hash'
106
- )
107
- end
108
-
109
- it 'clears the old params' do
110
- expect { subject }.to change { client.params }.from(amount: 500).to({})
111
- end
112
- end
113
- end
114
- end
data/spec/paypro_spec.rb DELETED
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe PayPro do
6
- it 'returns the correct api url' do
7
- expect(described_class::API_URL).to eql 'https://www.paypro.nl/post_api'
8
- end
9
-
10
- it 'returns the correct path for ca-bundle.crt' do
11
- expect(File).to exist(described_class::CA_BUNDLE_FILE)
12
- end
13
- end
data/spec/spec_helper.rb DELETED
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rspec'
4
- require 'paypro'
5
-
6
- RSpec.configure do |config|
7
- end