grape-swagger 0.20.2 → 0.20.3
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/.rubocop.yml +0 -3
- data/.rubocop_todo.yml +43 -33
- data/.travis.yml +22 -13
- data/CHANGELOG.md +29 -53
- data/Gemfile +1 -1
- data/README.md +24 -24
- data/example/api/endpoints.rb +28 -29
- data/example/api/entities.rb +1 -1
- data/example/config.ru +5 -7
- data/grape-swagger.gemspec +1 -1
- data/lib/grape-swagger.rb +9 -6
- data/lib/grape-swagger/doc_methods.rb +1 -1
- data/lib/grape-swagger/doc_methods/extensions.rb +3 -3
- data/lib/grape-swagger/doc_methods/headers.rb +1 -1
- data/lib/grape-swagger/doc_methods/move_params.rb +25 -16
- data/lib/grape-swagger/doc_methods/operation_id.rb +2 -2
- data/lib/grape-swagger/doc_methods/parse_params.rb +12 -5
- data/lib/grape-swagger/doc_methods/path_string.rb +1 -1
- data/lib/grape-swagger/doc_methods/status_codes.rb +3 -1
- data/lib/grape-swagger/doc_methods/tag_name_description.rb +1 -1
- data/lib/grape-swagger/endpoint.rb +33 -46
- data/lib/grape-swagger/grape/route.rb +16 -0
- data/lib/grape-swagger/version.rb +1 -1
- data/spec/issues/403_versions_spec.rb +158 -0
- data/spec/lib/data_type_spec.rb +9 -10
- data/spec/lib/endpoint_spec.rb +1 -2
- data/spec/lib/extensions_spec.rb +44 -40
- data/spec/lib/move_params_spec.rb +113 -93
- data/spec/lib/operation_id_spec.rb +42 -12
- data/spec/lib/optional_object_spec.rb +3 -4
- data/spec/lib/path_string_spec.rb +2 -2
- data/spec/lib/produces_consumes_spec.rb +64 -53
- data/spec/markdown/redcarpet_adapter_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/api_swagger_v2_result.rb +122 -128
- data/spec/support/namespace_tags.rb +17 -19
- data/spec/support/the_api_entities.rb +1 -3
- data/spec/support/the_paths_definitions.rb +95 -85
- data/spec/swagger_v2/api_swagger_v2_definitions-models_spec.rb +1 -1
- data/spec/swagger_v2/api_swagger_v2_detail_spec.rb +19 -19
- data/spec/swagger_v2/api_swagger_v2_extensions_spec.rb +21 -21
- data/spec/swagger_v2/api_swagger_v2_format-content_type_spec.rb +34 -32
- data/spec/swagger_v2/api_swagger_v2_global_configuration_spec.rb +5 -7
- data/spec/swagger_v2/api_swagger_v2_headers_spec.rb +19 -18
- data/spec/swagger_v2/api_swagger_v2_hide_documentation_path_spec.rb +9 -10
- data/spec/swagger_v2/api_swagger_v2_mounted_spec.rb +21 -24
- data/spec/swagger_v2/api_swagger_v2_param_type_body_nested_spec.rb +90 -92
- data/spec/swagger_v2/api_swagger_v2_param_type_body_spec.rb +54 -54
- data/spec/swagger_v2/api_swagger_v2_param_type_spec.rb +65 -57
- data/spec/swagger_v2/api_swagger_v2_request_params_fix_spec.rb +17 -14
- data/spec/swagger_v2/api_swagger_v2_response_spec.rb +79 -123
- data/spec/swagger_v2/api_swagger_v2_spec.rb +33 -34
- data/spec/swagger_v2/api_swagger_v2_type-format_spec.rb +32 -36
- data/spec/swagger_v2/boolean_params_spec.rb +1 -1
- data/spec/swagger_v2/default_api_spec.rb +26 -29
- data/spec/swagger_v2/description_not_initialized.rb +3 -3
- data/spec/swagger_v2/float_api_spec.rb +1 -1
- data/spec/swagger_v2/form_params_spec.rb +4 -4
- data/spec/swagger_v2/hide_api_spec.rb +48 -51
- data/spec/swagger_v2/host.rb +1 -1
- data/spec/swagger_v2/mounted_target_class_spec.rb +31 -33
- data/spec/swagger_v2/namespace_tags_prefix_spec.rb +23 -21
- data/spec/swagger_v2/namespace_tags_spec.rb +23 -20
- data/spec/swagger_v2/param_type_spec.rb +5 -6
- data/spec/swagger_v2/param_values_spec.rb +31 -37
- data/spec/swagger_v2/params_array_spec.rb +17 -15
- data/spec/swagger_v2/params_hash_spec.rb +17 -15
- data/spec/swagger_v2/params_nested_spec.rb +12 -10
- data/spec/swagger_v2/reference_entity.rb +9 -9
- data/spec/swagger_v2/response_model_spec.rb +58 -62
- data/spec/swagger_v2/simple_mounted_api_spec.rb +179 -147
- metadata +5 -10
- data/spec/params_entity_spec.rb +0 -49
data/example/api/entities.rb
CHANGED
@@ -6,7 +6,7 @@ module Api
|
|
6
6
|
expose :id, documentation: { type: Integer, desc: 'identity of a resource' }
|
7
7
|
expose :x, documentation: { type: Float, desc: 'x-value' }
|
8
8
|
expose :y, documentation: { type: Float, desc: 'y-value' }
|
9
|
-
expose :path, documentation: { type: String, desc: 'the requested resource'}
|
9
|
+
expose :path, documentation: { type: String, desc: 'the requested resource' }
|
10
10
|
|
11
11
|
private
|
12
12
|
|
data/example/config.ru
CHANGED
@@ -31,14 +31,12 @@ class Base < Grape::API
|
|
31
31
|
error_response(message: "Internal server error: #{e}", status: 500)
|
32
32
|
end
|
33
33
|
|
34
|
-
add_swagger_documentation :
|
35
|
-
:
|
36
|
-
:
|
37
|
-
title:
|
38
|
-
description:
|
34
|
+
add_swagger_documentation hide_documentation_path: true,
|
35
|
+
api_version: 'v1',
|
36
|
+
info: {
|
37
|
+
title: 'Horses and Hussars',
|
38
|
+
description: 'Demo app for dev of grape swagger 2.0'
|
39
39
|
}
|
40
|
-
|
41
40
|
end
|
42
41
|
|
43
|
-
|
44
42
|
run Base.new
|
data/grape-swagger.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.summary = 'A simple way to add auto generated documentation to your Grape API that can be displayed with Swagger.'
|
12
12
|
s.license = 'MIT'
|
13
13
|
|
14
|
-
s.add_runtime_dependency 'grape',
|
14
|
+
s.add_runtime_dependency 'grape', '>= 0.12.0'
|
15
15
|
s.add_runtime_dependency 'grape-entity'
|
16
16
|
s.add_runtime_dependency 'awesome_print'
|
17
17
|
|
data/lib/grape-swagger.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
require 'grape'
|
2
|
+
|
3
|
+
require 'grape-swagger/grape/route'
|
4
|
+
|
2
5
|
require 'grape-swagger/version'
|
3
6
|
require 'grape-swagger/endpoint'
|
4
7
|
require 'grape-swagger/errors'
|
@@ -48,8 +51,8 @@ module Grape
|
|
48
51
|
|
49
52
|
def combine_routes(app, doc_klass)
|
50
53
|
app.routes.each do |route|
|
51
|
-
route_path = route.
|
52
|
-
route_match = route_path.split(/^.*?#{route.
|
54
|
+
route_path = route.path
|
55
|
+
route_match = route_path.split(/^.*?#{route.prefix.to_s}/).last
|
53
56
|
next unless route_match
|
54
57
|
route_match = route_match.match('\/([\w|-]*?)[\.\/\(]') || route_match.match('\/([\w|-]*)$')
|
55
58
|
next unless route_match
|
@@ -57,7 +60,7 @@ module Grape
|
|
57
60
|
next if resource.empty?
|
58
61
|
resource.downcase!
|
59
62
|
@target_class.combined_routes[resource] ||= []
|
60
|
-
next if doc_klass.hide_documentation_path && route.
|
63
|
+
next if doc_klass.hide_documentation_path && route.path.match(/#{doc_klass.mount_path}($|\/|\(\.)/)
|
61
64
|
@target_class.combined_routes[resource] << route
|
62
65
|
end
|
63
66
|
end
|
@@ -141,10 +144,10 @@ module Grape
|
|
141
144
|
end
|
142
145
|
|
143
146
|
def route_path_start_with?(route, name)
|
144
|
-
route_prefix = route.
|
145
|
-
route_versioned_prefix = route.
|
147
|
+
route_prefix = route.prefix ? "/#{route.prefix}/#{name}" : "/#{name}"
|
148
|
+
route_versioned_prefix = route.prefix ? "/#{route.prefix}/:version/#{name}" : "/:version/#{name}"
|
146
149
|
|
147
|
-
route.
|
150
|
+
route.path.start_with?(route_prefix, route_versioned_prefix)
|
148
151
|
end
|
149
152
|
|
150
153
|
def standalone_sub_namespaces(name, namespaces)
|
@@ -4,10 +4,10 @@ module GrapeSwagger
|
|
4
4
|
class << self
|
5
5
|
def add(path, definitions, route)
|
6
6
|
@route = route
|
7
|
-
description = route.
|
7
|
+
description = route.settings[:description]
|
8
8
|
add_extension_to(path[method], extension(description)) if description && extended?(description, :x)
|
9
9
|
|
10
|
-
settings = route.
|
10
|
+
settings = route.settings
|
11
11
|
add_extensions_to_path(settings, path) if settings && extended?(settings, :x_path)
|
12
12
|
add_extensions_to_definition(settings, path, definitions) if settings && extended?(settings, :x_def)
|
13
13
|
end
|
@@ -67,7 +67,7 @@ module GrapeSwagger
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def method
|
70
|
-
@route.
|
70
|
+
@route.request_method.downcase.to_sym
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
@@ -4,8 +4,12 @@ module GrapeSwagger
|
|
4
4
|
class << self
|
5
5
|
def to_definition(paths, definitions)
|
6
6
|
@definitions = definitions
|
7
|
-
|
8
|
-
|
7
|
+
|
8
|
+
find_post_put(paths) do |method_definition|
|
9
|
+
verb = method_definition.keys.first
|
10
|
+
method_object = method_definition[verb]
|
11
|
+
|
12
|
+
find_definition_and_params(method_object, verb)
|
9
13
|
end
|
10
14
|
end
|
11
15
|
|
@@ -16,25 +20,29 @@ module GrapeSwagger
|
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
|
-
def find_definition_and_params(path)
|
20
|
-
|
21
|
-
params = path[verb][:parameters]
|
23
|
+
def find_definition_and_params(path, verb)
|
24
|
+
params = path[:parameters]
|
22
25
|
|
23
|
-
|
24
|
-
|
26
|
+
return if params.nil?
|
27
|
+
return unless should_move?(params)
|
25
28
|
|
26
|
-
|
29
|
+
unify!(params)
|
27
30
|
|
28
|
-
|
29
|
-
|
30
|
-
referenced_definition = parse_model(response[:schema]['$ref'])
|
31
|
+
status_code = GrapeSwagger::DocMethods::StatusCodes.get[verb.to_sym][:code]
|
32
|
+
response = path[:responses][status_code]
|
31
33
|
|
34
|
+
if response[:schema] && response[:schema]['$ref']
|
35
|
+
referenced_definition = parse_model(response[:schema]['$ref'])
|
32
36
|
name = build_definition(referenced_definition, verb)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
path[verb][:parameters] << build_body_parameter(response.dup, name)
|
37
|
+
else
|
38
|
+
referenced_definition = path[:operationId]
|
39
|
+
name = build_definition(referenced_definition)
|
37
40
|
end
|
41
|
+
|
42
|
+
move_params_to_new(name, params)
|
43
|
+
|
44
|
+
@definitions[name][:description] = path[:description]
|
45
|
+
path[:parameters] << build_body_parameter(response.dup, name)
|
38
46
|
end
|
39
47
|
|
40
48
|
def move_params_to_new(name, params)
|
@@ -88,9 +96,10 @@ module GrapeSwagger
|
|
88
96
|
private
|
89
97
|
|
90
98
|
def build_body_parameter(response, name = false)
|
99
|
+
entity = response[:schema] ? parse_model(response[:schema]['$ref']) : name
|
91
100
|
body_param = {}
|
92
101
|
body_param.tap do |x|
|
93
|
-
x[:name] =
|
102
|
+
x[:name] = entity
|
94
103
|
x[:in] = 'body'
|
95
104
|
x[:required] = true
|
96
105
|
x[:schema] = { '$ref' => response[:schema]['$ref'] } unless name
|
@@ -2,8 +2,8 @@ module GrapeSwagger
|
|
2
2
|
module DocMethods
|
3
3
|
class OperationId
|
4
4
|
class << self
|
5
|
-
def build(
|
6
|
-
verb =
|
5
|
+
def build(route, path = nil)
|
6
|
+
verb = route.request_method.to_s.downcase
|
7
7
|
|
8
8
|
operation = manipulate(path) unless path.nil?
|
9
9
|
|
@@ -3,8 +3,8 @@ module GrapeSwagger
|
|
3
3
|
class ParseParams
|
4
4
|
class << self
|
5
5
|
def call(param, settings, route)
|
6
|
-
path = route.
|
7
|
-
method = route.
|
6
|
+
path = route.path
|
7
|
+
method = route.request_method
|
8
8
|
|
9
9
|
data_type = GrapeSwagger::DocMethods::DataType.call(settings)
|
10
10
|
additional_documentation = settings[:documentation]
|
@@ -14,12 +14,14 @@ module GrapeSwagger
|
|
14
14
|
|
15
15
|
value_type = settings.merge(data_type: data_type, path: path, param_name: param, method: method)
|
16
16
|
|
17
|
+
# required properties
|
17
18
|
@parsed_param = {
|
18
|
-
in:
|
19
|
-
name:
|
20
|
-
description: settings[:desc] || settings[:description] || nil
|
19
|
+
in: param_type(value_type),
|
20
|
+
name: settings[:full_name] || param
|
21
21
|
}
|
22
22
|
|
23
|
+
# optional properties
|
24
|
+
document_description(settings)
|
23
25
|
document_type_and_format(data_type)
|
24
26
|
document_array_param(value_type)
|
25
27
|
document_default_value(settings)
|
@@ -31,6 +33,11 @@ module GrapeSwagger
|
|
31
33
|
|
32
34
|
private
|
33
35
|
|
36
|
+
def document_description(settings)
|
37
|
+
description = settings[:desc] || settings[:description]
|
38
|
+
@parsed_param[:description] = description if description
|
39
|
+
end
|
40
|
+
|
34
41
|
def document_required(settings)
|
35
42
|
@parsed_param[:required] = settings[:required] || false
|
36
43
|
@parsed_param[:required] = true if @parsed_param[:in] == 'path'
|
@@ -14,7 +14,7 @@ module GrapeSwagger
|
|
14
14
|
item = path.gsub(%r{/{(.+?)}}, '').split('/').last.singularize.underscore.camelize || 'Item'
|
15
15
|
|
16
16
|
if options[:version] && options[:add_version]
|
17
|
-
path.sub!('{version}', options[:version])
|
17
|
+
path.sub!('{version}', options[:version].to_s)
|
18
18
|
else
|
19
19
|
path.sub!('/{version}', '')
|
20
20
|
end
|
@@ -8,7 +8,9 @@ module GrapeSwagger
|
|
8
8
|
post: { code: 201, message: 'created {item}' },
|
9
9
|
put: { code: 200, message: 'updated {item}' },
|
10
10
|
patch: { code: 200, message: 'patched {item}' },
|
11
|
-
delete: { code: 200, message: 'deleted {item}' }
|
11
|
+
delete: { code: 200, message: 'deleted {item}' },
|
12
|
+
head: { code: 200, message: 'head {item}' },
|
13
|
+
options: { code: 200, message: 'option {item}' }
|
12
14
|
}
|
13
15
|
end
|
14
16
|
end
|
@@ -8,7 +8,7 @@ module GrapeSwagger
|
|
8
8
|
namespace_routes = target_class.combined_namespace_routes
|
9
9
|
|
10
10
|
namespace_routes.keys.map do |local_route|
|
11
|
-
next if namespace_routes[local_route].map
|
11
|
+
next if namespace_routes[local_route].map { |route| route.options[:hidden] }.all? { |value| value.respond_to?(:call) ? value.call : value }
|
12
12
|
|
13
13
|
original_namespace_name = target_class.combined_namespace_identifiers.key?(local_route) ? target_class.combined_namespace_identifiers[local_route] : local_route
|
14
14
|
description = namespaces[original_namespace_name] && namespaces[original_namespace_name].options[:desc]
|
@@ -20,7 +20,7 @@ module Grape
|
|
20
20
|
# required keys for SwaggerObject
|
21
21
|
def swagger_object(target_class, request, options)
|
22
22
|
{
|
23
|
-
info: info_object(options[:info].merge(version: options[:
|
23
|
+
info: info_object(options[:info].merge(version: options[:doc_version])),
|
24
24
|
swagger: '2.0',
|
25
25
|
produces: content_types_for(target_class),
|
26
26
|
authorizations: options[:authorizations],
|
@@ -86,19 +86,18 @@ module Grape
|
|
86
86
|
routes.each do |route|
|
87
87
|
next if hidden?(route)
|
88
88
|
|
89
|
-
@item, path = GrapeSwagger::DocMethods::PathString.build(route.
|
90
|
-
@entity = route.
|
89
|
+
@item, path = GrapeSwagger::DocMethods::PathString.build(route.path, options)
|
90
|
+
@entity = route.entity || route.options[:success]
|
91
91
|
|
92
|
-
|
93
|
-
request_params = method_object(route, options, path)
|
92
|
+
verb, method_object = method_object(route, options, path)
|
94
93
|
|
95
|
-
if @paths.key?(path.
|
96
|
-
@paths[path.
|
94
|
+
if @paths.key?(path.to_s)
|
95
|
+
@paths[path.to_s][verb] = method_object
|
97
96
|
else
|
98
|
-
@paths[path.
|
97
|
+
@paths[path.to_s] = { verb => method_object }
|
99
98
|
end
|
100
99
|
|
101
|
-
GrapeSwagger::DocMethods::Extensions.add(@paths[path.
|
100
|
+
GrapeSwagger::DocMethods::Extensions.add(@paths[path.to_s], @definitions, route)
|
102
101
|
end
|
103
102
|
end
|
104
103
|
|
@@ -109,16 +108,18 @@ module Grape
|
|
109
108
|
method[:consumes] = consumes_object(route, options[:format])
|
110
109
|
method[:parameters] = params_object(route)
|
111
110
|
method[:responses] = response_object(route, options[:markdown])
|
112
|
-
method[:tags] = tag_object(route, options[:version])
|
113
|
-
method[:operationId] = GrapeSwagger::DocMethods::OperationId.build(route
|
111
|
+
method[:tags] = tag_object(route, options[:version].to_s)
|
112
|
+
method[:operationId] = GrapeSwagger::DocMethods::OperationId.build(route, path)
|
114
113
|
method.delete_if { |_, value| value.blank? }
|
114
|
+
|
115
|
+
[route.request_method.downcase.to_sym, method]
|
115
116
|
end
|
116
117
|
|
117
118
|
def description_object(route, markdown)
|
118
|
-
description = route.
|
119
|
-
description = route.
|
119
|
+
description = route.options[:desc] if route.options.key?(:desc)
|
120
|
+
description = route.description if route.description.present?
|
120
121
|
description = "# #{description} " if markdown
|
121
|
-
description += "\n #{route.
|
122
|
+
description += "\n #{route.options[:detail]}" if route.options.key?(:detail)
|
122
123
|
description = markdown.markdown(description.to_s).chomp if markdown
|
123
124
|
|
124
125
|
description
|
@@ -127,8 +128,8 @@ module Grape
|
|
127
128
|
def produces_object(route, format)
|
128
129
|
mime_types = GrapeSwagger::DocMethods::ProducesConsumes.call(format)
|
129
130
|
|
130
|
-
route_mime_types = [:
|
131
|
-
possible = route.
|
131
|
+
route_mime_types = [:formats, :content_types, :produces].map do |producer|
|
132
|
+
possible = route.options[producer]
|
132
133
|
GrapeSwagger::DocMethods::ProducesConsumes.call(possible) if possible.present?
|
133
134
|
end.flatten.compact.uniq
|
134
135
|
|
@@ -136,8 +137,8 @@ module Grape
|
|
136
137
|
end
|
137
138
|
|
138
139
|
def consumes_object(route, format)
|
139
|
-
method = route.
|
140
|
-
format = route.
|
140
|
+
method = route.request_method.downcase.to_sym
|
141
|
+
format = route.settings[:description][:consumes] if route.settings[:description] && route.settings[:description][:consumes]
|
141
142
|
mime_types = GrapeSwagger::DocMethods::ProducesConsumes.call(format) if [:post, :put].include?(method)
|
142
143
|
|
143
144
|
mime_types
|
@@ -152,11 +153,11 @@ module Grape
|
|
152
153
|
end
|
153
154
|
|
154
155
|
def response_object(route, markdown)
|
155
|
-
default_code = GrapeSwagger::DocMethods::StatusCodes.get[route.
|
156
|
+
default_code = GrapeSwagger::DocMethods::StatusCodes.get[route.request_method.downcase.to_sym]
|
156
157
|
default_code[:model] = @entity if @entity
|
157
|
-
default_code[:message] = route.
|
158
|
+
default_code[:message] = route.description || default_code[:message].sub('{item}', @item)
|
158
159
|
|
159
|
-
codes = [default_code] + (route.
|
160
|
+
codes = [default_code] + (route.http_codes || route.options[:failure] || [])
|
160
161
|
codes.map! { |x| x.is_a?(Array) ? { code: x[0], message: x[1], model: x[2] } : x }
|
161
162
|
|
162
163
|
codes.each_with_object({}) do |value, memo|
|
@@ -165,7 +166,7 @@ module Grape
|
|
165
166
|
response_model = @item
|
166
167
|
response_model = expose_params_from_model(value[:model]) if value[:model]
|
167
168
|
|
168
|
-
if memo.key?(200) && route.
|
169
|
+
if memo.key?(200) && route.request_method == 'DELETE' && value[:model].nil?
|
169
170
|
memo[204] = memo.delete(200)
|
170
171
|
value[:code] = 204
|
171
172
|
end
|
@@ -176,7 +177,7 @@ module Grape
|
|
176
177
|
|
177
178
|
@definitions[response_model][:description] = description_object(route, markdown)
|
178
179
|
# TODO: proof that the definition exist, if model isn't specified
|
179
|
-
memo[value[:code]][:schema] = if route.
|
180
|
+
memo[value[:code]][:schema] = if route.options[:is_array]
|
180
181
|
{ 'type' => 'array', 'items' => { '$ref' => "#/definitions/#{response_model}" } }
|
181
182
|
else
|
182
183
|
{ '$ref' => "#/definitions/#{response_model}" }
|
@@ -185,35 +186,23 @@ module Grape
|
|
185
186
|
end
|
186
187
|
|
187
188
|
def tag_object(route, version)
|
188
|
-
Array(route.
|
189
|
+
Array(route.path.split('{')[0].split('/').reject(&:empty?).delete_if { |i| ((i == route.prefix.to_s) || (i == version)) }.first)
|
189
190
|
end
|
190
191
|
|
191
192
|
private
|
192
193
|
|
193
194
|
def partition_params(route)
|
194
|
-
declared_params = route.
|
195
|
-
required, exposed = route.
|
196
|
-
required.concat GrapeSwagger::DocMethods::Headers.parse(route) unless route.
|
195
|
+
declared_params = route.settings[:declared_params] if route.settings[:declared_params].present?
|
196
|
+
required, exposed = route.params.partition { |x| x.first.is_a? String }
|
197
|
+
required.concat GrapeSwagger::DocMethods::Headers.parse(route) unless route.headers.nil?
|
197
198
|
default_type(required)
|
198
199
|
default_type(exposed)
|
199
200
|
|
200
|
-
unless declared_params.nil? && route.
|
201
|
+
unless declared_params.nil? && route.headers.nil?
|
201
202
|
request_params = parse_request_params(required)
|
202
203
|
end
|
203
|
-
if !exposed.empty?
|
204
|
-
exposed_params = exposed.each_with_object({}) { |x, memo| memo[x.first] = x.last }
|
205
|
-
properties = parse_response_params(exposed_params)
|
206
|
-
else
|
207
|
-
properties = parse_response_params(required)
|
208
|
-
end
|
209
|
-
|
210
|
-
key = model_name(@entity || @item)
|
211
204
|
|
212
|
-
|
213
|
-
@definitions[key] = { type: 'object', properties: properties } unless @definitions.key?(key)
|
214
|
-
@definitions[key][:properties].merge!(properties) if @definitions.key?(key)
|
215
|
-
end
|
216
|
-
return route.route_params if route.route_params.present? && !route.route_settings[:declared_params].present?
|
205
|
+
return route.params if route.params.present? && !route.settings[:declared_params].present?
|
217
206
|
request_params || {}
|
218
207
|
end
|
219
208
|
|
@@ -306,11 +295,9 @@ module Grape
|
|
306
295
|
end
|
307
296
|
|
308
297
|
def hidden?(route)
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
false
|
298
|
+
route_hidden = route.options[:hidden]
|
299
|
+
route_hidden = route_hidden.call if route_hidden.is_a?(Proc)
|
300
|
+
route_hidden
|
314
301
|
end
|
315
302
|
end
|
316
303
|
end
|