Skip to content

Commit dccbfc3

Browse files
committed
allows custom format
- adds spec for default value
1 parent d78e1ad commit dccbfc3

File tree

3 files changed

+57
-5
lines changed

3 files changed

+57
-5
lines changed

lib/grape-swagger/doc_methods/parse_params.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def call(param, settings, route, definitions)
2020

2121
# optional properties
2222
document_description(settings)
23-
document_type_and_format(data_type)
23+
document_type_and_format(settings, data_type)
2424
document_array_param(value_type, definitions) if value_type[:is_array]
2525
document_default_value(settings)
2626
document_range_values(settings)
@@ -51,13 +51,14 @@ def document_default_value(settings)
5151
@parsed_param[:default] = settings[:default] if settings[:default].present?
5252
end
5353

54-
def document_type_and_format(data_type)
54+
def document_type_and_format(settings, data_type)
5555
if DataType.primitive?(data_type)
5656
data = DataType.mapping(data_type)
5757
@parsed_param[:type], @parsed_param[:format] = data
5858
else
5959
@parsed_param[:type] = data_type
6060
end
61+
@parsed_param[:format] = settings[:format] if settings[:format].present?
6162
end
6263

6364
def document_array_param(value_type, definitions)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
require 'spec_helper'
2+
3+
describe '#542 array of type in post params' do
4+
let(:app) do
5+
Class.new(Grape::API) do
6+
namespace :issue_532 do
7+
params do
8+
requires :logs, type: String, documentation: { format: 'log' }
9+
optional :phone_number, type: Integer, documentation: { format: 'phone_number' }
10+
end
11+
12+
post do
13+
present params
14+
end
15+
end
16+
17+
add_swagger_documentation format: :json
18+
end
19+
end
20+
21+
subject do
22+
get '/swagger_doc'
23+
JSON.parse(last_response.body)
24+
end
25+
26+
let(:parameters) { subject['paths']['/issue_532']['post']['parameters'] }
27+
28+
specify do
29+
expect(parameters).to eql(
30+
[
31+
{ 'in' => 'formData', 'name' => 'logs', 'type' => 'string', 'format' => 'log', 'required' => true },
32+
{ 'in' => 'formData', 'name' => 'phone_number', 'type' => 'integer', 'format' => 'phone_number', 'required' => false }
33+
]
34+
)
35+
end
36+
end

spec/issues/537_enum_values_spec.rb

+18-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
Class.new(Grape::API) do
66
namespace :issue_539 do
77
class Spec < Grape::Entity
8-
expose :test_property, documentation: { values: [:foo, :bar] }
8+
expose :enum_property, documentation: { values: [:foo, :bar] }
9+
expose :enum_property_default, documentation: { values: %w(a b c), default: 'c' }
10+
expose :own_format, documentation: { format: 'log' }
911
end
1012

1113
desc 'create account',
@@ -23,10 +25,23 @@ class Spec < Grape::Entity
2325
JSON.parse(last_response.body)
2426
end
2527

26-
let(:property) { subject['definitions']['Spec']['properties']['test_property'] }
27-
28+
let(:property) { subject['definitions']['Spec']['properties']['enum_property'] }
2829
specify do
2930
expect(property).to include 'enum'
3031
expect(property['enum']).to eql %w(foo bar)
3132
end
33+
34+
let(:property_default) { subject['definitions']['Spec']['properties']['enum_property_default'] }
35+
specify do
36+
expect(property_default).to include 'enum'
37+
expect(property_default['enum']).to eql %w(a b c)
38+
expect(property_default).to include 'default'
39+
expect(property_default['default']).to eql 'c'
40+
end
41+
42+
let(:own_format) { subject['definitions']['Spec']['properties']['own_format'] }
43+
specify do
44+
expect(own_format).to include 'format'
45+
expect(own_format['format']).to eql 'log'
46+
end
3247
end

0 commit comments

Comments
 (0)