square.rb 20.1.0.20220616 → 22.0.0.20220817
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 +4 -4
- data/lib/square/api/base_api.rb +8 -1
- data/lib/square/api/bookings_api.rb +3 -3
- data/lib/square/api/cards_api.rb +3 -2
- data/lib/square/api/catalog_api.rb +22 -22
- data/lib/square/api/checkout_api.rb +5 -5
- data/lib/square/api/customer_custom_attributes_api.rb +55 -34
- data/lib/square/api/customers_api.rb +3 -3
- data/lib/square/api/disputes_api.rb +24 -29
- data/lib/square/api/loyalty_api.rb +256 -31
- data/lib/square/api/orders_api.rb +2 -2
- data/lib/square/api/payments_api.rb +1 -1
- data/lib/square/api/v1_transactions_api.rb +4 -4
- data/lib/square/api/webhook_subscriptions_api.rb +328 -0
- data/lib/square/api_helper.rb +176 -4
- data/lib/square/client.rb +10 -5
- data/lib/square/configuration.rb +3 -4
- data/lib/square/exceptions/validation_exception.rb +13 -0
- data/lib/square/http/faraday_client.rb +1 -0
- data/lib/square.rb +2 -0
- data/test/test_helper.rb +1 -1
- metadata +22 -6
data/lib/square/api_helper.rb
CHANGED
@@ -130,6 +130,12 @@ module Square
|
|
130
130
|
raise TypeError, 'Server responded with invalid JSON.'
|
131
131
|
end
|
132
132
|
|
133
|
+
# Parses JSON string.
|
134
|
+
# @param [object] The object to serialize.
|
135
|
+
def self.json_serialize(obj)
|
136
|
+
serializable_types.map { |x| obj.is_a? x }.any? ? obj.to_s : obj.to_json
|
137
|
+
end
|
138
|
+
|
133
139
|
# Removes elements with empty values from a hash.
|
134
140
|
# @param [Hash] The hash to clean.
|
135
141
|
def self.clean_hash(hash)
|
@@ -199,9 +205,6 @@ module Square
|
|
199
205
|
def self.form_encode(obj, instance_name, formatting: 'indexed')
|
200
206
|
retval = {}
|
201
207
|
|
202
|
-
serializable_types = [String, Numeric, TrueClass,
|
203
|
-
FalseClass, Date, DateTime]
|
204
|
-
|
205
208
|
# Create a form encoded hash for this object.
|
206
209
|
if obj.nil?
|
207
210
|
nil
|
@@ -210,7 +213,7 @@ module Square
|
|
210
213
|
obj.each_with_index do |value, index|
|
211
214
|
retval.merge!(APIHelper.form_encode(value, "#{instance_name}[#{index}]"))
|
212
215
|
end
|
213
|
-
elsif serializable_types.map { |x| obj[0].is_a? x }.any?
|
216
|
+
elsif APIHelper.serializable_types.map { |x| obj[0].is_a? x }.any?
|
214
217
|
obj.each do |value|
|
215
218
|
abc = if formatting == 'unindexed'
|
216
219
|
APIHelper.form_encode(value, "#{instance_name}[]",
|
@@ -265,5 +268,174 @@ module Square
|
|
265
268
|
end
|
266
269
|
val
|
267
270
|
end
|
271
|
+
|
272
|
+
# Deserialize the value against the template (group of types).
|
273
|
+
# @param [String] The value to be deserialized.
|
274
|
+
# @param [String] The parameter indicates the type-combination
|
275
|
+
# against which the value will be mapped (oneOf(Integer, String)).
|
276
|
+
def self.deserialize(template, value)
|
277
|
+
decoded = APIHelper.json_deserialize(value)
|
278
|
+
map_types(decoded, template)
|
279
|
+
end
|
280
|
+
|
281
|
+
# Validates and processes the value against the template(group of types).
|
282
|
+
# @param [String] The value to be mapped against the template.
|
283
|
+
# @param [String] The parameter indicates the group of types (oneOf(Integer, String)).
|
284
|
+
# @param [String] The parameter indicates the group (oneOf|anyOf).
|
285
|
+
def self.map_types(value, template, group_name: nil)
|
286
|
+
result_value = nil
|
287
|
+
matches = 0
|
288
|
+
types = []
|
289
|
+
group_name = template.partition('(').first if group_name.nil? && template.match?(/anyOf|oneOf/)
|
290
|
+
|
291
|
+
return if value.nil?
|
292
|
+
|
293
|
+
if template.end_with?('{}') || template.end_with?('[]')
|
294
|
+
types = template.split(group_name, 2).last.gsub(/\s+/, '').split
|
295
|
+
else
|
296
|
+
template = template.split(group_name, 2).last.delete_prefix('(').delete_suffix(')')
|
297
|
+
types = template.scan(/(anyOf|oneOf)[(]([^[)]]*)[)]/).flatten.combination(2).map { |a, b| "#{a}(#{b})" }
|
298
|
+
types.each { |t| template = template.gsub(", #{t}", '') }
|
299
|
+
types = template.gsub(/\s+/, '').split(',').push(*types)
|
300
|
+
end
|
301
|
+
types.each do |element|
|
302
|
+
if element.match?(/^(oneOf|anyOf)[(].*$/)
|
303
|
+
begin
|
304
|
+
result_value = map_types(value, element, matches)
|
305
|
+
matches += 1
|
306
|
+
rescue ValidationException
|
307
|
+
next
|
308
|
+
end
|
309
|
+
elsif element.end_with?('{}')
|
310
|
+
result_value, matches = map_hash_type(value, element, group_name, matches)
|
311
|
+
elsif element.end_with?('[]')
|
312
|
+
result_value, matches = map_array_type(value, element, group_name, matches)
|
313
|
+
else
|
314
|
+
begin
|
315
|
+
result_value, matches = map_type(value, element, group_name, matches)
|
316
|
+
rescue StandardError
|
317
|
+
next
|
318
|
+
end
|
319
|
+
end
|
320
|
+
break if group_name == 'anyOf' && matches == 1
|
321
|
+
end
|
322
|
+
raise ValidationException.new(value, template) unless matches == 1
|
323
|
+
|
324
|
+
value = result_value unless result_value.nil?
|
325
|
+
value
|
326
|
+
end
|
327
|
+
|
328
|
+
# Validates and processes the value against the [Hash] type.
|
329
|
+
# @param [String] The value to be mapped against the type.
|
330
|
+
# @param [String] The possible type of the value.
|
331
|
+
# @param [String] The parameter indicates the group (oneOf|anyOf).
|
332
|
+
# @param [Integer] The parameter indicates the number of matches of value against types.
|
333
|
+
def self.map_hash_type(value, type, group_name, matches)
|
334
|
+
if value.instance_of? Hash
|
335
|
+
decoded = {}
|
336
|
+
value.each do |key, val|
|
337
|
+
type = type.chomp('{}').to_s
|
338
|
+
val = map_types(val, type, group_name: group_name)
|
339
|
+
decoded[key] = val unless type.empty?
|
340
|
+
rescue ValidationException
|
341
|
+
next
|
342
|
+
end
|
343
|
+
matches += 1 if decoded.length == value.length
|
344
|
+
value = decoded unless decoded.empty?
|
345
|
+
end
|
346
|
+
[value, matches]
|
347
|
+
end
|
348
|
+
|
349
|
+
# Validates and processes the value against the [Array] type.
|
350
|
+
# @param [String] The value to be mapped against the type.
|
351
|
+
# @param [String] The possible type of the value.
|
352
|
+
# @param [String] The parameter indicates the group (oneOf|anyOf).
|
353
|
+
# @param [Integer] The parameter indicates the number of matches of value against types.
|
354
|
+
def self.map_array_type(value, type, group_name, matches)
|
355
|
+
if value.instance_of? Array
|
356
|
+
decoded = []
|
357
|
+
value.each do |val|
|
358
|
+
type = type.chomp('[]').to_s
|
359
|
+
val = map_types(val, type, group_name: group_name)
|
360
|
+
decoded.append(val) unless type.empty?
|
361
|
+
rescue ValidationException
|
362
|
+
next
|
363
|
+
end
|
364
|
+
matches += 1 if decoded.length == value.length
|
365
|
+
value = decoded unless decoded.empty?
|
366
|
+
end
|
367
|
+
[value, matches]
|
368
|
+
end
|
369
|
+
|
370
|
+
# Validates and processes the value against the type.
|
371
|
+
# @param [String] The value to be mapped against the type.
|
372
|
+
# @param [String] The possible type of the value.
|
373
|
+
# @param [String] The parameter indicates the group (oneOf|anyOf).
|
374
|
+
# @param [Integer] The parameter indicates the number of matches of value against types.
|
375
|
+
def self.map_type(value, type, _group_name, matches)
|
376
|
+
if Square.constants.select do |c|
|
377
|
+
Square.const_get(c).to_s == "Square::#{type}"
|
378
|
+
end.empty?
|
379
|
+
value, matches = map_data_type(value, type, matches)
|
380
|
+
else
|
381
|
+
value, matches = map_complex_type(value, type, matches)
|
382
|
+
end
|
383
|
+
[value, matches]
|
384
|
+
end
|
385
|
+
|
386
|
+
# Validates and processes the value against the complex types.
|
387
|
+
# @param [String] The value to be mapped against the type.
|
388
|
+
# @param [String] The possible type of the value.
|
389
|
+
# @param [Integer] The parameter indicates the number of matches of value against types.
|
390
|
+
def self.map_complex_type(value, type, matches)
|
391
|
+
obj = Square.const_get(type)
|
392
|
+
value = if obj.respond_to? 'from_hash'
|
393
|
+
obj.send('from_hash', value)
|
394
|
+
else
|
395
|
+
obj.constants.find { |k| obj.const_get(k) == value }
|
396
|
+
end
|
397
|
+
matches += 1 unless value.nil?
|
398
|
+
[value, matches]
|
399
|
+
end
|
400
|
+
|
401
|
+
# Validates and processes the value against the data types.
|
402
|
+
# @param [String] The value to be mapped against the type.
|
403
|
+
# @param [String] The possible type of the value.
|
404
|
+
# @param [Integer] The parameter indicates the number of matches of value against types.
|
405
|
+
def self.map_data_type(value, element, matches)
|
406
|
+
element = element.split('|').map { |x| Object.const_get x }
|
407
|
+
matches += 1 if element.all? { |x| APIHelper.data_types.include?(x) } &&
|
408
|
+
element.any? { |x| (value.instance_of? x) || (value.class.ancestors.include? x) }
|
409
|
+
[value, matches]
|
410
|
+
end
|
411
|
+
|
412
|
+
# Validates the value against the template(group of types).
|
413
|
+
# @param [String] The value to be mapped against the type.
|
414
|
+
# @param [String] The parameter indicates the group of types (oneOf(Integer, String)).
|
415
|
+
def self.validate_types(value, template)
|
416
|
+
map_types(APIHelper.json_deserialize(value.to_json), template)
|
417
|
+
end
|
418
|
+
|
419
|
+
# Get content-type depending on the value
|
420
|
+
def self.get_content_type(value)
|
421
|
+
if serializable_types.map { |x| value.is_a? x }.any?
|
422
|
+
'text/plain; charset=utf-8'
|
423
|
+
else
|
424
|
+
'application/json; charset=utf-8'
|
425
|
+
end
|
426
|
+
end
|
427
|
+
|
428
|
+
# Array of serializable types
|
429
|
+
def self.serializable_types
|
430
|
+
[String, Numeric, TrueClass,
|
431
|
+
FalseClass, Date, DateTime]
|
432
|
+
end
|
433
|
+
|
434
|
+
# Array of supported data types
|
435
|
+
def self.data_types
|
436
|
+
[String, Float, Integer,
|
437
|
+
TrueClass, FalseClass, Date,
|
438
|
+
DateTime, Array, Hash, Object]
|
439
|
+
end
|
268
440
|
end
|
269
441
|
end
|
data/lib/square/client.rb
CHANGED
@@ -4,7 +4,7 @@ module Square
|
|
4
4
|
attr_reader :config
|
5
5
|
|
6
6
|
def sdk_version
|
7
|
-
'
|
7
|
+
'22.0.0.20220817'
|
8
8
|
end
|
9
9
|
|
10
10
|
def square_version
|
@@ -231,13 +231,18 @@ module Square
|
|
231
231
|
@vendors ||= VendorsApi.new config
|
232
232
|
end
|
233
233
|
|
234
|
-
|
235
|
-
|
236
|
-
|
234
|
+
# Access to webhook_subscriptions controller.
|
235
|
+
# @return [WebhookSubscriptionsApi] Returns the controller instance.
|
236
|
+
def webhook_subscriptions
|
237
|
+
@webhook_subscriptions ||= WebhookSubscriptionsApi.new config
|
238
|
+
end
|
239
|
+
|
240
|
+
def initialize(connection: nil, adapter: :net_http_persistent, timeout: 60,
|
241
|
+
max_retries: 0, retry_interval: 1, backoff_factor: 2,
|
237
242
|
retry_statuses: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524],
|
238
243
|
retry_methods: %i[get put], environment: 'production',
|
239
244
|
custom_url: 'https://connect.squareup.com',
|
240
|
-
square_version: '2022-
|
245
|
+
square_version: '2022-08-17', access_token: '',
|
241
246
|
user_agent_detail: '', additional_headers: {}, config: nil)
|
242
247
|
@config = if config.nil?
|
243
248
|
Configuration.new(connection: connection, adapter: adapter,
|
data/lib/square/configuration.rb
CHANGED
@@ -15,13 +15,12 @@ module Square
|
|
15
15
|
attr_reader :environments
|
16
16
|
end
|
17
17
|
|
18
|
-
def initialize(connection: nil, adapter:
|
19
|
-
|
20
|
-
backoff_factor: 2,
|
18
|
+
def initialize(connection: nil, adapter: :net_http_persistent, timeout: 60,
|
19
|
+
max_retries: 0, retry_interval: 1, backoff_factor: 2,
|
21
20
|
retry_statuses: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524],
|
22
21
|
retry_methods: %i[get put], environment: 'production',
|
23
22
|
custom_url: 'https://connect.squareup.com',
|
24
|
-
square_version: '2022-
|
23
|
+
square_version: '2022-08-17', access_token: '',
|
25
24
|
user_agent_detail: '', additional_headers: {})
|
26
25
|
# The Faraday connection object passed by the SDK user for making requests
|
27
26
|
@connection = connection
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Square
|
2
|
+
# Class for exceptions when there is a schema validation error.
|
3
|
+
class ValidationException < StandardError
|
4
|
+
attr_reader :reason
|
5
|
+
|
6
|
+
# The constructor.
|
7
|
+
# @param [String] The reason for raising an exception.
|
8
|
+
def initialize(value, template)
|
9
|
+
@reason = "The value #{value} provided doesn't validate against the schema #{template}"
|
10
|
+
super(reason)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/square.rb
CHANGED
@@ -25,6 +25,7 @@ require_relative 'square/http/auth/o_auth2'
|
|
25
25
|
|
26
26
|
# Exceptions
|
27
27
|
require_relative 'square/exceptions/api_exception'
|
28
|
+
require_relative 'square/exceptions/validation_exception'
|
28
29
|
|
29
30
|
require_relative 'square/configuration'
|
30
31
|
|
@@ -66,3 +67,4 @@ require_relative 'square/api/subscriptions_api'
|
|
66
67
|
require_relative 'square/api/team_api'
|
67
68
|
require_relative 'square/api/terminal_api'
|
68
69
|
require_relative 'square/api/vendors_api'
|
70
|
+
require_relative 'square/api/webhook_subscriptions_api'
|
data/test/test_helper.rb
CHANGED
@@ -49,7 +49,7 @@ class TestHelper
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
elsif expected_body.instance_of? Array
|
52
|
-
return
|
52
|
+
return false unless received_body.instance_of? Array
|
53
53
|
if check_count == true && (expected_body.length != received_body.length)
|
54
54
|
return false
|
55
55
|
else
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: square.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 22.0.0.20220817
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Square Developer Platform
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logging
|
@@ -31,9 +31,9 @@ dependencies:
|
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '2.0'
|
34
|
-
- - "
|
34
|
+
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 2.0
|
36
|
+
version: 2.5.0
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -41,9 +41,9 @@ dependencies:
|
|
41
41
|
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: '2.0'
|
44
|
-
- - "
|
44
|
+
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 2.0
|
46
|
+
version: 2.5.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: faraday-follow_redirects
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,6 +100,20 @@ dependencies:
|
|
100
100
|
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '1.0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: faraday-net_http_persistent
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '2.0'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '2.0'
|
103
117
|
- !ruby/object:Gem::Dependency
|
104
118
|
name: certifi
|
105
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -215,10 +229,12 @@ files:
|
|
215
229
|
- lib/square/api/transactions_api.rb
|
216
230
|
- lib/square/api/v1_transactions_api.rb
|
217
231
|
- lib/square/api/vendors_api.rb
|
232
|
+
- lib/square/api/webhook_subscriptions_api.rb
|
218
233
|
- lib/square/api_helper.rb
|
219
234
|
- lib/square/client.rb
|
220
235
|
- lib/square/configuration.rb
|
221
236
|
- lib/square/exceptions/api_exception.rb
|
237
|
+
- lib/square/exceptions/validation_exception.rb
|
222
238
|
- lib/square/http/api_response.rb
|
223
239
|
- lib/square/http/auth/o_auth2.rb
|
224
240
|
- lib/square/http/faraday_client.rb
|