paypal_client 0.2.0 → 0.2.1

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: 2279ec026d46415c6c4ba27b11f14fba739eafa9
4
- data.tar.gz: 556beeb56f57d81e19750c2e87478462e3d9a587
3
+ metadata.gz: a48ce325f1120721c1fa86079d4d31e7c4f1ed23
4
+ data.tar.gz: 48409e8f8c1f8e42f5997aa548d8d89124e0b29b
5
5
  SHA512:
6
- metadata.gz: 1150eab9847c8eec968d55a99b94f048c59895d7c0d4947cbd914b889e8d6906449f6c074c81700813e191727727b4890964f1d2271b4c6ebff165ae4bc5508b
7
- data.tar.gz: 397a04b94a5b17bf30428daeb1ebe1f34c37f01c1ae5b8d045db6fd929e915dd41a0d96220d53bcc5e1483f0f5a45a84b8cf6ba768038b5962280da48070ed35
6
+ metadata.gz: bf5f59ba813b4bb5e0e3808459f9f21700e36c9ea16fa25aef0a18769306be008a922f5415d5f91f2efbda88334788ce074804b1e49c98a82d5c46c76a681cec
7
+ data.tar.gz: bd16a3f58df0d48260184711a81cc25161cdf9bab415eb9ae2cd3426e824ec74da9727878e4e7df46e03099b114875b5890ace94b937808372db6134caf708a8
data/Gemfile CHANGED
@@ -9,4 +9,5 @@ group :development, :test do
9
9
  gem 'pry'
10
10
  gem 'rubocop'
11
11
  gem 'simplecov'
12
+ gem 'yard'
12
13
  end
data/lib/paypal_client.rb CHANGED
@@ -4,6 +4,12 @@ require 'paypal_client/version'
4
4
  require 'paypal_client/errors'
5
5
  require 'active_support/cache'
6
6
 
7
+ #
8
+ # Module PaypalClient provides an easy to use API client for the Paypal
9
+ # REST API https://developer.paypal.com/docs/api/overview/
10
+ #
11
+ # @author Dennis van der Vliet <dennis.vandervliet@gmail.com>
12
+ #
7
13
  module PaypalClient
8
14
  require 'faraday'
9
15
  require 'faraday_middleware'
@@ -18,6 +24,9 @@ module PaypalClient
18
24
  # so we have them expiry 3600 seconds before they actually expire
19
25
  TOKEN_EXPIRY_MARGIN = 60 * 60
20
26
 
27
+ # Build a new instance of PaypalClient based on defaults and environment
28
+ # variables
29
+ # @return [PaypalClient::Client] an instance of PaypalClient::Client
21
30
  def self.build
22
31
  @client ||= Client.new(
23
32
  client_id: ENV.fetch('PAYPAL_CLIENT_ID'),
@@ -28,6 +37,15 @@ module PaypalClient
28
37
  )
29
38
  end
30
39
 
40
+ # Creates a new instance of PaypalClient::Client
41
+ #
42
+ # @param [String] client_id: Paypal Client ID
43
+ # @param [String] client_secret: Paypal Client Secret
44
+ # @param [ActiveSupport::Cache::Store] cache: ActiveSupport::Cache::Store compaitable store to store auth token
45
+ # @param [Boolean] sandbox: true <description>
46
+ # @param [String] version: <description>
47
+ # @param [Logger] logger: nil <description>
48
+
31
49
  def initialize(client_id:, client_secret:, cache:, sandbox: true, version:, logger: nil)
32
50
  @client_id = client_id
33
51
  @client_secret = client_secret
@@ -37,25 +55,72 @@ module PaypalClient
37
55
  @logger = logger
38
56
  end
39
57
 
40
- def connection
41
- @conn ||= Faraday.new(url: base_url) do |faraday|
42
- faraday.use PaypalClient::Errors::Middleware
58
+ # Send a GET request to the Paypal API
59
+ #
60
+ # @param [String] path Path to call on Paypal API (eg. /payments/payment)
61
+ # @param [Hash] data Hash to send as query parameters
62
+ # @param [Hash] headers Hash of custom request headers
63
+ #
64
+ # @return [Faraday::Response>] Faraday response. Call the `.body` method on it to access the response data.
43
65
 
44
- faraday.headers = default_headers
45
- faraday.response @logger if @logger
46
- faraday.request :json
47
- faraday.response :json, content_type: /\bjson$/, parser_options: { symbolize_names: true }
66
+ def get(path, data = {}, headers = {})
67
+ connection.get(merged_path(path), data, merged_headers(headers))
68
+ end
48
69
 
49
- faraday.adapter *adapter
50
- end
70
+ # Send a POST request to the Paypal API
71
+ #
72
+ # @param [String] path Path to call on Paypal API (eg. /payments/payment)
73
+ # @param [Hash] data Hash to send as POST data. Will be turned into JSON.
74
+ # @param [Hash] headers Hash of custom request headers
75
+ #
76
+ # @return [Faraday::Response>] Faraday response. Call the `.body` method on it to access the response data.
77
+
78
+ def post(path, data = {}, headers = {})
79
+ connection.post(merged_path(path), data, merged_headers(headers))
51
80
  end
52
81
 
53
- %i[get patch post put delete].each do |http_method|
54
- define_method http_method do |path, data = {}, headers = {}|
55
- connection.public_send(http_method, merged_path(path), data, merged_headers(headers))
56
- end
82
+ # Send a PUT request to the Paypal API
83
+ #
84
+ # @param [String] path Path to call on Paypal API (eg. /payments/payment)
85
+ # @param [Hash] data Hash to send as POST data. Will be turned into JSON.
86
+ # @param [Hash] headers Hash of custom request headers
87
+ #
88
+ # @return [Faraday::Response>] Faraday response. Call the `.body` method on it to access the response data.
89
+
90
+ def put(path, data = {}, headers = {})
91
+ connection.put(merged_path(path), data, merged_headers(headers))
92
+ end
93
+
94
+ # Send a PATCH request to the Paypal API
95
+ #
96
+ # @param [String] path Path to call on Paypal API (eg. /payments/payment)
97
+ # @param [Hash] data Hash to send as POST data. Will be turned into JSON.
98
+ # @param [Hash] headers Hash of custom request headers
99
+ #
100
+ # @return [Faraday::Response>] Faraday response. Call the `.body` method on it to access the response data.
101
+
102
+ def patch(path, data = {}, headers = {})
103
+ connection.patch(merged_path(path), data, merged_headers(headers))
57
104
  end
58
105
 
106
+ # Send a DELETE request to the Paypal API
107
+ #
108
+ # @param [String] path Path to call on Paypal API (eg. /payments/payment)
109
+ # @param [Hash] data Hash to send as POST data. Will be turned into JSON.
110
+ # @param [Hash] headers Hash of custom request headers
111
+ #
112
+ # @return [Faraday::Response>] Faraday response. Call the `.body` method on it to access the response data.
113
+
114
+ def delete(path, data = {}, headers = {})
115
+ connection.delete(merged_path(path), data, merged_headers(headers))
116
+ end
117
+
118
+ # Request auth token from Paypal using the client_id and client_secret
119
+ #
120
+ # @param [<Boolean>] force: false Forces a refresh of the token even if cached
121
+ #
122
+ # @return [<String>] Valid auth token from Paypal
123
+ #
59
124
  def auth_token(force: false)
60
125
  return @cache.read(TOKEN_CACHE_KEY) if @cache.exist?(TOKEN_CACHE_KEY) && force == false
61
126
 
@@ -65,6 +130,21 @@ module PaypalClient
65
130
  end
66
131
  end
67
132
 
133
+ def connection
134
+ @conn ||= Faraday.new(url: base_url) do |faraday|
135
+ faraday.use PaypalClient::Errors::Middleware
136
+
137
+ faraday.headers = default_headers
138
+ faraday.response @logger if @logger
139
+ faraday.request :json
140
+ faraday.response :json,
141
+ content_type: /\bjson$/,
142
+ parser_options: { symbolize_names: true }
143
+
144
+ faraday.adapter *adapter
145
+ end
146
+ end
147
+
68
148
  private
69
149
 
70
150
  def base_url
@@ -96,7 +176,8 @@ module PaypalClient
96
176
 
97
177
  response = connection.post(endpoint,
98
178
  'grant_type=client_credentials',
99
- authorization: "Basic #{basic_auth}", "Content-Type": 'application/x-www-form-urlencoded')
179
+ authorization: "Basic #{basic_auth}",
180
+ "Content-Type": 'application/x-www-form-urlencoded')
100
181
  response.body
101
182
  end
102
183
 
@@ -13,8 +13,8 @@ module PaypalClient
13
13
  @body = response.body
14
14
 
15
15
  if @body.class == Hash
16
- @error = @body[:name] if @body.has_key?(:name)
17
- @error_message = @body[:message] if @body.has_key?(:message)
16
+ @error = @body[:name] if @body.key?(:name)
17
+ @error_message = @body[:message] if @body.key?(:message)
18
18
  else
19
19
  @error = response.reason_phrase if @error.nil?
20
20
  end
@@ -22,7 +22,7 @@ module PaypalClient
22
22
  end
23
23
 
24
24
  def inspect
25
- extra = ""
25
+ extra = ''
26
26
  extra << " status_code: #{status_code.inspect}" unless status_code.nil?
27
27
  extra << " body: #{body.inspect}" unless body.nil?
28
28
  "#<#{self.class.name}: #{message}#{extra}>"
@@ -38,7 +38,7 @@ module PaypalClient
38
38
  class UnsupportedMediaType < Error; end
39
39
  class UnprocessableEntity < Error; end
40
40
  class RateLimitReached < Error; end
41
-
41
+
42
42
  class InternalServerError < Error; end
43
43
  class ServiceUnavailable < Error; end
44
44
 
@@ -1,3 +1,3 @@
1
1
  module PaypalClient
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.2.1'.freeze
3
3
  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.2.0
4
+ version: 0.2.1
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-24 00:00:00.000000000 Z
11
+ date: 2018-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport