paypal_client 0.1.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01521c538a5f17d341615b44eeb0b6375d378eee
4
- data.tar.gz: 4cc16db9b1daa24a4275d87f60755ae7174bf547
3
+ metadata.gz: 2279ec026d46415c6c4ba27b11f14fba739eafa9
4
+ data.tar.gz: 556beeb56f57d81e19750c2e87478462e3d9a587
5
5
  SHA512:
6
- metadata.gz: 6f90fcbd2b1bb7824e08daaee89c6efff9f01849d4a7d08d1699439a76f0f858da9d286b4c20fcc52adaa8503f3bd594c3123ddf218f96bf83c85f3a33628496
7
- data.tar.gz: fda01a2b8fd05cf1a1985e406418e631f7b2329e9d86126aef06a4f5f7af1651acc204c7114a59aaf53ed9e9d66026dd5d16aa43e47749a39684f0048406d82c
6
+ metadata.gz: 1150eab9847c8eec968d55a99b94f048c59895d7c0d4947cbd914b889e8d6906449f6c074c81700813e191727727b4890964f1d2271b4c6ebff165ae4bc5508b
7
+ data.tar.gz: 397a04b94a5b17bf30428daeb1ebe1f34c37f01c1ae5b8d045db6fd929e915dd41a0d96220d53bcc5e1483f0f5a45a84b8cf6ba768038b5962280da48070ed35
data/.travis.yml CHANGED
@@ -1,11 +1,21 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.8
5
- - 2.4.5
6
- - 2.5.3
4
+ - 2.3.8
5
+ - 2.4.5
6
+ - 2.5.3
7
+ - 2.6.0
8
+
7
9
  before_install: gem install bundler -v 1.16.1
8
10
  matrix:
9
11
  fast_finish: true
10
12
  script:
11
- - bundle exec rspec
13
+ - bundle exec rspec --exclude-pattern "spec/integration/*"
14
+ jobs:
15
+ include:
16
+ - stage: integration
17
+ name: Run integration against paypal
18
+ rvm: 2.5.3
19
+ allow_failure: true
20
+ script:
21
+ - bundle exec rspec spec/integration/
data/Gemfile CHANGED
@@ -4,3 +4,9 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in paypal_client.gemspec
6
6
  gemspec
7
+
8
+ group :development, :test do
9
+ gem 'pry'
10
+ gem 'rubocop'
11
+ gem 'simplecov'
12
+ end
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # PaypalClient
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/paypal_client`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ Ruby client for the [PayPal REST API](https://developer.paypal.com/docs/api/overview/). PayPal offers their own [SDK](https://github.com/paypal/PayPal-Ruby-SDK) but that felt a big heavy and was not seeing active development at the end of 2018.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ PaypalClient is using Faraday to make the http calls to the Paypal API and uses ActiveSupport::Cache::MemoryStore to store the auth token required to make authenticated requests to Paypal [more info](https://developer.paypal.com/docs/api/overview/#authentication-and-authorization).
6
6
 
7
7
  ## Installation
8
8
 
@@ -22,7 +22,43 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ To [list payments](https://developer.paypal.com/docs/api/payments/v1/#payment_list)
26
+
27
+ ```ruby
28
+ paypal_client = PaypalClient::Client.build
29
+ response = paypal_client.get('/payments/payments').body
30
+ response[:payments].each do |payment|
31
+ puts "Paypal payment with ID: #{payment[:id]}"
32
+ end
33
+ ```
34
+
35
+ `PaypalClient::Client.build` requires the following environment variables to be set:
36
+
37
+ ```shell
38
+ PAYPAL_CLIENT_ID=<paypal_client_id>
39
+ PAYPAL_CLIENT_SECRET=<paypal_client_secret>
40
+ PAYPAL_SANDBOX=true
41
+ ```
42
+
43
+ You can also configure the client using `PaypalClient::Client.new` as in the following example.
44
+
45
+ ```ruby
46
+ paypal_client = PaypalClient::Client.new(
47
+ client_id: <paypal_client_id>,
48
+ client_secret: <paypal_client_secret>,
49
+ sandbox: true,
50
+ cache: Rails.cache,
51
+ version: 'v1'
52
+ )
53
+ ```
54
+
55
+ ## Documentation
56
+
57
+ TODO
58
+
59
+ ## Testing
60
+
61
+ There is a good amount of unit testing in `spec/paypal_client_spec.rb`. To run those test **no** active Paypal Developer account is required. To run the tests in `spec/integration/integration_spec.rb` valid Paypal sandbox credentials are required.
26
62
 
27
63
  ## Development
28
64
 
@@ -32,8 +68,8 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
68
 
33
69
  ## Contributing
34
70
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/paypal_client. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
71
+ Bug reports and pull requests are welcome on GitHub at https://github.com/dennisvdvliet/paypal_client. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
72
 
37
73
  ## Code of Conduct
38
74
 
39
- Everyone interacting in the PaypalClient project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/paypal_client/blob/master/CODE_OF_CONDUCT.md).
75
+ Everyone interacting in the PaypalClient project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/dennisvdvliet/paypal_client/blob/master/CODE_OF_CONDUCT.md).
data/lib/paypal_client.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'paypal_client/version'
4
+ require 'paypal_client/errors'
4
5
  require 'active_support/cache'
5
6
 
6
7
  module PaypalClient
@@ -38,12 +39,13 @@ module PaypalClient
38
39
 
39
40
  def connection
40
41
  @conn ||= Faraday.new(url: base_url) do |faraday|
42
+ faraday.use PaypalClient::Errors::Middleware
43
+
41
44
  faraday.headers = default_headers
42
45
  faraday.response @logger if @logger
43
46
  faraday.request :json
44
- faraday.response :json, parser_options: { symbolize_names: true }
47
+ faraday.response :json, content_type: /\bjson$/, parser_options: { symbolize_names: true }
45
48
 
46
- faraday.use ErrorMiddleware
47
49
  faraday.adapter *adapter
48
50
  end
49
51
  end
@@ -102,19 +104,4 @@ module PaypalClient
102
104
  Faraday.default_adapter
103
105
  end
104
106
  end
105
-
106
- class ResponseError < StandardError; end
107
- class NotFound < ResponseError; end
108
-
109
- class ErrorMiddleware < Faraday::Response::Middleware
110
- ERROR_MAP = {
111
- 404 => NotFound
112
- }.freeze
113
-
114
- def on_complete(response)
115
- key = response[:status].to_i
116
- raise ERROR_MAP[key], response if ERROR_MAP.key? key
117
- raise ResponseError, response if response.status >= 400
118
- end
119
- end
120
107
  end
@@ -0,0 +1,67 @@
1
+ require 'faraday_middleware'
2
+
3
+ module PaypalClient
4
+ module Errors
5
+ class Error < StandardError
6
+ attr_reader :status_code
7
+ attr_reader :body
8
+ attr_reader :error
9
+ attr_reader :error_message
10
+
11
+ def initialize(response)
12
+ @status_code = response.status
13
+ @body = response.body
14
+
15
+ if @body.class == Hash
16
+ @error = @body[:name] if @body.has_key?(:name)
17
+ @error_message = @body[:message] if @body.has_key?(:message)
18
+ else
19
+ @error = response.reason_phrase if @error.nil?
20
+ end
21
+ super(@error)
22
+ end
23
+
24
+ def inspect
25
+ extra = ""
26
+ extra << " status_code: #{status_code.inspect}" unless status_code.nil?
27
+ extra << " body: #{body.inspect}" unless body.nil?
28
+ "#<#{self.class.name}: #{message}#{extra}>"
29
+ end
30
+ end
31
+
32
+ class InvalidRequest < Error; end
33
+ class AuthenticationFailure < Error; end
34
+ class NotAuthorized < Error; end
35
+ class ResourceNotFound < Error; end
36
+ class MethodNotSupported < Error; end
37
+ class MediaTypeNotAcceptable < Error; end
38
+ class UnsupportedMediaType < Error; end
39
+ class UnprocessableEntity < Error; end
40
+ class RateLimitReached < Error; end
41
+
42
+ class InternalServerError < Error; end
43
+ class ServiceUnavailable < Error; end
44
+
45
+ class Middleware < ::Faraday::Response::Middleware
46
+ ERROR_MAP = {
47
+ 400 => InvalidRequest,
48
+ 401 => AuthenticationFailure,
49
+ 403 => NotAuthorized,
50
+ 404 => ResourceNotFound,
51
+ 405 => MethodNotSupported,
52
+ 406 => MediaTypeNotAcceptable,
53
+ 415 => UnsupportedMediaType,
54
+ 422 => UnprocessableEntity,
55
+ 429 => RateLimitReached,
56
+ 500 => InternalServerError,
57
+ 503 => ServiceUnavailable
58
+ }.freeze
59
+
60
+ def on_complete(response)
61
+ key = response[:status].to_i
62
+ raise ERROR_MAP[key], response if ERROR_MAP.key? key
63
+ raise Error, response if response.status >= 400
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,3 +1,3 @@
1
1
  module PaypalClient
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -35,5 +35,6 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency 'bundler', '~> 1.16'
36
36
  spec.add_development_dependency 'rake', '~> 10.0'
37
37
  spec.add_development_dependency 'rspec', '~> 3.0'
38
- spec.add_development_dependency 'rubocop'
38
+
39
+ spec.required_ruby_version = '>= 2.3'
39
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paypal_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis van der Vliet
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-19 00:00:00.000000000 Z
11
+ date: 2018-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -94,20 +94,6 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '3.0'
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
97
  description: Faraday based API client for the PayPal REST API. Includes support for
112
98
  saving the authentication token and limited release endpoints.
113
99
  email:
@@ -121,12 +107,12 @@ files:
121
107
  - ".travis.yml"
122
108
  - CODE_OF_CONDUCT.md
123
109
  - Gemfile
124
- - Gemfile.lock
125
110
  - README.md
126
111
  - Rakefile
127
112
  - bin/console
128
113
  - bin/setup
129
114
  - lib/paypal_client.rb
115
+ - lib/paypal_client/errors.rb
130
116
  - lib/paypal_client/version.rb
131
117
  - paypal_client.gemspec
132
118
  homepage: https://github.com/dennisvdvliet/paypal_client
@@ -141,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
127
  requirements:
142
128
  - - ">="
143
129
  - !ruby/object:Gem::Version
144
- version: '0'
130
+ version: '2.3'
145
131
  required_rubygems_version: !ruby/object:Gem::Requirement
146
132
  requirements:
147
133
  - - ">="
data/Gemfile.lock DELETED
@@ -1,73 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- paypal_client (0.1.0)
5
- activesupport (~> 5)
6
- faraday (~> 0.15)
7
- faraday_middleware (~> 0.12)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- activesupport (5.2.2)
13
- concurrent-ruby (~> 1.0, >= 1.0.2)
14
- i18n (>= 0.7, < 2)
15
- minitest (~> 5.1)
16
- tzinfo (~> 1.1)
17
- ast (2.4.0)
18
- concurrent-ruby (1.1.4)
19
- diff-lcs (1.3)
20
- faraday (0.15.4)
21
- multipart-post (>= 1.2, < 3)
22
- faraday_middleware (0.12.2)
23
- faraday (>= 0.7.4, < 1.0)
24
- i18n (1.2.0)
25
- concurrent-ruby (~> 1.0)
26
- jaro_winkler (1.5.1)
27
- minitest (5.11.3)
28
- multipart-post (2.0.0)
29
- parallel (1.12.1)
30
- parser (2.5.3.0)
31
- ast (~> 2.4.0)
32
- powerpack (0.1.2)
33
- rainbow (3.0.0)
34
- rake (10.5.0)
35
- rspec (3.8.0)
36
- rspec-core (~> 3.8.0)
37
- rspec-expectations (~> 3.8.0)
38
- rspec-mocks (~> 3.8.0)
39
- rspec-core (3.8.0)
40
- rspec-support (~> 3.8.0)
41
- rspec-expectations (3.8.2)
42
- diff-lcs (>= 1.2.0, < 2.0)
43
- rspec-support (~> 3.8.0)
44
- rspec-mocks (3.8.0)
45
- diff-lcs (>= 1.2.0, < 2.0)
46
- rspec-support (~> 3.8.0)
47
- rspec-support (3.8.0)
48
- rubocop (0.61.1)
49
- jaro_winkler (~> 1.5.1)
50
- parallel (~> 1.10)
51
- parser (>= 2.5, != 2.5.1.1)
52
- powerpack (~> 0.1)
53
- rainbow (>= 2.2.2, < 4.0)
54
- ruby-progressbar (~> 1.7)
55
- unicode-display_width (~> 1.4.0)
56
- ruby-progressbar (1.10.0)
57
- thread_safe (0.3.6)
58
- tzinfo (1.2.5)
59
- thread_safe (~> 0.1)
60
- unicode-display_width (1.4.0)
61
-
62
- PLATFORMS
63
- ruby
64
-
65
- DEPENDENCIES
66
- bundler (~> 1.16)
67
- paypal_client!
68
- rake (~> 10.0)
69
- rspec (~> 3.0)
70
- rubocop
71
-
72
- BUNDLED WITH
73
- 1.16.1