Set default parameter location based on consumes (#927)
* Set default parameter location based on consumes * fix rubocop warnings and update todos. * fix spec * change rubocop fix * correct PR number in changelog --------- Co-authored-by: Eugene Lim <limzhiweieugene@gmail.com>
This commit is contained in:
parent
953075aa5b
commit
e7856de6d0
|
@ -1,6 +1,6 @@
|
|||
# This configuration was generated by
|
||||
# `rubocop --auto-gen-config`
|
||||
# on 2023-05-20 18:23:47 UTC using RuboCop version 1.51.0.
|
||||
# on 2024-05-07 07:32:56 UTC using RuboCop version 1.63.4.
|
||||
# The point is for the user to remove these configuration records
|
||||
# one by one as the offenses are removed from the code base.
|
||||
# Note that changes in the inspected code, or installation of new
|
||||
|
@ -13,17 +13,17 @@ Gemspec/RequiredRubyVersion:
|
|||
Exclude:
|
||||
- 'grape-swagger.gemspec'
|
||||
|
||||
# Offense count: 32
|
||||
# Offense count: 33
|
||||
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
|
||||
Metrics/AbcSize:
|
||||
Max: 56
|
||||
Max: 59
|
||||
|
||||
# Offense count: 30
|
||||
# Offense count: 32
|
||||
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
|
||||
Metrics/MethodLength:
|
||||
Max: 28
|
||||
|
||||
# Offense count: 8
|
||||
# Offense count: 9
|
||||
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
||||
Metrics/PerceivedComplexity:
|
||||
Max: 16
|
||||
|
@ -35,6 +35,7 @@ Style/ClassVars:
|
|||
|
||||
# Offense count: 1
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
# Configuration parameters: AllowedReceivers.
|
||||
Style/CollectionCompact:
|
||||
Exclude:
|
||||
- 'lib/grape-swagger/endpoint.rb'
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#### Features
|
||||
|
||||
* [#927](https://github.com/ruby-grape/grape-swagger/pull/927): Set default parameter location based on consumes - [@spaceraccoon](https://github.com/spaceraccoon)
|
||||
* Your contribution here.
|
||||
|
||||
#### Fixes
|
||||
|
|
|
@ -4,7 +4,7 @@ module GrapeSwagger
|
|||
module DocMethods
|
||||
class ParseParams
|
||||
class << self
|
||||
def call(param, settings, path, route, definitions)
|
||||
def call(param, settings, path, route, definitions, consumes) # rubocop:disable Metrics/ParameterLists
|
||||
method = route.request_method
|
||||
additional_documentation = settings.fetch(:documentation, {})
|
||||
settings.merge!(additional_documentation)
|
||||
|
@ -14,7 +14,7 @@ module GrapeSwagger
|
|||
|
||||
# required properties
|
||||
@parsed_param = {
|
||||
in: param_type(value_type),
|
||||
in: param_type(value_type, consumes),
|
||||
name: settings[:full_name] || param
|
||||
}
|
||||
|
||||
|
@ -148,14 +148,18 @@ module GrapeSwagger
|
|||
@parsed_param[:example] = example if example
|
||||
end
|
||||
|
||||
def param_type(value_type)
|
||||
def param_type(value_type, consumes)
|
||||
param_type = value_type[:param_type] || value_type[:in]
|
||||
if value_type[:path].include?("{#{value_type[:param_name]}}")
|
||||
'path'
|
||||
elsif param_type
|
||||
param_type
|
||||
elsif %w[POST PUT PATCH].include?(value_type[:method])
|
||||
DataType.request_primitive?(value_type[:data_type]) ? 'formData' : 'body'
|
||||
if consumes.include?('application/x-www-form-urlencoded') || consumes.include?('multipart/form-data')
|
||||
'formData'
|
||||
else
|
||||
'body'
|
||||
end
|
||||
else
|
||||
'query'
|
||||
end
|
||||
|
|
|
@ -119,7 +119,7 @@ module Grape
|
|||
method[:description] = description_object(route)
|
||||
method[:produces] = produces_object(route, options[:produces] || options[:format])
|
||||
method[:consumes] = consumes_object(route, options[:consumes] || options[:format])
|
||||
method[:parameters] = params_object(route, options, path)
|
||||
method[:parameters] = params_object(route, options, path, method[:consumes])
|
||||
method[:security] = security_object(route)
|
||||
method[:responses] = response_object(route, options)
|
||||
method[:tags] = route.options.fetch(:tags, tag_object(route, path))
|
||||
|
@ -175,7 +175,7 @@ module Grape
|
|||
GrapeSwagger::DocMethods::ProducesConsumes.call(route.settings.dig(:description, :consumes) || format)
|
||||
end
|
||||
|
||||
def params_object(route, options, path)
|
||||
def params_object(route, options, path, consumes)
|
||||
parameters = build_request_params(route, options).each_with_object([]) do |(param, value), memo|
|
||||
next if hidden_parameter?(value)
|
||||
|
||||
|
@ -187,7 +187,7 @@ module Grape
|
|||
elsif value[:type]
|
||||
expose_params(value[:type])
|
||||
end
|
||||
memo << GrapeSwagger::DocMethods::ParseParams.call(param, value, path, route, @definitions)
|
||||
memo << GrapeSwagger::DocMethods::ParseParams.call(param, value, path, route, @definitions, consumes)
|
||||
end
|
||||
|
||||
if GrapeSwagger::DocMethods::MoveParams.can_be_moved?(route.request_method, parameters)
|
||||
|
|
|
@ -6,6 +6,10 @@ describe '#532 allow custom format' do
|
|||
let(:app) do
|
||||
Class.new(Grape::API) do
|
||||
namespace :issue_532 do
|
||||
desc 'issue_532' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
|
||||
params do
|
||||
requires :logs, type: String, documentation: { format: 'log' }
|
||||
optional :phone_number, type: Integer, documentation: { format: 'phone_number' }
|
||||
|
|
|
@ -6,7 +6,9 @@ describe '#553 array of type in post/put params' do
|
|||
let(:app) do
|
||||
Class.new(Grape::API) do
|
||||
namespace :in_form_data do
|
||||
desc 'create foo'
|
||||
desc 'create foo' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :guid, type: Array[String]
|
||||
end
|
||||
|
@ -14,7 +16,9 @@ describe '#553 array of type in post/put params' do
|
|||
# your code goes here
|
||||
end
|
||||
|
||||
desc 'put specific foo'
|
||||
desc 'put specific foo' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :id
|
||||
requires :guid, type: Array[String]
|
||||
|
@ -25,7 +29,9 @@ describe '#553 array of type in post/put params' do
|
|||
end
|
||||
|
||||
namespace :in_body do
|
||||
desc 'create foo'
|
||||
desc 'create foo' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :guid, type: Array[String], documentation: { param_type: 'body' }
|
||||
end
|
||||
|
@ -33,7 +39,9 @@ describe '#553 array of type in post/put params' do
|
|||
# your code goes here
|
||||
end
|
||||
|
||||
desc 'put specific foo'
|
||||
desc 'put specific foo' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :id
|
||||
requires :guid, type: Array[String], documentation: { param_type: 'body' }
|
||||
|
|
|
@ -21,6 +21,7 @@ describe '#579 put / post parameters spec' do
|
|||
namespace :implicit do
|
||||
namespace :body_parameter do
|
||||
desc 'update spec',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: BodySpec,
|
||||
params: BodySpec.documentation
|
||||
put ':guid' do
|
||||
|
@ -30,6 +31,7 @@ describe '#579 put / post parameters spec' do
|
|||
|
||||
namespace :form_parameter do
|
||||
desc 'update spec',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Spec,
|
||||
params: Spec.documentation
|
||||
put ':guid' do
|
||||
|
@ -41,6 +43,7 @@ describe '#579 put / post parameters spec' do
|
|||
namespace :explicit do
|
||||
namespace :body_parameter do
|
||||
desc 'update spec',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: BodySpec,
|
||||
params: BodySpec.documentation
|
||||
params do
|
||||
|
@ -53,6 +56,7 @@ describe '#579 put / post parameters spec' do
|
|||
|
||||
namespace :form_parameter do
|
||||
desc 'update spec',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Spec,
|
||||
params: Spec.documentation
|
||||
params do
|
||||
|
@ -68,6 +72,7 @@ describe '#579 put / post parameters spec' do
|
|||
route_param :guid do
|
||||
namespace :body_parameter do
|
||||
desc 'update spec',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: BodySpec,
|
||||
params: BodySpec.documentation
|
||||
put do
|
||||
|
@ -77,6 +82,7 @@ describe '#579 put / post parameters spec' do
|
|||
|
||||
namespace :form_parameter do
|
||||
desc 'update spec',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Spec,
|
||||
params: Spec.documentation
|
||||
put do
|
||||
|
|
|
@ -5,6 +5,9 @@ require 'spec_helper'
|
|||
describe '#605 Group Params as Array' do
|
||||
let(:app) do
|
||||
Class.new(Grape::API) do
|
||||
desc 'array_of_range' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :array_of_range_string, type: [String], values: %w[a b c]
|
||||
requires :array_of_range_integer, type: [Integer], values: [1, 2, 3]
|
||||
|
@ -13,6 +16,9 @@ describe '#605 Group Params as Array' do
|
|||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'array_with_default' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :array_with_default_string, type: [String], default: 'abc'
|
||||
requires :array_with_default_integer, type: Array[Integer], default: 123
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe '#721 set default parameter location based on consumes' do
|
||||
let(:app) do
|
||||
Class.new(Grape::API) do
|
||||
namespace :issue_721 do
|
||||
desc 'create item' do
|
||||
consumes ['application/json']
|
||||
end
|
||||
|
||||
params do
|
||||
requires :logs, type: String
|
||||
optional :phone_number, type: Integer
|
||||
end
|
||||
|
||||
post do
|
||||
present params
|
||||
end
|
||||
|
||||
desc 'modify item' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
requires :logs, type: String
|
||||
optional :phone_number, type: Integer
|
||||
end
|
||||
|
||||
put ':id' do
|
||||
present params
|
||||
end
|
||||
end
|
||||
|
||||
add_swagger_documentation
|
||||
end
|
||||
end
|
||||
|
||||
subject do
|
||||
get '/swagger_doc'
|
||||
JSON.parse(last_response.body)
|
||||
end
|
||||
|
||||
let(:post_parameters) { subject['paths']['/issue_721']['post']['parameters'] }
|
||||
let(:post_schema) { subject['definitions']['postIssue721'] }
|
||||
let(:put_parameters) { subject['paths']['/issue_721/{id}']['put']['parameters'] }
|
||||
|
||||
specify do
|
||||
expect(post_parameters).to eql(
|
||||
[{ 'in' => 'body', 'name' => 'postIssue721', 'required' => true, 'schema' => { '$ref' => '#/definitions/postIssue721' } }]
|
||||
)
|
||||
expect(post_schema).to eql(
|
||||
{ 'description' => 'create item', 'properties' => { 'logs' => { 'type' => 'string' }, 'phone_number' => { 'format' => 'int32', 'type' => 'integer' } }, 'required' => ['logs'], 'type' => 'object' }
|
||||
)
|
||||
puts put_parameters
|
||||
expect(put_parameters).to eql(
|
||||
[{ 'in' => 'path', 'name' => 'id', 'type' => 'integer', 'format' => 'int32', 'required' => true }, { 'in' => 'formData', 'name' => 'logs', 'type' => 'string', 'required' => true }, { 'in' => 'formData', 'name' => 'phone_number', 'type' => 'integer', 'format' => 'int32', 'required' => false }]
|
||||
)
|
||||
end
|
||||
end
|
|
@ -6,6 +6,10 @@ describe '#532 allow custom format' do
|
|||
let(:app) do
|
||||
Class.new(Grape::API) do
|
||||
namespace :issue_784 do
|
||||
desc 'issue_784' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
|
||||
params do
|
||||
requires :logs, type: String, documentation: { format: 'log', x: { name: 'Log' } }
|
||||
optional :phone_number, type: Integer, documentation: { format: 'phone_number', x: { name: 'PhoneNumber' } }
|
||||
|
|
|
@ -6,6 +6,9 @@ describe '#832 array of objects with nested Float/BigDecimal fields' do
|
|||
let(:app) do
|
||||
Class.new(Grape::API) do
|
||||
resource :issue_832 do
|
||||
desc 'issue_832' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :array_param, type: Array do
|
||||
requires :float_param, type: Float
|
||||
|
|
|
@ -234,7 +234,7 @@ RSpec.shared_context 'entity swagger example' do
|
|||
'post' => {
|
||||
'description' => 'This creates Thing.',
|
||||
'produces' => ['application/json'],
|
||||
'consumes' => ['application/json'],
|
||||
'consumes' => ['application/x-www-form-urlencoded'],
|
||||
'parameters' => [
|
||||
{ 'in' => 'formData', 'name' => 'text', 'description' => 'Content of something.', 'type' => 'string', 'required' => true },
|
||||
{ 'in' => 'formData', 'name' => 'links', 'type' => 'array', 'items' => { 'type' => 'string' }, 'required' => true }
|
||||
|
@ -256,7 +256,7 @@ RSpec.shared_context 'entity swagger example' do
|
|||
'put' => {
|
||||
'description' => 'This updates Thing.',
|
||||
'produces' => ['application/json'],
|
||||
'consumes' => ['application/json'],
|
||||
'consumes' => ['application/x-www-form-urlencoded'],
|
||||
'parameters' => [
|
||||
{ 'in' => 'path', 'name' => 'id', 'type' => 'integer', 'format' => 'int32', 'required' => true },
|
||||
{ 'in' => 'formData', 'name' => 'text', 'description' => 'Content of something.', 'type' => 'string', 'required' => false },
|
||||
|
|
|
@ -242,7 +242,7 @@ RSpec.shared_context 'mock swagger example' do
|
|||
'post' => {
|
||||
'description' => 'This creates Thing.',
|
||||
'produces' => ['application/json'],
|
||||
'consumes' => ['application/json'],
|
||||
'consumes' => ['application/x-www-form-urlencoded'],
|
||||
'parameters' => [
|
||||
{ 'in' => 'formData', 'name' => 'text', 'description' => 'Content of something.', 'type' => 'string', 'required' => true },
|
||||
{ 'in' => 'formData', 'name' => 'links', 'type' => 'array', 'items' => { 'type' => 'string' }, 'required' => true }
|
||||
|
@ -264,7 +264,7 @@ RSpec.shared_context 'mock swagger example' do
|
|||
'put' => {
|
||||
'description' => 'This updates Thing.',
|
||||
'produces' => ['application/json'],
|
||||
'consumes' => ['application/json'],
|
||||
'consumes' => ['application/x-www-form-urlencoded'],
|
||||
'parameters' => [
|
||||
{ 'in' => 'path', 'name' => 'id', 'type' => 'integer', 'format' => 'int32', 'required' => true },
|
||||
{ 'in' => 'formData', 'name' => 'text', 'description' => 'Content of something.', 'type' => 'string', 'required' => false },
|
||||
|
|
|
@ -306,7 +306,7 @@ RSpec.shared_context 'representable swagger example' do
|
|||
'post' => {
|
||||
'description' => 'This creates Thing.',
|
||||
'produces' => ['application/json'],
|
||||
'consumes' => ['application/json'],
|
||||
'consumes' => ['application/x-www-form-urlencoded'],
|
||||
'parameters' => [
|
||||
{ 'in' => 'formData', 'name' => 'text', 'description' => 'Content of something.', 'type' => 'string', 'required' => true },
|
||||
{ 'in' => 'formData', 'name' => 'links', 'type' => 'array', 'items' => { 'type' => 'string' }, 'required' => true }
|
||||
|
@ -328,7 +328,7 @@ RSpec.shared_context 'representable swagger example' do
|
|||
'put' => {
|
||||
'description' => 'This updates Thing.',
|
||||
'produces' => ['application/json'],
|
||||
'consumes' => ['application/json'],
|
||||
'consumes' => ['application/x-www-form-urlencoded'],
|
||||
'parameters' => [
|
||||
{ 'in' => 'path', 'name' => 'id', 'type' => 'integer', 'format' => 'int32', 'required' => true },
|
||||
{ 'in' => 'formData', 'name' => 'text', 'description' => 'Content of something.', 'type' => 'string', 'required' => false },
|
||||
|
|
|
@ -14,7 +14,9 @@ describe 'hidden flag enables a single endpoint parameter to be excluded from th
|
|||
end
|
||||
|
||||
namespace :flat_params_endpoint do
|
||||
desc 'This is a endpoint with a flat parameter hierarchy'
|
||||
desc 'This is a endpoint with a flat parameter hierarchy' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :name, type: String, documentation: { desc: 'name' }
|
||||
optional :favourite_color, type: String, documentation: { desc: 'I should not be anywhere', hidden: true }
|
||||
|
@ -28,7 +30,9 @@ describe 'hidden flag enables a single endpoint parameter to be excluded from th
|
|||
end
|
||||
|
||||
namespace :nested_params_endpoint do
|
||||
desc 'This is a endpoint with a nested parameter hierarchy'
|
||||
desc 'This is a endpoint with a nested parameter hierarchy' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
optional :name, type: String, documentation: { desc: 'name' }
|
||||
optional :hidden_attribute, type: Hash do
|
||||
|
@ -47,7 +51,9 @@ describe 'hidden flag enables a single endpoint parameter to be excluded from th
|
|||
end
|
||||
|
||||
namespace :required_param_endpoint do
|
||||
desc 'This endpoint has hidden defined for a required parameter'
|
||||
desc 'This endpoint has hidden defined for a required parameter' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :name, type: String, documentation: { desc: 'name', hidden: true }
|
||||
end
|
||||
|
|
|
@ -12,6 +12,7 @@ describe 'swagger spec v2.0' do
|
|||
|
||||
# Thing stuff
|
||||
desc 'This gets Things.' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
params Entities::Something.documentation
|
||||
http_codes [{ code: 401, message: 'Unauthorized', model: Entities::ApiError }]
|
||||
end
|
||||
|
@ -21,6 +22,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This gets Things.' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
http_codes [
|
||||
{ code: 200, message: 'get Horses', model: Entities::Something },
|
||||
{ code: 401, message: 'HorsesOutError', model: Entities::ApiError }
|
||||
|
@ -32,6 +34,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This gets Thing.' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
http_codes [{ code: 200, message: 'getting a single thing' }, { code: 401, message: 'Unauthorized' }]
|
||||
end
|
||||
params do
|
||||
|
@ -43,6 +46,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This creates Thing.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::Something
|
||||
params do
|
||||
requires :text, type: String, documentation: { type: 'string', desc: 'Content of something.' }
|
||||
|
@ -54,6 +58,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This updates Thing.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::Something
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
|
@ -66,6 +71,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This deletes Thing.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
entity: Entities::Something
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
|
@ -76,6 +82,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'dummy route.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
failure: [{ code: 401, message: 'Unauthorized' }]
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
|
@ -86,6 +93,7 @@ describe 'swagger spec v2.0' do
|
|||
|
||||
namespace :other_thing do
|
||||
desc 'nested route inside namespace',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
entity: Entities::QueryInput,
|
||||
x: {
|
||||
'amazon-apigateway-auth' => { type: 'none' },
|
||||
|
|
|
@ -10,6 +10,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|||
class ParamTypeApi < Grape::API
|
||||
# using `:param_type`
|
||||
desc 'full set of request param types',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::UseResponse
|
||||
params do
|
||||
optional :in_query, type: String, documentation: { param_type: 'query' }
|
||||
|
@ -21,6 +22,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|||
end
|
||||
|
||||
desc 'full set of request param types',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::UseResponse
|
||||
params do
|
||||
requires :in_path, type: Integer
|
||||
|
@ -33,6 +35,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|||
end
|
||||
|
||||
desc 'full set of request param types',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::UseResponse
|
||||
params do
|
||||
optional :in_path, type: Integer
|
||||
|
@ -46,6 +49,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|||
|
||||
# using `:in`
|
||||
desc 'full set of request param types using `:in`',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::UseResponse
|
||||
params do
|
||||
optional :in_query, type: String, documentation: { in: 'query' }
|
||||
|
@ -57,6 +61,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|||
end
|
||||
|
||||
desc 'full set of request param types using `:in`',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::UseResponse
|
||||
params do
|
||||
requires :in_path, type: Integer
|
||||
|
@ -68,7 +73,8 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'full set of request param types using `:in`'
|
||||
desc 'full set of request param types using `:in`',
|
||||
consumes: ['application/x-www-form-urlencoded']
|
||||
params do
|
||||
optional :in_path, type: Integer
|
||||
optional :in_query, type: String, documentation: { in: 'query' }
|
||||
|
@ -81,6 +87,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|||
|
||||
# file
|
||||
desc 'file download',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::UseResponse
|
||||
params do
|
||||
requires :name, type: String
|
||||
|
@ -91,6 +98,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|||
end
|
||||
|
||||
desc 'file upload',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::UseResponse
|
||||
params do
|
||||
requires :name, type: File
|
||||
|
|
|
@ -7,7 +7,9 @@ describe 'additional parameter settings' do
|
|||
module TheApi
|
||||
class RequestParamFix < Grape::API
|
||||
resource :bookings do
|
||||
desc 'Update booking'
|
||||
desc 'Update booking' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
optional :name, type: String
|
||||
end
|
||||
|
@ -15,17 +17,23 @@ describe 'additional parameter settings' do
|
|||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'Get booking details'
|
||||
desc 'Get booking details' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
get ':id' do
|
||||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'Get booking details by access_number'
|
||||
desc 'Get booking details by access_number' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
get '/conf/:access_number' do
|
||||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'Remove booking'
|
||||
desc 'Remove booking' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
delete ':id' do
|
||||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
|
|
@ -11,6 +11,7 @@ describe 'response' do
|
|||
format :json
|
||||
|
||||
desc 'This returns something',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
params: Entities::UseResponse.documentation,
|
||||
failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
|
||||
post '/params_given' do
|
||||
|
@ -18,6 +19,7 @@ describe 'response' do
|
|||
end
|
||||
|
||||
desc 'This returns something',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
entity: Entities::UseResponse,
|
||||
failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
|
||||
get '/entity_response' do
|
||||
|
@ -25,6 +27,7 @@ describe 'response' do
|
|||
end
|
||||
|
||||
desc 'This returns something',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
entity: Entities::UseItemResponseAsType,
|
||||
failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
|
||||
get '/nested_type' do
|
||||
|
@ -32,6 +35,7 @@ describe 'response' do
|
|||
end
|
||||
|
||||
desc 'This returns something',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: [
|
||||
{ code: 200, message: 'Request has succeeded' },
|
||||
{ code: 201, message: 'Successful Operation' },
|
||||
|
@ -102,7 +106,7 @@ describe 'response' do
|
|||
expect(subject['paths']['/params_given']['post']).to eql(
|
||||
'description' => 'This returns something',
|
||||
'produces' => ['application/json'],
|
||||
'consumes' => ['application/json'],
|
||||
'consumes' => ['application/x-www-form-urlencoded'],
|
||||
'parameters' => [
|
||||
{ 'in' => 'formData', 'name' => 'description', 'type' => 'string', 'required' => false },
|
||||
{ 'in' => 'formData', 'name' => '$responses', 'type' => 'array', 'items' => { 'type' => 'string' }, 'required' => false }
|
||||
|
|
|
@ -11,6 +11,7 @@ describe 'swagger spec v2.0' do
|
|||
|
||||
# Thing stuff
|
||||
desc 'This gets Things.' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
params Entities::Something.documentation
|
||||
http_codes [{ code: 401, message: 'Unauthorized', model: Entities::ApiError }]
|
||||
end
|
||||
|
@ -20,6 +21,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This gets Things.' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
http_codes [
|
||||
{ code: 200, message: 'get Horses', model: Entities::Something },
|
||||
{ code: 401, message: 'HorsesOutError', model: Entities::ApiError }
|
||||
|
@ -31,6 +33,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This gets Thing.' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
http_codes [{ code: 200, message: 'getting a single thing' }, { code: 401, message: 'Unauthorized' }]
|
||||
end
|
||||
params do
|
||||
|
@ -42,6 +45,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This creates Thing.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::Something
|
||||
params do
|
||||
requires :text, type: String, documentation: { type: 'string', desc: 'Content of something.' }
|
||||
|
@ -53,6 +57,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This updates Thing.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::Something
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
|
@ -65,6 +70,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'This deletes Thing.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
entity: Entities::Something
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
|
@ -75,6 +81,7 @@ describe 'swagger spec v2.0' do
|
|||
end
|
||||
|
||||
desc 'dummy route.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
failure: [{ code: 401, message: 'Unauthorized' }]
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
|
@ -85,6 +92,7 @@ describe 'swagger spec v2.0' do
|
|||
|
||||
namespace :other_thing do
|
||||
desc 'nested route inside namespace',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
entity: Entities::QueryInput,
|
||||
x: {
|
||||
'amazon-apigateway-auth' => { type: 'none' },
|
||||
|
|
|
@ -28,6 +28,7 @@ describe 'type format settings' do
|
|||
module TheApi
|
||||
class TypeFormatApi < Grape::API
|
||||
desc 'full set of request data types',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
success: Entities::TypedDefinition
|
||||
|
||||
params do
|
||||
|
|
|
@ -7,6 +7,9 @@ describe 'Boolean Params' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'splines' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :a_boolean, type: Grape::API::Boolean
|
||||
optional :another_boolean, type: Grape::API::Boolean, default: false
|
||||
|
|
|
@ -7,6 +7,9 @@ describe 'Float Params' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'splines' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :a_float, type: Float
|
||||
end
|
||||
|
|
|
@ -7,6 +7,9 @@ describe 'Form Params' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'get items' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :name, type: String, desc: 'name of item'
|
||||
end
|
||||
|
@ -14,6 +17,9 @@ describe 'Form Params' do
|
|||
{}
|
||||
end
|
||||
|
||||
desc 'get item' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :id, type: Integer, desc: 'id of item'
|
||||
requires :name, type: String, desc: 'name of item'
|
||||
|
@ -32,6 +38,9 @@ describe 'Form Params' do
|
|||
{}
|
||||
end
|
||||
|
||||
desc 'create item' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :id, type: Integer, desc: 'id of item'
|
||||
requires :name, type: String, desc: 'name of item'
|
||||
|
|
|
@ -7,6 +7,9 @@ describe 'Params Multi Types' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'action' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
if Grape::VERSION < '0.14'
|
||||
requires :input, type: [String, Integer]
|
||||
|
@ -52,7 +55,9 @@ describe 'Params Multi Types' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'Some API', headers: { 'My-Header' => { required: true, description: 'Set this!' } }
|
||||
desc 'Some API',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
headers: { 'My-Header' => { required: true, description: 'Set this!' } }
|
||||
params do
|
||||
if Grape::VERSION < '0.14'
|
||||
requires :input, type: [String, Integer]
|
||||
|
|
|
@ -7,6 +7,9 @@ describe 'Params Types' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'action' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :input, type: String
|
||||
end
|
||||
|
@ -14,6 +17,9 @@ describe 'Params Types' do
|
|||
{ message: 'hi' }
|
||||
end
|
||||
|
||||
desc 'action_with_doc' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :input, type: String, default: '14', documentation: { type: 'email', default: '42' }
|
||||
end
|
||||
|
@ -46,7 +52,9 @@ describe 'Params Types' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'Some API', headers: { 'My-Header' => { required: true, description: 'Set this!' } }
|
||||
desc 'Some API',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
headers: { 'My-Header' => { required: true, description: 'Set this!' } }
|
||||
params do
|
||||
requires :input, type: String
|
||||
end
|
||||
|
|
|
@ -8,6 +8,9 @@ describe 'Convert values to enum or Range' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'plain_array' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :letter, type: String, values: %w[a b c]
|
||||
end
|
||||
|
@ -15,6 +18,9 @@ describe 'Convert values to enum or Range' do
|
|||
{ message: 'hi' }
|
||||
end
|
||||
|
||||
desc 'array_in_proc' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :letter, type: String, values: proc { %w[d e f] }
|
||||
end
|
||||
|
@ -22,6 +28,9 @@ describe 'Convert values to enum or Range' do
|
|||
{ message: 'hi' }
|
||||
end
|
||||
|
||||
desc 'range_letter' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :letter, type: String, values: 'a'..'z'
|
||||
end
|
||||
|
@ -29,6 +38,9 @@ describe 'Convert values to enum or Range' do
|
|||
{ message: 'hi' }
|
||||
end
|
||||
|
||||
desc 'range_integer' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :integer, type: Integer, values: -5..5
|
||||
end
|
||||
|
@ -107,6 +119,9 @@ describe 'Convert values to enum for float range and not arrays inside a proc',
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'non_array_in_proc' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :letter, type: String, values: proc { 'string' }
|
||||
end
|
||||
|
@ -114,6 +129,9 @@ describe 'Convert values to enum for float range and not arrays inside a proc',
|
|||
{ message: 'hi' }
|
||||
end
|
||||
|
||||
desc 'range_float' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :float, type: Float, values: -5.0..5.0
|
||||
end
|
||||
|
|
|
@ -13,6 +13,9 @@ describe 'Group Params as Array' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'groups' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :required_group, type: Array do
|
||||
requires :required_param_1
|
||||
|
@ -23,6 +26,9 @@ describe 'Group Params as Array' do
|
|||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'type_given' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :typed_group, type: Array do
|
||||
requires :id, type: Integer, desc: 'integer given'
|
||||
|
@ -38,6 +44,10 @@ describe 'Group Params as Array' do
|
|||
# as body parameters it would be interpreted a bit different,
|
||||
# cause it could not be distinguished anymore, so this would be translated to one array,
|
||||
# see also next example for the difference
|
||||
desc 'array_of_type' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
|
||||
params do
|
||||
requires :array_of_string, type: Array[String], documentation: { param_type: 'body', desc: 'nested array of strings', example: %w[a b] }
|
||||
requires :array_of_integer, type: Array[Integer], documentation: { param_type: 'body', desc: 'nested array of integers' }
|
||||
|
@ -47,6 +57,10 @@ describe 'Group Params as Array' do
|
|||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'object_and_array' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
|
||||
params do
|
||||
requires :array_of_string, type: Array[String], documentation: { param_type: 'body', desc: 'array of strings' }
|
||||
requires :integer_value, type: Integer, documentation: { param_type: 'body', desc: 'integer value' }
|
||||
|
@ -56,6 +70,10 @@ describe 'Group Params as Array' do
|
|||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'array_of_type_in_form' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
|
||||
params do
|
||||
requires :array_of_string, type: Array[String]
|
||||
requires :array_of_integer, type: Array[Integer]
|
||||
|
@ -65,6 +83,10 @@ describe 'Group Params as Array' do
|
|||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'array_of_entities' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
|
||||
params do
|
||||
requires :array_of_entities, type: Array[Entities::ApiError]
|
||||
end
|
||||
|
@ -120,6 +142,7 @@ describe 'Group Params as Array' do
|
|||
specify do
|
||||
expect(subject['definitions']['postArrayOfType']).to eql(
|
||||
'type' => 'object',
|
||||
'description' => 'array_of_type',
|
||||
'properties' => {
|
||||
'array_of_string' => {
|
||||
'items' => { 'type' => 'string' }, 'type' => 'array', 'description' => 'nested array of strings', 'example' => %w[a b]
|
||||
|
|
|
@ -7,6 +7,9 @@ describe 'Group Params as Hash' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'use groups' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :required_group, type: Hash do
|
||||
requires :required_param_1
|
||||
|
@ -17,6 +20,9 @@ describe 'Group Params as Hash' do
|
|||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'use given type' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :typed_group, type: Hash do
|
||||
requires :id, type: Integer, desc: 'integer given'
|
||||
|
|
|
@ -10,6 +10,9 @@ describe 'nested group params' do
|
|||
Class.new(Grape::API) do
|
||||
format :json
|
||||
|
||||
desc 'nested array' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :a_array, type: Array do
|
||||
requires :param_1, type: Integer
|
||||
|
@ -26,6 +29,9 @@ describe 'nested group params' do
|
|||
{ 'declared_params' => declared(params) }
|
||||
end
|
||||
|
||||
desc 'nested hash' do
|
||||
consumes ['application/x-www-form-urlencoded']
|
||||
end
|
||||
params do
|
||||
requires :a_hash, type: Hash do
|
||||
requires :param_1, type: Integer
|
||||
|
|
|
@ -9,12 +9,14 @@ describe 'a simple mounted api' do
|
|||
# rubocop:enable Lint/EmptyClass
|
||||
|
||||
class SimpleMountedApi < Grape::API
|
||||
desc 'Document root'
|
||||
desc 'Document root',
|
||||
consumes: ['application/x-www-form-urlencoded']
|
||||
get do
|
||||
{ message: 'hi' }
|
||||
end
|
||||
|
||||
desc 'This gets something.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
notes: '_test_'
|
||||
|
||||
get '/simple' do
|
||||
|
@ -22,6 +24,7 @@ describe 'a simple mounted api' do
|
|||
end
|
||||
|
||||
desc 'This gets something for URL using - separator.',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
notes: '_test_'
|
||||
|
||||
get '/simple-test' do
|
||||
|
@ -37,6 +40,7 @@ describe 'a simple mounted api' do
|
|||
end
|
||||
|
||||
desc 'this gets something else',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
headers: {
|
||||
'XAuthToken' => { description: 'A required header.', required: true },
|
||||
'XOtherHeader' => { description: 'An optional header.', required: false }
|
||||
|
@ -51,6 +55,7 @@ describe 'a simple mounted api' do
|
|||
end
|
||||
|
||||
desc 'this takes an array of parameters',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
params: {
|
||||
'items[]' => { description: 'array of items', is_array: true }
|
||||
}
|
||||
|
@ -60,6 +65,7 @@ describe 'a simple mounted api' do
|
|||
end
|
||||
|
||||
desc 'this uses a custom parameter',
|
||||
consumes: ['application/x-www-form-urlencoded'],
|
||||
params: {
|
||||
'custom' => { type: CustomType, description: 'array of items', is_array: true }
|
||||
}
|
||||
|
@ -166,7 +172,7 @@ describe 'a simple mounted api' do
|
|||
'post' => {
|
||||
'description' => 'this takes an array of parameters',
|
||||
'produces' => ['application/json'],
|
||||
'consumes' => ['application/json'],
|
||||
'consumes' => ['application/x-www-form-urlencoded'],
|
||||
'parameters' => [{ 'in' => 'formData', 'name' => 'items[]', 'description' => 'array of items', 'required' => false, 'type' => 'array', 'items' => { 'type' => 'string' } }],
|
||||
'tags' => ['items'],
|
||||
'operationId' => 'postItems',
|
||||
|
@ -290,7 +296,7 @@ describe 'a simple mounted api' do
|
|||
'post' => {
|
||||
'description' => 'this takes an array of parameters',
|
||||
'produces' => ['application/json'],
|
||||
'consumes' => ['application/json'],
|
||||
'consumes' => ['application/x-www-form-urlencoded'],
|
||||
'parameters' => [{ 'in' => 'formData', 'name' => 'items[]', 'description' => 'array of items', 'required' => false, 'type' => 'array', 'items' => { 'type' => 'string' } }],
|
||||
'tags' => ['items'],
|
||||
'operationId' => 'postItems',
|
||||
|
|
Loading…
Reference in New Issue