simpal 1.0.2 → 1.1.0

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
  SHA256:
3
- metadata.gz: da8d90b4b7d128563272f45a94b547cbd74e8529c40895a024b492e1137aa03e
4
- data.tar.gz: 0ad90fffe64cd5cad8e9a06a344e31dfd7b8436e438712e6ec8ca3e120b028cc
3
+ metadata.gz: 7e18733eb9d27f1c0cb3f77f57ad6dba9c4d78902e975da88ba47f069d6408d5
4
+ data.tar.gz: e3c07a80dfaf0bebb18332d21b9b529e7247d6f5a2cb8e0bb62e57fba32fc541
5
5
  SHA512:
6
- metadata.gz: 679cabc6fd8e5562ad682b715345ef3a468c0a30c6c2513b984a813bf9d5edd8420d58154e173b05b0ea10589891b9f534470690a2c74fe5f5e4022ddf5eed56
7
- data.tar.gz: 48f700c2391ca1a281bf5fc7323786b5e75fd76686b95e1df67c59b3e21c191d980b9564de441bcf7c5e5bbe7489065e3dbc33530a4628576fea42c696903107
6
+ metadata.gz: d392b318c21364e89d3e815190814548cbe086c777f926a784091b9c90f27235d998af1cc0023cc7231b2c7469be31a9765adf66eaf4dab92b49d9d765f95c64
7
+ data.tar.gz: 3d38be42881dfdd5345ef5a64a4a355c035b904ef2a96bc5409ce7072300397637ab19cf50d1e1b9964942ffb15ccdfa5ebd9ee29931a6897bc9caf896f463e6
data/.rubocop.yml CHANGED
@@ -34,3 +34,7 @@ Metrics/PerceivedComplexity:
34
34
 
35
35
  Naming/VariableNumber:
36
36
  EnforcedStyle: snake_case
37
+
38
+ RSpec/FilePath:
39
+ Exclude:
40
+ - spec/lib/simpal/paypal_object_spec.rb
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Simpal
4
- VERSION = '1.0.2'
4
+ # @return [String] The gem's semantic version number.
5
+ #
6
+ VERSION = '1.1.0'
5
7
  end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Simpal
4
+ # Represents an API resource.
5
+ #
6
+ class PayPalObject
7
+ # @return [Regexp] A simple regular expression that matches the syntax of an ISO8601 date and time.
8
+ #
9
+ TIME_REGEXP = /\A[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(Z|\+[0-9]{2}:[0-9]{2}(\.[0-9]+)?)\z/.freeze
10
+
11
+ # Create an object representing a resource from the PayPal API.
12
+ #
13
+ # @param resource [Hash] The resource retrieved from the PayPal API.
14
+ #
15
+ def initialize(resource = {})
16
+ transform = proc do |value|
17
+ case value
18
+ when Array then value.map { |v| transform.call(v) }
19
+ when Hash then PayPalObject.new(value)
20
+ when TIME_REGEXP then Time.parse(value)
21
+ else value
22
+ end
23
+ end
24
+
25
+ @resource = resource.each_with_object({}) do |(key, value), hash|
26
+ hash[key.to_s] = transform.call(value)
27
+ end
28
+
29
+ @resource.each_key do |key|
30
+ define_singleton_method(key.to_sym) do |*args, &block|
31
+ return @resource[key] if args.empty?
32
+ return super(*args, &block) if defined?(super)
33
+
34
+ raise NoMethodError, "method '#{key}' doesn't support arguments in #{self}"
35
+ end
36
+ end
37
+ end
38
+
39
+ # @return [Hash] A hash representation of the PayPal object.
40
+ #
41
+ def to_hash
42
+ transform = proc do |value|
43
+ case value
44
+ when Array then value.map { |v| transform.call(v) }
45
+ when PayPalObject then value.to_hash
46
+ when Time then value.iso8601
47
+ else value
48
+ end
49
+ end
50
+
51
+ @resource.transform_values(&transform)
52
+ end
53
+
54
+ # @return [String] A JSON representation of the PayPal object.
55
+ #
56
+ def inspect
57
+ resource_id = respond_to?(:id) && id ? " id=#{id}" : ''
58
+ json = JSON.pretty_generate(@resource)
59
+ "#<#{self.class}:0x#{object_id.to_s(16)}#{resource_id}> JSON: #{json}"
60
+ end
61
+
62
+ # Determines whether the object can respond to the specified method name.
63
+ #
64
+ # @param name [Symbol] The name of the method to determine responsiveness of.
65
+ # @param include_all [Boolean] `true` to search private and protected methods, `false` to search public only.
66
+ # @return [Boolean] `true` if the method can be responded to, `false` otherwise.
67
+ #
68
+ def respond_to_missing?(name, _include_all)
69
+ @resource.key?(name.to_s)
70
+ end
71
+
72
+ # Returns `nil` when the method is missing instead of raising a `NoMethodError` exception.
73
+ #
74
+ # @param name [Symbol] The name of the invoked method.
75
+ # @param args [Splat] The arguments passed into the invoked method.
76
+ # @return [NilClass]
77
+ #
78
+ def method_missing(_name, *_args)
79
+ nil
80
+ end
81
+
82
+ # @see Simpal::PayPalObject#to_hash
83
+ #
84
+ alias to_h to_hash
85
+ end
86
+ end
data/lib/simpal.rb CHANGED
@@ -10,7 +10,7 @@ require_relative 'simpal/middleware/authorization'
10
10
  require_relative 'simpal/middleware/headers'
11
11
  require_relative 'simpal/client_error'
12
12
  require_relative 'simpal/client'
13
- require_relative 'simpal/pay_pal_object'
13
+ require_relative 'simpal/paypal_object'
14
14
  require_relative 'simpal/api/orders'
15
15
  require_relative 'simpal/api/payments/authorizations'
16
16
  require_relative 'simpal/api/payments/captures'
data/simpal.gemspec CHANGED
@@ -9,12 +9,12 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ['support@nialtoservices.co.uk']
10
10
 
11
11
  spec.summary = "A simple, lightweight wrapper around PayPal's REST API."
12
- spec.homepage = 'https://github.com/nialtoservices/simpal'
12
+ spec.homepage = 'https://github.com/NialtoServices/simpal'
13
13
  spec.license = 'Apache-2.0'
14
14
  spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
15
15
 
16
16
  spec.metadata['homepage_uri'] = spec.homepage
17
- spec.metadata['source_code_uri'] = 'https://github.com/nialtoservices/simpal'
17
+ spec.metadata['source_code_uri'] = 'https://github.com/NialtoServices/simpal'
18
18
  spec.metadata['changelog_uri'] = 'https://github.com/NialtoServices/simpal/blob/main/CHANGELOG.md'
19
19
  spec.metadata['rubygems_mfa_required'] = 'true'
20
20
 
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.bindir = 'exe'
28
28
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
29
- spec.require_paths = ['lib']
29
+ spec.require_paths = %w[lib]
30
30
 
31
31
  spec.add_dependency 'faraday', '~> 2.0'
32
32
 
@@ -34,10 +34,10 @@ Gem::Specification.new do |spec|
34
34
  spec.add_development_dependency 'guard-rspec', '~> 4.7'
35
35
  spec.add_development_dependency 'pry', '~> 0.14'
36
36
  spec.add_development_dependency 'rake', '~> 13.0'
37
- spec.add_development_dependency 'rspec', '~> 3.11'
38
- spec.add_development_dependency 'rubocop', '~> 1.32'
37
+ spec.add_development_dependency 'rspec', '~> 3.12'
38
+ spec.add_development_dependency 'rubocop', '~> 1.39'
39
39
  spec.add_development_dependency 'rubocop-rake', '~> 0.6'
40
- spec.add_development_dependency 'rubocop-rspec', '~> 2.12'
41
- spec.add_development_dependency 'sinatra', '~> 2.2'
42
- spec.add_development_dependency 'webmock', '~> 3.14'
40
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.15'
41
+ spec.add_development_dependency 'sinatra', '~> 3.0'
42
+ spec.add_development_dependency 'webmock', '~> 3.18'
43
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simpal
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nialto Services
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-01 00:00:00.000000000 Z
11
+ date: 2022-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -86,28 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.11'
89
+ version: '3.12'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '3.11'
96
+ version: '3.12'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rubocop
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.32'
103
+ version: '1.39'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.32'
110
+ version: '1.39'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rubocop-rake
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -128,42 +128,42 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '2.12'
131
+ version: '2.15'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '2.12'
138
+ version: '2.15'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: sinatra
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '2.2'
145
+ version: '3.0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '2.2'
152
+ version: '3.0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: webmock
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '3.14'
159
+ version: '3.18'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: '3.14'
166
+ version: '3.18'
167
167
  description:
168
168
  email:
169
169
  - support@nialtoservices.co.uk
@@ -195,17 +195,17 @@ files:
195
195
  - lib/simpal/middleware/authorization.rb
196
196
  - lib/simpal/middleware/headers.rb
197
197
  - lib/simpal/order.rb
198
- - lib/simpal/pay_pal_object.rb
199
198
  - lib/simpal/payment/authorization.rb
200
199
  - lib/simpal/payment/capture.rb
201
200
  - lib/simpal/payment/refund.rb
201
+ - lib/simpal/paypal_object.rb
202
202
  - simpal.gemspec
203
- homepage: https://github.com/nialtoservices/simpal
203
+ homepage: https://github.com/NialtoServices/simpal
204
204
  licenses:
205
205
  - Apache-2.0
206
206
  metadata:
207
- homepage_uri: https://github.com/nialtoservices/simpal
208
- source_code_uri: https://github.com/nialtoservices/simpal
207
+ homepage_uri: https://github.com/NialtoServices/simpal
208
+ source_code_uri: https://github.com/NialtoServices/simpal
209
209
  changelog_uri: https://github.com/NialtoServices/simpal/blob/main/CHANGELOG.md
210
210
  rubygems_mfa_required: 'true'
211
211
  post_install_message:
@@ -223,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
223
  - !ruby/object:Gem::Version
224
224
  version: '0'
225
225
  requirements: []
226
- rubygems_version: 3.3.7
226
+ rubygems_version: 3.3.20
227
227
  signing_key:
228
228
  specification_version: 4
229
229
  summary: A simple, lightweight wrapper around PayPal's REST API.
@@ -1,92 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Simpal
4
- # Represents an API resource.
5
- #
6
- class PayPalObject
7
- # Create a new object representing the provided resource.
8
- #
9
- # @param resource [Hash] The resource to represent.
10
- #
11
- def initialize(resource = {})
12
- transform = proc do |key, value|
13
- case value
14
- when Array then value.map { |v| transform.call(nil, v) }
15
- when Hash then PayPalObject.new(value)
16
- else
17
- if key && (key.end_with?('date') || key.end_with?('time'))
18
- Time.parse(value)
19
- else
20
- value
21
- end
22
- end
23
- end
24
-
25
- @values = resource.each_with_object({}) do |(key, value), values|
26
- values[key.to_s] = transform.call(key.to_s, value)
27
- add_reader(key)
28
- end
29
- end
30
-
31
- # @return [Hash] A hash representation of the PayPal object.
32
- #
33
- def to_hash
34
- transform = proc do |value|
35
- case value
36
- when Array then value.map { |v| transform.call(v) }
37
- when PayPalObject then value.to_hash
38
- else value.is_a?(Time) ? value.iso8601 : value
39
- end
40
- end
41
-
42
- @values.transform_values(&transform)
43
- end
44
-
45
- # @see Simpal::PayPalObject#to_hash
46
- #
47
- alias to_h to_hash
48
-
49
- # @return [String] A JSON string representation of the PayPal object.
50
- #
51
- def inspect
52
- paypal_id = respond_to?(:id) && id ? " id=#{id}" : ''
53
- json = JSON.pretty_generate(@values)
54
- "#<#{self.class}:0x#{object_id.to_s(16)}#{paypal_id}> JSON: #{json}"
55
- end
56
-
57
- # @return [Boolean] `true` to indicate that all methods can be responded to.
58
- #
59
- def respond_to_missing?(_name, _include_all)
60
- true
61
- end
62
-
63
- # @return [NilClass] `nil` instead of raising an exception.
64
- #
65
- def method_missing(_name, *args); end
66
-
67
- private
68
-
69
- # Add a read-only attribute for the specified value.
70
- #
71
- # @param name [String, Symbol] The name of the attribute to define.
72
- #
73
- def add_reader(name)
74
- metaclass.instance_eval do
75
- name = name.to_s
76
- if name.to_sym == :method
77
- define_method(name.to_sym) { |*args| args.empty? ? @values[name] : super(*args) }
78
- else
79
- define_method(name.to_sym) { @values[name] }
80
- end
81
- end
82
- end
83
-
84
- # @return [Class] The metaclass which can be used to define methods on this instance only.
85
- #
86
- def metaclass
87
- class << self
88
- self
89
- end
90
- end
91
- end
92
- end