Skip to content

Commit 57ac313

Browse files
committed
accepts string as entity
- adds changelog entry
1 parent 7d405ff commit 57ac313

12 files changed

+71
-30
lines changed

.rubocop_todo.yml

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ Lint/UselessAssignment:
2525
Metrics/AbcSize:
2626
Max: 56
2727

28+
Metrics/BlockLength:
29+
Max: 165
30+
2831
# Offense count: 3
2932
# Configuration parameters: CountComments.
3033
Metrics/ClassLength:
@@ -74,6 +77,9 @@ Style/FileName:
7477
- 'spec/swagger_v2/api_swagger_v2_type-format_spec.rb'
7578
- 'spec/swagger_v2/grape-swagger_spec.rb'
7679

80+
Style/FrozenStringLiteralComment:
81+
Enabled: false
82+
7783
# Offense count: 3
7884
# Cop supports --auto-correct.
7985
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#### Fixes
1212

13+
* [#527](https://github.com/ruby-grape/grape-swagger/pull/527): Accepts string as entity - [@LeFnord](https://github.com/LeFnord).
1314
* [#515](https://github.com/ruby-grape/grape-swagger/pull/515): Removes limit on model names - [@LeFnord](https://github.com/LeFnord).
1415
* [#511](https://github.com/ruby-grape/grape-swagger/pull/511): Fix incorrect data type linking for request params of entity types - [@serggl](https://github.com/serggl).
1516
* Your contribution here.

Gemfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ source 'http://rubygems.org'
22

33
gemspec
44

5-
case version = ENV['GRAPE_VERSION'] || '~> 0.17.0'
5+
case version = ENV['GRAPE_VERSION'] || '~> 0.18'
66
when 'HEAD'
77
gem 'grape', github: 'ruby-grape/grape'
88
else

grape-swagger.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
2020
s.add_development_dependency 'bundler'
2121
s.add_development_dependency 'rack-test'
2222
s.add_development_dependency 'rack-cors'
23-
s.add_development_dependency 'rubocop', '0.40.0'
23+
s.add_development_dependency 'rubocop' # , '0.40.0'
2424
s.add_development_dependency 'kramdown'
2525
s.add_development_dependency 'redcarpet' unless RUBY_PLATFORM.eql?('java') || RUBY_ENGINE.eql?('rbx')
2626
s.add_development_dependency 'rouge' unless RUBY_PLATFORM.eql?('java') || RUBY_ENGINE.eql?('rbx')

lib/grape-swagger/doc_methods/optional_object.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def build(key, options, request = nil)
1212
end
1313

1414
def evaluate(key, options, request)
15-
options[key].arity == 0 ? options[key].call : options[key].call(request)
15+
options[key].arity.zero? ? options[key].call : options[key].call(request)
1616
end
1717

1818
def default_values

lib/grape-swagger/doc_methods/parse_params.rb

+18-20
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def call(param, settings, route, definitions)
2121
# optional properties
2222
document_description(settings)
2323
document_type_and_format(data_type)
24-
document_array_param(value_type, definitions)
24+
document_array_param(value_type, definitions) if value_type[:is_array]
2525
document_default_value(settings)
2626
document_range_values(settings)
2727
document_required(settings)
@@ -61,27 +61,25 @@ def document_type_and_format(data_type)
6161
end
6262

6363
def document_array_param(value_type, definitions)
64-
if value_type[:is_array]
65-
if value_type[:documentation].present?
66-
param_type = value_type[:documentation][:param_type]
67-
doc_type = value_type[:documentation][:type]
68-
type = GrapeSwagger::DocMethods::DataType.mapping(doc_type) if doc_type && !DataType.request_primitive?(doc_type)
69-
collection_format = value_type[:documentation][:collectionFormat]
70-
end
71-
72-
array_items = {}
73-
if definitions[value_type[:data_type]]
74-
array_items['$ref'] = "#/definitions/#{@parsed_param[:type]}"
75-
else
76-
array_items[:type] = type || @parsed_param[:type]
77-
end
78-
array_items[:format] = @parsed_param.delete(:format) if @parsed_param[:format]
64+
if value_type[:documentation].present?
65+
param_type = value_type[:documentation][:param_type]
66+
doc_type = value_type[:documentation][:type]
67+
type = GrapeSwagger::DocMethods::DataType.mapping(doc_type) if doc_type && !DataType.request_primitive?(doc_type)
68+
collection_format = value_type[:documentation][:collectionFormat]
69+
end
7970

80-
@parsed_param[:in] = param_type || 'formData'
81-
@parsed_param[:items] = array_items
82-
@parsed_param[:type] = 'array'
83-
@parsed_param[:collectionFormat] = collection_format if %w(csv ssv tsv pipes multi).include?(collection_format)
71+
array_items = {}
72+
if definitions[value_type[:data_type]]
73+
array_items['$ref'] = "#/definitions/#{@parsed_param[:type]}"
74+
else
75+
array_items[:type] = type || @parsed_param[:type]
8476
end
77+
array_items[:format] = @parsed_param.delete(:format) if @parsed_param[:format]
78+
79+
@parsed_param[:in] = param_type || 'formData'
80+
@parsed_param[:items] = array_items
81+
@parsed_param[:type] = 'array'
82+
@parsed_param[:collectionFormat] = collection_format if %w(csv ssv tsv pipes multi).include?(collection_format)
8583
end
8684

8785
def param_type(value_type)

lib/grape-swagger/endpoint.rb

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# frozen_string_literal: true
2-
31
require 'active_support'
42
require 'active_support/core_ext/string/inflections.rb'
53

@@ -279,6 +277,7 @@ def expose_params(value)
279277
end
280278

281279
def expose_params_from_model(model)
280+
model = model.is_a?(String) ? model.constantize : model
282281
model_name = model_name(model)
283282

284283
return model_name if @definitions.key?(model_name)
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
require 'spec_helper'
2+
require 'grape-entity'
3+
require 'grape-swagger-entity'
4+
5+
describe '#427 nested entity given as string' do
6+
let(:app) do
7+
Class.new(Grape::API) do
8+
namespace :issue_427 do
9+
module Permission
10+
class WithoutRole < Grape::Entity
11+
expose :id
12+
expose :description
13+
end
14+
end
15+
16+
class RoleEntity < Grape::Entity
17+
expose :id
18+
expose :description
19+
expose :role
20+
expose :permissions, using: 'Permission::WithoutRole'
21+
end
22+
desc 'Get a list of roles',
23+
success: RoleEntity
24+
get '/' do
25+
present [], with: RoleEntity
26+
end
27+
end
28+
29+
add_swagger_documentation format: :json
30+
end
31+
end
32+
33+
subject do
34+
get '/swagger_doc'
35+
JSON.parse(last_response.body)['definitions']
36+
end
37+
38+
specify { expect(subject.keys).to include 'RoleEntity', 'WithoutRole' }
39+
end

spec/support/model_parsers/entity_parser.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -336,5 +336,5 @@ class DocumentedHashAndArrayModel < Grape::Entity
336336
end
337337

338338
def mounted_paths
339-
%w( /thing /other_thing /dummy )
339+
%w(/thing /other_thing /dummy)
340340
end

spec/support/model_parsers/mock_parser.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -332,5 +332,5 @@ class ApiResponse < OpenStruct; end
332332
end
333333

334334
def mounted_paths
335-
%w( /thing /other_thing /dummy )
335+
%w(/thing /other_thing /dummy)
336336
end

spec/support/model_parsers/representable_parser.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -408,5 +408,5 @@ class DocumentedHashAndArrayModel < Representable::Decorator
408408
end
409409

410410
def mounted_paths
411-
%w( /thing /other_thing /dummy )
411+
%w(/thing /other_thing /dummy)
412412
end

spec/swagger_v2/api_swagger_v2_detail_spec.rb

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# encoding: UTF-8
2-
31
require 'spec_helper'
42

53
def details

0 commit comments

Comments
 (0)