grape 2.3.0 → 3.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 +4 -4
- data/CHANGELOG.md +69 -0
- data/CONTRIBUTING.md +2 -10
- data/README.md +106 -43
- data/UPGRADING.md +90 -1
- data/grape.gemspec +4 -4
- data/lib/grape/api/instance.rb +51 -73
- data/lib/grape/api.rb +56 -89
- data/lib/grape/cookies.rb +31 -25
- data/lib/grape/dry_types.rb +48 -4
- data/lib/grape/dsl/callbacks.rb +8 -58
- data/lib/grape/dsl/desc.rb +8 -67
- data/lib/grape/dsl/headers.rb +1 -1
- data/lib/grape/dsl/helpers.rb +60 -65
- data/lib/grape/dsl/inside_route.rb +26 -61
- data/lib/grape/dsl/logger.rb +3 -6
- data/lib/grape/dsl/middleware.rb +22 -40
- data/lib/grape/dsl/parameters.rb +10 -19
- data/lib/grape/dsl/request_response.rb +136 -139
- data/lib/grape/dsl/routing.rb +230 -194
- data/lib/grape/dsl/settings.rb +22 -134
- data/lib/grape/dsl/validations.rb +37 -45
- data/lib/grape/endpoint.rb +91 -126
- data/lib/grape/error_formatter/base.rb +2 -0
- data/lib/grape/exceptions/base.rb +1 -1
- data/lib/grape/exceptions/conflicting_types.rb +11 -0
- data/lib/grape/exceptions/invalid_parameters.rb +11 -0
- data/lib/grape/exceptions/missing_group_type.rb +0 -2
- data/lib/grape/exceptions/too_deep_parameters.rb +11 -0
- data/lib/grape/exceptions/unknown_auth_strategy.rb +11 -0
- data/lib/grape/exceptions/unknown_params_builder.rb +11 -0
- data/lib/grape/exceptions/unsupported_group_type.rb +0 -2
- data/lib/grape/extensions/active_support/hash_with_indifferent_access.rb +2 -5
- data/lib/grape/extensions/hash.rb +2 -1
- data/lib/grape/extensions/hashie/mash.rb +3 -5
- data/lib/grape/locale/en.yml +44 -44
- data/lib/grape/middleware/auth/base.rb +11 -32
- data/lib/grape/middleware/auth/dsl.rb +22 -29
- data/lib/grape/middleware/base.rb +30 -11
- data/lib/grape/middleware/error.rb +14 -32
- data/lib/grape/middleware/formatter.rb +40 -72
- data/lib/grape/middleware/stack.rb +28 -38
- data/lib/grape/middleware/versioner/accept_version_header.rb +2 -4
- data/lib/grape/middleware/versioner/base.rb +30 -56
- data/lib/grape/middleware/versioner/header.rb +2 -2
- data/lib/grape/middleware/versioner/param.rb +2 -3
- data/lib/grape/middleware/versioner/path.rb +1 -1
- data/lib/grape/namespace.rb +11 -0
- data/lib/grape/params_builder/base.rb +20 -0
- data/lib/grape/params_builder/hash.rb +11 -0
- data/lib/grape/params_builder/hash_with_indifferent_access.rb +11 -0
- data/lib/grape/params_builder/hashie_mash.rb +11 -0
- data/lib/grape/params_builder.rb +32 -0
- data/lib/grape/request.rb +161 -22
- data/lib/grape/router/route.rb +1 -1
- data/lib/grape/router.rb +27 -8
- data/lib/grape/util/api_description.rb +56 -0
- data/lib/grape/util/base_inheritable.rb +5 -2
- data/lib/grape/util/inheritable_setting.rb +7 -0
- data/lib/grape/util/media_type.rb +1 -1
- data/lib/grape/util/registry.rb +1 -1
- data/lib/grape/validations/contract_scope.rb +2 -2
- data/lib/grape/validations/params_documentation.rb +50 -0
- data/lib/grape/validations/params_scope.rb +46 -56
- data/lib/grape/validations/types/array_coercer.rb +2 -3
- data/lib/grape/validations/types/dry_type_coercer.rb +4 -11
- data/lib/grape/validations/types/primitive_coercer.rb +1 -28
- data/lib/grape/validations/types.rb +10 -25
- data/lib/grape/validations/validators/base.rb +2 -9
- data/lib/grape/validations/validators/except_values_validator.rb +1 -1
- data/lib/grape/validations/validators/presence_validator.rb +1 -1
- data/lib/grape/validations/validators/regexp_validator.rb +1 -1
- data/lib/grape/version.rb +1 -1
- data/lib/grape.rb +18 -9
- metadata +35 -20
- data/lib/grape/api/helpers.rb +0 -9
- data/lib/grape/dsl/api.rb +0 -19
- data/lib/grape/dsl/configuration.rb +0 -15
- data/lib/grape/error_formatter/jsonapi.rb +0 -7
- data/lib/grape/http/headers.rb +0 -56
- data/lib/grape/middleware/helpers.rb +0 -12
- data/lib/grape/parser/jsonapi.rb +0 -7
- data/lib/grape/types/invalid_value.rb +0 -8
- data/lib/grape/util/lazy/object.rb +0 -45
- data/lib/grape/util/strict_hash_configuration.rb +0 -108
- data/lib/grape/validations/attributes_doc.rb +0 -60
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: grape
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michael Bleigh
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: activesupport
|
|
@@ -15,14 +15,28 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '
|
|
18
|
+
version: '7.0'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '
|
|
25
|
+
version: '7.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: dry-configurable
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
26
40
|
- !ruby/object:Gem::Dependency
|
|
27
41
|
name: dry-types
|
|
28
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -95,14 +109,11 @@ files:
|
|
|
95
109
|
- grape.png
|
|
96
110
|
- lib/grape.rb
|
|
97
111
|
- lib/grape/api.rb
|
|
98
|
-
- lib/grape/api/helpers.rb
|
|
99
112
|
- lib/grape/api/instance.rb
|
|
100
113
|
- lib/grape/content_types.rb
|
|
101
114
|
- lib/grape/cookies.rb
|
|
102
115
|
- lib/grape/dry_types.rb
|
|
103
|
-
- lib/grape/dsl/api.rb
|
|
104
116
|
- lib/grape/dsl/callbacks.rb
|
|
105
|
-
- lib/grape/dsl/configuration.rb
|
|
106
117
|
- lib/grape/dsl/desc.rb
|
|
107
118
|
- lib/grape/dsl/headers.rb
|
|
108
119
|
- lib/grape/dsl/helpers.rb
|
|
@@ -119,16 +130,17 @@ files:
|
|
|
119
130
|
- lib/grape/error_formatter.rb
|
|
120
131
|
- lib/grape/error_formatter/base.rb
|
|
121
132
|
- lib/grape/error_formatter/json.rb
|
|
122
|
-
- lib/grape/error_formatter/jsonapi.rb
|
|
123
133
|
- lib/grape/error_formatter/serializable_hash.rb
|
|
124
134
|
- lib/grape/error_formatter/txt.rb
|
|
125
135
|
- lib/grape/error_formatter/xml.rb
|
|
126
136
|
- lib/grape/exceptions/base.rb
|
|
137
|
+
- lib/grape/exceptions/conflicting_types.rb
|
|
127
138
|
- lib/grape/exceptions/empty_message_body.rb
|
|
128
139
|
- lib/grape/exceptions/incompatible_option_values.rb
|
|
129
140
|
- lib/grape/exceptions/invalid_accept_header.rb
|
|
130
141
|
- lib/grape/exceptions/invalid_formatter.rb
|
|
131
142
|
- lib/grape/exceptions/invalid_message_body.rb
|
|
143
|
+
- lib/grape/exceptions/invalid_parameters.rb
|
|
132
144
|
- lib/grape/exceptions/invalid_response.rb
|
|
133
145
|
- lib/grape/exceptions/invalid_version_header.rb
|
|
134
146
|
- lib/grape/exceptions/invalid_versioner_option.rb
|
|
@@ -138,9 +150,12 @@ files:
|
|
|
138
150
|
- lib/grape/exceptions/missing_mime_type.rb
|
|
139
151
|
- lib/grape/exceptions/missing_option.rb
|
|
140
152
|
- lib/grape/exceptions/missing_vendor_option.rb
|
|
153
|
+
- lib/grape/exceptions/too_deep_parameters.rb
|
|
141
154
|
- lib/grape/exceptions/too_many_multipart_files.rb
|
|
155
|
+
- lib/grape/exceptions/unknown_auth_strategy.rb
|
|
142
156
|
- lib/grape/exceptions/unknown_options.rb
|
|
143
157
|
- lib/grape/exceptions/unknown_parameter.rb
|
|
158
|
+
- lib/grape/exceptions/unknown_params_builder.rb
|
|
144
159
|
- lib/grape/exceptions/unknown_validator.rb
|
|
145
160
|
- lib/grape/exceptions/unsupported_group_type.rb
|
|
146
161
|
- lib/grape/exceptions/validation.rb
|
|
@@ -155,7 +170,6 @@ files:
|
|
|
155
170
|
- lib/grape/formatter/serializable_hash.rb
|
|
156
171
|
- lib/grape/formatter/txt.rb
|
|
157
172
|
- lib/grape/formatter/xml.rb
|
|
158
|
-
- lib/grape/http/headers.rb
|
|
159
173
|
- lib/grape/json.rb
|
|
160
174
|
- lib/grape/locale/en.yml
|
|
161
175
|
- lib/grape/middleware/auth/base.rb
|
|
@@ -167,7 +181,6 @@ files:
|
|
|
167
181
|
- lib/grape/middleware/filter.rb
|
|
168
182
|
- lib/grape/middleware/formatter.rb
|
|
169
183
|
- lib/grape/middleware/globals.rb
|
|
170
|
-
- lib/grape/middleware/helpers.rb
|
|
171
184
|
- lib/grape/middleware/stack.rb
|
|
172
185
|
- lib/grape/middleware/versioner.rb
|
|
173
186
|
- lib/grape/middleware/versioner/accept_version_header.rb
|
|
@@ -176,10 +189,14 @@ files:
|
|
|
176
189
|
- lib/grape/middleware/versioner/param.rb
|
|
177
190
|
- lib/grape/middleware/versioner/path.rb
|
|
178
191
|
- lib/grape/namespace.rb
|
|
192
|
+
- lib/grape/params_builder.rb
|
|
193
|
+
- lib/grape/params_builder/base.rb
|
|
194
|
+
- lib/grape/params_builder/hash.rb
|
|
195
|
+
- lib/grape/params_builder/hash_with_indifferent_access.rb
|
|
196
|
+
- lib/grape/params_builder/hashie_mash.rb
|
|
179
197
|
- lib/grape/parser.rb
|
|
180
198
|
- lib/grape/parser/base.rb
|
|
181
199
|
- lib/grape/parser/json.rb
|
|
182
|
-
- lib/grape/parser/jsonapi.rb
|
|
183
200
|
- lib/grape/parser/xml.rb
|
|
184
201
|
- lib/grape/path.rb
|
|
185
202
|
- lib/grape/presenters/presenter.rb
|
|
@@ -193,7 +210,7 @@ files:
|
|
|
193
210
|
- lib/grape/serve_stream/file_body.rb
|
|
194
211
|
- lib/grape/serve_stream/sendfile_response.rb
|
|
195
212
|
- lib/grape/serve_stream/stream_response.rb
|
|
196
|
-
- lib/grape/
|
|
213
|
+
- lib/grape/util/api_description.rb
|
|
197
214
|
- lib/grape/util/base_inheritable.rb
|
|
198
215
|
- lib/grape/util/cache.rb
|
|
199
216
|
- lib/grape/util/endpoint_configuration.rb
|
|
@@ -201,7 +218,6 @@ files:
|
|
|
201
218
|
- lib/grape/util/inheritable_setting.rb
|
|
202
219
|
- lib/grape/util/inheritable_values.rb
|
|
203
220
|
- lib/grape/util/lazy/block.rb
|
|
204
|
-
- lib/grape/util/lazy/object.rb
|
|
205
221
|
- lib/grape/util/lazy/value.rb
|
|
206
222
|
- lib/grape/util/lazy/value_array.rb
|
|
207
223
|
- lib/grape/util/lazy/value_enumerable.rb
|
|
@@ -210,12 +226,11 @@ files:
|
|
|
210
226
|
- lib/grape/util/registry.rb
|
|
211
227
|
- lib/grape/util/reverse_stackable_values.rb
|
|
212
228
|
- lib/grape/util/stackable_values.rb
|
|
213
|
-
- lib/grape/util/strict_hash_configuration.rb
|
|
214
229
|
- lib/grape/validations.rb
|
|
215
|
-
- lib/grape/validations/attributes_doc.rb
|
|
216
230
|
- lib/grape/validations/attributes_iterator.rb
|
|
217
231
|
- lib/grape/validations/contract_scope.rb
|
|
218
232
|
- lib/grape/validations/multiple_attributes_iterator.rb
|
|
233
|
+
- lib/grape/validations/params_documentation.rb
|
|
219
234
|
- lib/grape/validations/params_scope.rb
|
|
220
235
|
- lib/grape/validations/single_attribute_iterator.rb
|
|
221
236
|
- lib/grape/validations/types.rb
|
|
@@ -255,9 +270,9 @@ licenses:
|
|
|
255
270
|
- MIT
|
|
256
271
|
metadata:
|
|
257
272
|
bug_tracker_uri: https://github.com/ruby-grape/grape/issues
|
|
258
|
-
changelog_uri: https://github.com/ruby-grape/grape/blob/
|
|
259
|
-
documentation_uri: https://www.rubydoc.info/gems/grape/
|
|
260
|
-
source_code_uri: https://github.com/ruby-grape/grape/tree/
|
|
273
|
+
changelog_uri: https://github.com/ruby-grape/grape/blob/v3.0.0/CHANGELOG.md
|
|
274
|
+
documentation_uri: https://www.rubydoc.info/gems/grape/3.0.0
|
|
275
|
+
source_code_uri: https://github.com/ruby-grape/grape/tree/v3.0.0
|
|
261
276
|
rubygems_mfa_required: 'true'
|
|
262
277
|
rdoc_options: []
|
|
263
278
|
require_paths:
|
|
@@ -266,14 +281,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
266
281
|
requirements:
|
|
267
282
|
- - ">="
|
|
268
283
|
- !ruby/object:Gem::Version
|
|
269
|
-
version:
|
|
284
|
+
version: '3.0'
|
|
270
285
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
286
|
requirements:
|
|
272
287
|
- - ">="
|
|
273
288
|
- !ruby/object:Gem::Version
|
|
274
289
|
version: '0'
|
|
275
290
|
requirements: []
|
|
276
|
-
rubygems_version: 3.
|
|
291
|
+
rubygems_version: 3.7.1
|
|
277
292
|
specification_version: 4
|
|
278
293
|
summary: A simple Ruby framework for building REST-like APIs.
|
|
279
294
|
test_files: []
|
data/lib/grape/api/helpers.rb
DELETED
data/lib/grape/dsl/api.rb
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Grape
|
|
4
|
-
module DSL
|
|
5
|
-
module API
|
|
6
|
-
extend ActiveSupport::Concern
|
|
7
|
-
|
|
8
|
-
include Grape::Middleware::Auth::DSL
|
|
9
|
-
|
|
10
|
-
include Grape::DSL::Validations
|
|
11
|
-
include Grape::DSL::Callbacks
|
|
12
|
-
include Grape::DSL::Configuration
|
|
13
|
-
include Grape::DSL::Helpers
|
|
14
|
-
include Grape::DSL::Middleware
|
|
15
|
-
include Grape::DSL::RequestResponse
|
|
16
|
-
include Grape::DSL::Routing
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Grape
|
|
4
|
-
module DSL
|
|
5
|
-
module Configuration
|
|
6
|
-
extend ActiveSupport::Concern
|
|
7
|
-
|
|
8
|
-
module ClassMethods
|
|
9
|
-
include Grape::DSL::Settings
|
|
10
|
-
include Grape::DSL::Logger
|
|
11
|
-
include Grape::DSL::Desc
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
data/lib/grape/http/headers.rb
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Grape
|
|
4
|
-
module Http
|
|
5
|
-
module Headers
|
|
6
|
-
HTTP_ACCEPT_VERSION = 'HTTP_ACCEPT_VERSION'
|
|
7
|
-
HTTP_ACCEPT = 'HTTP_ACCEPT'
|
|
8
|
-
HTTP_TRANSFER_ENCODING = 'HTTP_TRANSFER_ENCODING'
|
|
9
|
-
HTTP_VERSION = 'HTTP_VERSION'
|
|
10
|
-
|
|
11
|
-
ALLOW = 'Allow'
|
|
12
|
-
LOCATION = 'Location'
|
|
13
|
-
X_CASCADE = 'X-Cascade'
|
|
14
|
-
TRANSFER_ENCODING = 'Transfer-Encoding'
|
|
15
|
-
|
|
16
|
-
SUPPORTED_METHODS = [
|
|
17
|
-
Rack::GET,
|
|
18
|
-
Rack::POST,
|
|
19
|
-
Rack::PUT,
|
|
20
|
-
Rack::PATCH,
|
|
21
|
-
Rack::DELETE,
|
|
22
|
-
Rack::HEAD,
|
|
23
|
-
Rack::OPTIONS
|
|
24
|
-
].freeze
|
|
25
|
-
|
|
26
|
-
SUPPORTED_METHODS_WITHOUT_OPTIONS = (SUPPORTED_METHODS - [Rack::OPTIONS]).freeze
|
|
27
|
-
|
|
28
|
-
HTTP_HEADERS = Grape::Util::Lazy::Object.new do
|
|
29
|
-
common_http_headers = %w[
|
|
30
|
-
Version
|
|
31
|
-
Host
|
|
32
|
-
Connection
|
|
33
|
-
Cache-Control
|
|
34
|
-
Dnt
|
|
35
|
-
Upgrade-Insecure-Requests
|
|
36
|
-
User-Agent
|
|
37
|
-
Sec-Fetch-Dest
|
|
38
|
-
Accept
|
|
39
|
-
Sec-Fetch-Site
|
|
40
|
-
Sec-Fetch-Mode
|
|
41
|
-
Sec-Fetch-User
|
|
42
|
-
Accept-Encoding
|
|
43
|
-
Accept-Language
|
|
44
|
-
Cookie
|
|
45
|
-
].freeze
|
|
46
|
-
common_http_headers.each_with_object({}) do |header, response|
|
|
47
|
-
response["HTTP_#{header.upcase.tr('-', '_')}"] = header
|
|
48
|
-
end.freeze
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def self.find_supported_method(route_method)
|
|
52
|
-
Grape::Http::Headers::SUPPORTED_METHODS.detect { |supported_method| supported_method.casecmp(route_method).zero? }
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
data/lib/grape/parser/jsonapi.rb
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Based on https://github.com/HornsAndHooves/lazy_object
|
|
4
|
-
|
|
5
|
-
module Grape
|
|
6
|
-
module Util
|
|
7
|
-
module Lazy
|
|
8
|
-
class Object < BasicObject
|
|
9
|
-
attr_reader :callable
|
|
10
|
-
|
|
11
|
-
def initialize(&callable)
|
|
12
|
-
@callable = callable
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def __target_object__
|
|
16
|
-
@__target_object__ ||= callable.call
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def ==(other)
|
|
20
|
-
__target_object__ == other
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def !=(other)
|
|
24
|
-
__target_object__ != other
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def !
|
|
28
|
-
!__target_object__
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def method_missing(method_name, *args, &block)
|
|
32
|
-
if __target_object__.respond_to?(method_name)
|
|
33
|
-
__target_object__.send(method_name, *args, &block)
|
|
34
|
-
else
|
|
35
|
-
super
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def respond_to_missing?(method_name, include_priv = false)
|
|
40
|
-
__target_object__.respond_to?(method_name, include_priv)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Grape
|
|
4
|
-
module Util
|
|
5
|
-
module StrictHashConfiguration
|
|
6
|
-
extend ActiveSupport::Concern
|
|
7
|
-
|
|
8
|
-
module DSL
|
|
9
|
-
extend ActiveSupport::Concern
|
|
10
|
-
|
|
11
|
-
module ClassMethods
|
|
12
|
-
def settings
|
|
13
|
-
config_context.to_hash
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def configure(&block)
|
|
17
|
-
config_context.instance_exec(&block)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
class SettingsContainer
|
|
23
|
-
def initialize
|
|
24
|
-
@settings = {}
|
|
25
|
-
@contexts = {}
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def to_hash
|
|
29
|
-
@settings.to_hash
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def self.config_class(*args)
|
|
34
|
-
new_config_class = Class.new(SettingsContainer)
|
|
35
|
-
|
|
36
|
-
args.each do |setting_name|
|
|
37
|
-
if setting_name.respond_to? :values
|
|
38
|
-
nested_settings_methods(setting_name, new_config_class)
|
|
39
|
-
else
|
|
40
|
-
simple_settings_methods(setting_name, new_config_class)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
new_config_class
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def self.simple_settings_methods(setting_name, new_config_class)
|
|
48
|
-
setting_name_sym = setting_name.to_sym
|
|
49
|
-
new_config_class.class_eval do
|
|
50
|
-
define_method setting_name do |new_value|
|
|
51
|
-
@settings[setting_name_sym] = new_value
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def self.nested_settings_methods(setting_name, new_config_class)
|
|
57
|
-
new_config_class.class_eval do
|
|
58
|
-
setting_name.each_pair do |key, value|
|
|
59
|
-
define_method :"#{key}_context" do
|
|
60
|
-
@contexts[key] ||= Grape::Util::StrictHashConfiguration.config_class(*value).new
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
define_method key do |&block|
|
|
64
|
-
send(:"#{key}_context").instance_exec(&block)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
define_method :to_hash do
|
|
69
|
-
@settings.to_hash.merge(
|
|
70
|
-
setting_name.each_key.with_object({}) do |k, merge_hash|
|
|
71
|
-
merge_hash[k] = send(:"#{k}_context").to_hash
|
|
72
|
-
end
|
|
73
|
-
)
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def self.module(*args)
|
|
79
|
-
new_module = Module.new do
|
|
80
|
-
extend ActiveSupport::Concern
|
|
81
|
-
include DSL
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
new_module.tap do |mod|
|
|
85
|
-
class_mod = create_class_mod(args)
|
|
86
|
-
|
|
87
|
-
mod.const_set(:ClassMethods, class_mod)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def self.create_class_mod(args)
|
|
92
|
-
new_module = Module.new do
|
|
93
|
-
def config_context
|
|
94
|
-
@config_context ||= config_class.new
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
new_module.tap do |class_mod|
|
|
99
|
-
new_config_class = config_class(*args)
|
|
100
|
-
|
|
101
|
-
class_mod.send(:define_method, :config_class) do
|
|
102
|
-
@config_class ||= new_config_class
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Grape
|
|
4
|
-
module Validations
|
|
5
|
-
# Documents parameters of an endpoint. If documentation isn't needed (for instance, it is an
|
|
6
|
-
# internal API), the class only cleans up attributes to avoid junk in RAM.
|
|
7
|
-
|
|
8
|
-
class AttributesDoc
|
|
9
|
-
attr_accessor :type, :values
|
|
10
|
-
|
|
11
|
-
# @param api [Grape::API::Instance]
|
|
12
|
-
# @param scope [Validations::ParamsScope]
|
|
13
|
-
def initialize(api, scope)
|
|
14
|
-
@api = api
|
|
15
|
-
@scope = scope
|
|
16
|
-
@type = type
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def extract_details(validations)
|
|
20
|
-
details[:required] = validations.key?(:presence)
|
|
21
|
-
|
|
22
|
-
desc = validations.delete(:desc) || validations.delete(:description)
|
|
23
|
-
|
|
24
|
-
details[:desc] = desc if desc
|
|
25
|
-
|
|
26
|
-
documentation = validations.delete(:documentation)
|
|
27
|
-
|
|
28
|
-
details[:documentation] = documentation if documentation
|
|
29
|
-
|
|
30
|
-
details[:default] = validations[:default] if validations.key?(:default)
|
|
31
|
-
|
|
32
|
-
details[:min_length] = validations[:length][:min] if validations.key?(:length) && validations[:length].key?(:min)
|
|
33
|
-
details[:max_length] = validations[:length][:max] if validations.key?(:length) && validations[:length].key?(:max)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def document(attrs)
|
|
37
|
-
return if @api.namespace_inheritable(:do_not_document)
|
|
38
|
-
|
|
39
|
-
details[:type] = type.to_s if type
|
|
40
|
-
details[:values] = values if values
|
|
41
|
-
|
|
42
|
-
documented_attrs = attrs.each_with_object({}) do |name, memo|
|
|
43
|
-
memo[@scope.full_name(name)] = details
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
@api.namespace_stackable(:params, documented_attrs)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def required
|
|
50
|
-
details[:required]
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
protected
|
|
54
|
-
|
|
55
|
-
def details
|
|
56
|
-
@details ||= {}
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|