Fix group parameters' name with type Array.
This commit is contained in:
		
							parent
							
								
									a0d446daae
								
							
						
					
					
						commit
						12dae157e9
					
				|  | @ -7,12 +7,12 @@ | ||||||
| 
 | 
 | ||||||
| # Offense count: 9 | # Offense count: 9 | ||||||
| Metrics/AbcSize: | Metrics/AbcSize: | ||||||
|   Max: 346 |   Max: 347 | ||||||
| 
 | 
 | ||||||
| # Offense count: 1 | # Offense count: 1 | ||||||
| # Configuration parameters: CountComments. | # Configuration parameters: CountComments. | ||||||
| Metrics/ClassLength: | Metrics/ClassLength: | ||||||
|   Max: 466 |   Max: 485 | ||||||
| 
 | 
 | ||||||
| # Offense count: 6 | # Offense count: 6 | ||||||
| Metrics/CyclomaticComplexity: | Metrics/CyclomaticComplexity: | ||||||
|  | @ -26,7 +26,7 @@ Metrics/LineLength: | ||||||
| # Offense count: 17 | # Offense count: 17 | ||||||
| # Configuration parameters: CountComments. | # Configuration parameters: CountComments. | ||||||
| Metrics/MethodLength: | Metrics/MethodLength: | ||||||
|   Max: 367 |   Max: 368 | ||||||
| 
 | 
 | ||||||
| # Offense count: 5 | # Offense count: 5 | ||||||
| Metrics/PerceivedComplexity: | Metrics/PerceivedComplexity: | ||||||
|  |  | ||||||
|  | @ -11,6 +11,7 @@ | ||||||
| 
 | 
 | ||||||
| #### Fixes | #### Fixes | ||||||
| 
 | 
 | ||||||
|  | * [#221](https://github.com/tim-vandecasteele/grape-swagger/pull/221): Fixed group parameters' name with type Array - [@u2](https://github.com/u2). | ||||||
| * [#211](https://github.com/tim-vandecasteele/grape-swagger/pull/211): Fixed the dependency, just `require 'grape'` - [@u2](https://github.com/u2). | * [#211](https://github.com/tim-vandecasteele/grape-swagger/pull/211): Fixed the dependency, just `require 'grape'` - [@u2](https://github.com/u2). | ||||||
| * [#210](https://github.com/tim-vandecasteele/grape-swagger/pull/210): Fixed the range `:values` option, now exposed as `enum` parameters - [@u2](https://github.com/u2). | * [#210](https://github.com/tim-vandecasteele/grape-swagger/pull/210): Fixed the range `:values` option, now exposed as `enum` parameters - [@u2](https://github.com/u2). | ||||||
| * [#208](https://github.com/tim-vandecasteele/grape-swagger/pull/208): Fixed `Float` parameters, exposed as Swagger `float` types - [@u2](https://github.com/u2). | * [#208](https://github.com/tim-vandecasteele/grape-swagger/pull/208): Fixed `Float` parameters, exposed as Swagger `float` types - [@u2](https://github.com/u2). | ||||||
|  |  | ||||||
|  | @ -139,6 +139,25 @@ module Grape | ||||||
|         end |         end | ||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|  |       def parse_array_params(params) | ||||||
|  |         modified_params = {} | ||||||
|  |         array_param = nil | ||||||
|  |         params.each_key do |k| | ||||||
|  |           if params[k].is_a?(Hash) && params[k][:type] == 'Array' | ||||||
|  |             array_param = k | ||||||
|  |           else | ||||||
|  |             new_key = k | ||||||
|  |             unless array_param.nil? | ||||||
|  |               if k.to_s.start_with?(array_param.to_s + '[') | ||||||
|  |                 new_key = array_param.to_s + '[]' + k.to_s.split(array_param)[1] | ||||||
|  |               end | ||||||
|  |             end | ||||||
|  |             modified_params[new_key] = params[k] | ||||||
|  |           end | ||||||
|  |         end | ||||||
|  |         modified_params | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|       def create_documentation_class |       def create_documentation_class | ||||||
|         Class.new(Grape::API) do |         Class.new(Grape::API) do | ||||||
|           class << self |           class << self | ||||||
|  | @ -153,7 +172,9 @@ module Grape | ||||||
|             def parse_params(params, path, method) |             def parse_params(params, path, method) | ||||||
|               params ||= [] |               params ||= [] | ||||||
| 
 | 
 | ||||||
|               non_nested_parent_params = get_non_nested_params(params) |               parsed_array_params = parse_array_params(params) | ||||||
|  | 
 | ||||||
|  |               non_nested_parent_params = get_non_nested_params(parsed_array_params) | ||||||
| 
 | 
 | ||||||
|               non_nested_parent_params.map do |param, value| |               non_nested_parent_params.map do |param, value| | ||||||
|                 items = {} |                 items = {} | ||||||
|  |  | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | require 'spec_helper' | ||||||
|  | 
 | ||||||
|  | describe 'Array Params' do | ||||||
|  |   def app | ||||||
|  |     Class.new(Grape::API) do | ||||||
|  |       format :json | ||||||
|  | 
 | ||||||
|  |       params do | ||||||
|  |         requires :a_array, type: Array do | ||||||
|  |           requires :param_1, type: Integer | ||||||
|  |           requires :param_2, type: String | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  |       post :splines do | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       add_swagger_documentation | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   subject do | ||||||
|  |     get '/swagger_doc/splines' | ||||||
|  |     expect(last_response.status).to eq 200 | ||||||
|  |     body = JSON.parse last_response.body | ||||||
|  |     body['apis'].first['operations'].first['parameters'] | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   it 'gets array types' do | ||||||
|  |     expect(subject).to eq [ | ||||||
|  |       { 'paramType' => 'form', 'name' => 'a_array[][param_1]', 'description' => nil, 'type' => 'integer', 'required' => true, 'allowMultiple' => false, 'format' => 'int32' }, | ||||||
|  |       { 'paramType' => 'form', 'name' => 'a_array[][param_2]', 'description' => nil, 'type' => 'string', 'required' => true, 'allowMultiple' => false } | ||||||
|  |     ] | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | @ -6,7 +6,7 @@ describe 'Float Params' do | ||||||
|       format :json |       format :json | ||||||
| 
 | 
 | ||||||
|       params do |       params do | ||||||
|         requires :a_float, type: Virtus::Attribute::Float |         requires :a_float, type: Float | ||||||
|       end |       end | ||||||
|       post :splines do |       post :splines do | ||||||
|       end |       end | ||||||
|  |  | ||||||
|  | @ -31,6 +31,6 @@ describe 'Mutually exclusive group params' do | ||||||
|     parameters = body['apis'].first['operations'].first['parameters'] |     parameters = body['apis'].first['operations'].first['parameters'] | ||||||
|     expect(parameters).to eq [ |     expect(parameters).to eq [ | ||||||
|       { 'paramType' => 'form', 'name' => 'required_group[param_group_1][param_1]', 'description' => nil, 'type' => 'string', 'required' => false, 'allowMultiple' => false }, |       { 'paramType' => 'form', 'name' => 'required_group[param_group_1][param_1]', 'description' => nil, 'type' => 'string', 'required' => false, 'allowMultiple' => false }, | ||||||
|       { 'paramType' => 'form', 'name' => 'required_group[param_group_2][param_2]', 'description' => nil, 'type' => 'string', 'required' => false, 'allowMultiple' => false }] |       { 'paramType' => 'form', 'name' => 'required_group[param_group_2][][param_2]', 'description' => nil, 'type' => 'string', 'required' => true, 'allowMultiple' => false }] | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -6,13 +6,13 @@ describe 'Range Params' do | ||||||
|       format :json |       format :json | ||||||
| 
 | 
 | ||||||
|       params do |       params do | ||||||
|         requires :letter, type: Virtus::Attribute::String, values: 'a'..'z' |         requires :letter, type: String, values: 'a'..'z' | ||||||
|       end |       end | ||||||
|       post :letter do |       post :letter do | ||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       params do |       params do | ||||||
|         requires :number, type: Virtus::Attribute::Integer, values: -5..5 |         requires :number, type: Integer, values: -5..5 | ||||||
|       end |       end | ||||||
|       post :integer do |       post :integer do | ||||||
|       end |       end | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue