paypal_client 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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