code-ruby 5.2.4 → 6.0.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
  SHA256:
3
- metadata.gz: b2db565dfb611ea14df67af826fd2a7d425c4994a355fb2dea00f768263af06a
4
- data.tar.gz: e227c3acd9a1f6bdbc1f60f1a3229266d1d48b3a850e3a9066275c9613057ad5
3
+ metadata.gz: 1aec9dbb3d232f6cd9f80c2094505b60ad1f6d3ffb974fcc99ce1ccf06d7772c
4
+ data.tar.gz: 706e9983a36f38bad9687abb1edbbab6a546e63e643397b7bcbd50a8e21549a7
5
5
  SHA512:
6
- metadata.gz: dc5764588753a879e2fcc926e16e8a86895964192f15a692c941fcdc8fa6dfd578ebcd1eff3214d91ca82bc7dbaab0687866d3778bcdb5bd65fa37f8bdb2e190
7
- data.tar.gz: 190d3f87a380bd783ba276f1b82935f740f0d5b3be52d3d44c5a6f728e7e95f0448df8a1f37734a5ea71c1f2ff0f3cc33e373155e3f6eaac6fafd770cf3ee07d
6
+ metadata.gz: 65f90487ee1e6110b87605d7014963b44664912591291c2c5d3bac4b72303bec0c7955825c2b0d9f50ec3c1d25bb63d5b0815732ad79c1a8d65505efc74b3414
7
+ data.tar.gz: 9715125c292a852fe2f18179c3305e5b1f890ffd20661c4db509d359dee2099a42930a4befddce72666e9825239c174b76b6e43789752dc7afa32f42f2ce8a77
data/VERSION CHANGED
@@ -1 +1 @@
1
- 5.2.4
1
+ 6.0.0
@@ -319,10 +319,14 @@ class Code
319
319
 
320
320
  code_context.code_fetch(self)
321
321
  else
322
- raise(
323
- Error,
324
- "#{code_operator.inspect} not defined on #{code_inspect}:#{code_name}"
325
- )
322
+ if code_operator.to_s.match?(/\A[A-Z]/)
323
+ raise(
324
+ Error,
325
+ "#{code_operator.inspect} not defined on #{code_inspect}:#{code_name}"
326
+ )
327
+ end
328
+
329
+ Object::Nothing.new
326
330
  end
327
331
  end
328
332
 
@@ -199,6 +199,20 @@ class Code
199
199
  }.freeze
200
200
  DEFAULT_TIMEOUT = 30
201
201
  DEFAULT_OPEN_TIMEOUT = 10
202
+ DEFAULT_REDIRECTS = 0
203
+ DEFAULT_MAX_RETRIES = 0
204
+ DEFAULT_RETRY_DELAYS = [].freeze
205
+ MAX_REDIRECTS = 10
206
+ MAX_RETRIES = 5
207
+ MAX_RETRY_DELAY = 60
208
+ MAX_RESPONSE_BYTES = 50.megabytes
209
+ SAFE_RETRY_METHODS = %w[get head options].freeze
210
+ RETRYABLE_ERRORS = ["http timeout", "http error"].freeze
211
+ RETRYABLE_STATUSES = [408, 429].freeze
212
+ SERVER_ERROR_STATUSES = (500..599)
213
+ SUCCESS_STATUSES = (200..299)
214
+ REDIRECT_STATUSES = (300..399)
215
+ PRESERVE_METHOD_REDIRECT_STATUSES = [307, 308].freeze
202
216
  MAX_HEADER_BYTES = 32.kilobytes
203
217
  HEADER_NAME = /\A[A-Za-z0-9!#$%&'*+\-.^_`|~]+\z/
204
218
  RESTRICTED_HEADERS = %w[
@@ -285,16 +299,16 @@ class Code
285
299
  options = arguments.third.to_code
286
300
  options = Dictionary.new if options.nothing?
287
301
  delays = options.code_get("retry_delays")
288
- delays = delays.nothing? ? [] : delays.as_json
289
- unless delays.size <= 5 &&
302
+ delays = delays.nothing? ? DEFAULT_RETRY_DELAYS : delays.as_json
303
+ unless delays.size <= MAX_RETRIES &&
290
304
  delays.all? do |delay|
291
305
  delay.is_a?(::Numeric) && delay.finite? &&
292
- delay.between?(0, 60)
306
+ delay.between?(0, MAX_RETRY_DELAY)
293
307
  end
294
308
  raise ::Code::Error, "http: invalid retry delays"
295
309
  end
296
310
 
297
- safe = %w[get head options].include?(arguments.first.to_s.downcase)
311
+ safe = SAFE_RETRY_METHODS.include?(arguments.first.to_s.downcase)
298
312
  safe ||= options.code_get("retry_unsafe").truthy?
299
313
  safe ||=
300
314
  (options.code_get("headers").as_json || {}).any? do |key, value|
@@ -306,7 +320,7 @@ class Code
306
320
  begin
307
321
  response = code_request(*arguments, redirects: redirects)
308
322
  rescue ::Code::Error => e
309
- unless ["http timeout", "http error"].include?(e.message) &&
323
+ unless RETRYABLE_ERRORS.include?(e.message) &&
310
324
  attempt < delays.size
311
325
  raise
312
326
  end
@@ -316,7 +330,7 @@ class Code
316
330
  next
317
331
  end
318
332
  status = response.code_get("code").raw
319
- unless [408, 429].include?(status) || status.between?(500, 599)
333
+ unless RETRYABLE_STATUSES.include?(status) || SERVER_ERROR_STATUSES.cover?(status)
320
334
  return response
321
335
  end
322
336
  return response if attempt >= delays.size
@@ -333,7 +347,7 @@ class Code
333
347
  delay = delays[attempt]
334
348
  end
335
349
  end
336
- return response if delay > 60
350
+ return response if delay > MAX_RETRY_DELAY
337
351
 
338
352
  sleep(delay)
339
353
  attempt += 1
@@ -349,7 +363,7 @@ class Code
349
363
  redirects =
350
364
  (
351
365
  if options.code_get("redirects").nothing?
352
- 0
366
+ DEFAULT_REDIRECTS
353
367
  else
354
368
  options.code_get("redirects").raw
355
369
  end
@@ -358,12 +372,13 @@ class Code
358
372
  max_retries =
359
373
  (
360
374
  if options.code_get("max_retries").nothing?
361
- 0
375
+ DEFAULT_MAX_RETRIES
362
376
  else
363
377
  options.code_get("max_retries").raw
364
378
  end
365
379
  )
366
- unless redirects.between?(0, 10) && max_retries.between?(0, 5)
380
+ unless redirects.between?(0, MAX_REDIRECTS) &&
381
+ max_retries.between?(0, MAX_RETRIES)
367
382
  raise ::Code::Error, "http: invalid request limits"
368
383
  end
369
384
 
@@ -399,7 +414,7 @@ class Code
399
414
 
400
415
  max_bytes = options.code_get("max_bytes")
401
416
  max_bytes = max_bytes.nothing? ? nil : max_bytes.raw
402
- if max_bytes && !max_bytes.between?(1, 50.megabytes)
417
+ if max_bytes && !max_bytes.between?(1, MAX_RESPONSE_BYTES)
403
418
  raise ::Code::Error, "http: invalid response size limit"
404
419
  end
405
420
 
@@ -472,12 +487,12 @@ class Code
472
487
  code = response.code.to_i
473
488
  location = response["location"].to_s
474
489
 
475
- if (300..399).cover?(code) && location.present? && redirects.positive?
490
+ if REDIRECT_STATUSES.cover?(code) && location.present? && redirects.positive?
476
491
  new_uri = parse_uri(::URI.join(uri, location).to_s)
477
492
  ::Code::Network.validate_public_uri!(new_uri, service: "http")
478
493
 
479
494
  redirect_options = options.as_json.except("query")
480
- redirect_method = [307, 308].include?(code) ? verb : "get"
495
+ redirect_method = PRESERVE_METHOD_REDIRECT_STATUSES.include?(code) ? verb : "get"
481
496
  unless same_origin?(new_uri, uri)
482
497
  unless %w[get head].include?(redirect_method)
483
498
  raise ::Code::Error,
@@ -509,8 +524,8 @@ class Code
509
524
  :headers => response_headers,
510
525
  :method => verb,
511
526
  :url => url,
512
- "success?" => code.between?(200, 299),
513
- "redirect?" => code.between?(300, 399),
527
+ "success?" => SUCCESS_STATUSES.cover?(code),
528
+ "redirect?" => REDIRECT_STATUSES.cover?(code),
514
529
  :request => {
515
530
  method: verb,
516
531
  url: url,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.4
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié