apia 3.7.1 → 3.8.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: 3ca83d2cf83582c065e6af3a0ee926956ef3be223c0855103ee3df4a1bb5cd06
4
- data.tar.gz: b6c384351af2236c7755c64e4b6c138594967079d6cb67587420f7773d64666f
3
+ metadata.gz: c3045cadda1c5b6cdbfd059d7ac5e6ad90f890f73b72ba7b9807370b4034ffc1
4
+ data.tar.gz: 4d542e092f2b7bc81ed416c31b320a04546e4fa8d7151cdb89a2b616dfd7e004
5
5
  SHA512:
6
- metadata.gz: 6ec614a5e14c0b146f1deb03e9193b3aad0a9f3e093f8b4fef298bc4e258308396c7d7ace3a3518b71b299b69ca202518ccd4edc957ab0014628643d46fc2740
7
- data.tar.gz: 994a2a935d9c78da37e88f983b4e2e2466f229fba9801615a07f87a52ea3196fe49405311a56e481810c812efee6f342e7d92d133c6a9c292843af6a674f34f9
6
+ metadata.gz: fef0a20ce38cab8ed6a341004285188d8a06b1bc90612f5c96b622a11c734bb84fcd276fceff8424c178fed1b9d1f8d0c518f7a0ca29d988f8984b647a684edc
7
+ data.tar.gz: 5f6f244da3f572641b203a9f4bb3d0728472694c7eeb67b58fd668d97727b1f8300aacb6a63e7446864abcea18759e43a7df4aa9a5e42211039def1dd7bd3a8c
@@ -69,7 +69,7 @@ module Apia
69
69
 
70
70
  field :pagination, type: PaginationObject
71
71
  end
72
- super(name, *args, type: type, **options, &block)
72
+ super
73
73
  end
74
74
 
75
75
  def fields(fieldset)
data/lib/apia/endpoint.rb CHANGED
@@ -47,7 +47,7 @@ module Apia
47
47
  response = Response.new(request, self)
48
48
  environment = RequestEnvironment.new(request, response)
49
49
 
50
- catch_errors(response) do
50
+ catch_errors(response, environment) do
51
51
  # Determine an authenticator for this endpoint
52
52
  request.authenticator = definition.authenticator || request.controller&.definition&.authenticator || request.api&.definition&.authenticator
53
53
 
@@ -92,10 +92,14 @@ module Apia
92
92
  #
93
93
  # @param response [Apia::Response]
94
94
  # @return [void]
95
- def catch_errors(response)
95
+ def catch_errors(response, environment)
96
96
  yield
97
97
  rescue Apia::RuntimeError => e
98
- catch_errors(response) do
98
+ # If the error was triggered by the authenticator, the cors headers wont yet have been merged
99
+ # so ensure cors headers are merged here
100
+ response.headers.merge!(environment.cors.to_headers)
101
+
102
+ catch_errors(response, environment) do
99
103
  response.body = { error: e.hash }
100
104
  response.status = e.http_status
101
105
  response.headers['x-api-schema'] = 'json-error'
data/lib/apia/request.rb CHANGED
@@ -36,7 +36,7 @@ module Apia
36
36
  end
37
37
 
38
38
  def body?
39
- has_header?('rack.input')
39
+ has_header?(::Rack::RACK_INPUT)
40
40
  end
41
41
 
42
42
  def params
@@ -58,7 +58,9 @@ module Apia
58
58
  end
59
59
 
60
60
  def get_json_body_from_body
61
- return unless content_type =~ /\Aapplication\/json/
61
+ # Allow for either standard json content type (ie: application/json)
62
+ # or a vendor specific type with a json suffix (eg: application/vnd.docker.distribution.events.v2+json)
63
+ return unless content_type =~ /\Aapplication\/(|.*\+)json/
62
64
  return unless body?
63
65
 
64
66
  parse_json_from_string(body.read)
data/lib/apia/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Apia
4
4
 
5
- VERSION = '3.7.1'
5
+ VERSION = '3.8.0'
6
6
 
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apia
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.1
4
+ version: 3.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-21 00:00:00.000000000 Z
11
+ date: 2025-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -170,7 +170,7 @@ homepage: https://github.com/krystal/apia
170
170
  licenses:
171
171
  - MIT
172
172
  metadata: {}
173
- post_install_message:
173
+ post_install_message:
174
174
  rdoc_options: []
175
175
  require_paths:
176
176
  - lib
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
186
  version: '0'
187
187
  requirements: []
188
188
  rubygems_version: 3.3.27
189
- signing_key:
189
+ signing_key:
190
190
  specification_version: 4
191
191
  summary: This gem provides a friendly DSL for constructing HTTP APIs.
192
192
  test_files: []