grape-swagger 0.25.2 → 0.25.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 152d9012cfd228b57f5bd894703832545865d0b7
4
- data.tar.gz: d2fb99d11bb2c0329df1310fff779277c0b9c950
3
+ metadata.gz: 7ff792817a48d392666a4e84933495fa6e68b66e
4
+ data.tar.gz: 9368606ffd2008f4491145cf3e3803579abde016
5
5
  SHA512:
6
- metadata.gz: 8bfede986d83fcd0bcbf29533872902269700906b81e35235efdf26f260fff8d79316192c579ca2248602bcc8abfef557a6df353d53fba03379616242b1f88ba
7
- data.tar.gz: ae63ced69632be01f0f22944e0b261811bb14ea8c023ce7bed1556041d6bc1624d045d2beb1f3a73b347f2c019beb83b6f0cf316c446f2ef7a47f4ba98bf7552
6
+ metadata.gz: 84b8254773002e828481160615dc3176121d3f440de4937949ca086d53129aae064d72ad4ef5810c23789e3918228ccc083f6794eddb918ccebdc576224a8a30
7
+ data.tar.gz: 5960d2a66afffdb1f37a625d553e974aa782be32b7166b3199ac89e7b6dd347d8c6f97e431d81faf328482763a47ce39da5528f503b9f1c1de090eac9b96a246
data/.rubocop.yml CHANGED
@@ -8,3 +8,6 @@ inherit_from: .rubocop_todo.yml
8
8
  Metrics/LineLength:
9
9
  Exclude:
10
10
  - spec/**/*
11
+
12
+ Style/IndentHash:
13
+ EnforcedStyle: consistent
data/.rubocop_todo.yml CHANGED
@@ -18,7 +18,7 @@ Metrics/BlockLength:
18
18
  # Offense count: 3
19
19
  # Configuration parameters: CountComments.
20
20
  Metrics/ClassLength:
21
- Max: 247
21
+ Max: 265
22
22
 
23
23
  # Offense count: 10
24
24
  Metrics/CyclomaticComplexity:
@@ -28,7 +28,7 @@ Metrics/CyclomaticComplexity:
28
28
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives.
29
29
  # URISchemes: http, https
30
30
  Metrics/LineLength:
31
- Max: 160
31
+ Max: 120
32
32
 
33
33
  # Offense count: 34
34
34
  # Configuration parameters: CountComments.
data/.travis.yml CHANGED
@@ -1,37 +1,37 @@
1
1
  language: ruby
2
2
 
3
3
  sudo: false
4
+ before_install:
5
+ - gem install bundler
4
6
 
5
7
  matrix:
6
8
  include:
7
- - rvm: 2.3.1
9
+ - rvm: 2.3.3
8
10
  script:
9
11
  - bundle exec danger
10
- - rvm: 2.3.1
12
+ - rvm: 2.3.3
11
13
  env: MODEL_PARSER=grape-swagger-entity
12
- - rvm: 2.3.1
14
+ - rvm: 2.3.3
13
15
  env: MODEL_PARSER=grape-swagger-representable
14
- - rvm: 2.3.1
16
+ - rvm: 2.3.3
15
17
  env: GRAPE_VERSION=0.14.0
16
- - rvm: 2.3.1
18
+ - rvm: 2.3.3
17
19
  env: GRAPE_VERSION=0.15.0
18
- - rvm: 2.3.1
20
+ - rvm: 2.3.3
19
21
  env: GRAPE_VERSION=0.16.2
20
- - rvm: 2.3.1
22
+ - rvm: 2.3.3
21
23
  env: GRAPE_VERSION=0.17.0
22
- - rvm: 2.3.1
24
+ - rvm: 2.3.3
23
25
  env: GRAPE_VERSION=0.18.0
24
- - rvm: 2.3.1
26
+ - rvm: 2.3.3
25
27
  env: GRAPE_VERSION=HEAD
26
- - rvm: 2.3.0
27
28
  - rvm: 2.2
28
- - rvm: 2.1
29
29
  - rvm: ruby-head
30
- - rvm: jruby-9.1.2.0
30
+ - rvm: jruby-9.1.6.0
31
31
  - rvm: jruby-head
32
32
  - rvm: rbx-2
33
33
  allow_failures:
34
34
  - rvm: ruby-head
35
- - rvm: jruby-9.1.2.0
35
+ - rvm: jruby-9.1.6.0
36
36
  - rvm: jruby-head
37
37
  - rvm: rbx-2
data/CHANGELOG.md CHANGED
@@ -8,6 +8,18 @@
8
8
 
9
9
  * Your contribution here.
10
10
 
11
+ ### 0.25.3 (December 18, 2016)
12
+
13
+ #### Features
14
+
15
+ * [#554](https://github.com/ruby-grape/grape-swagger/pull/554): Updates travis.yml to align with grape - [@LeFnord](https://github.com/LeFnord).
16
+
17
+ #### Fixes
18
+
19
+ * [#546](https://github.com/ruby-grape/grape-swagger/pull/546): Move development dependencies to Gemfile - [@olleolleolle](https://github.com/olleolleolle).
20
+ * [#547](https://github.com/ruby-grape/grape-swagger/pull/547): Use entity_name event if type come from a string - [@frodrigo](https://github.com/frodrigo).
21
+ * [#548](https://github.com/ruby-grape/grape-swagger/pull/548): Remove dots from operation id - [@frodrigo](https://github.com/frodrigo).
22
+ * [#553](https://github.com/ruby-grape/grape-swagger/pull/553): Align array params for post, put request - addition to [#540](https://github.com/ruby-grape/grape-swagger/pull/540) - [@LeFnord](https://github.com/LeFnord).
11
23
 
12
24
  ### 0.25.2 (November 30, 2016)
13
25
 
@@ -34,7 +46,7 @@
34
46
  * [#524](https://github.com/ruby-grape/grape-swagger/pull/524): Use route tags for global tag set - [@LeFnord](https://github.com/LeFnord).
35
47
  * [#523](https://github.com/ruby-grape/grape-swagger/pull/523): Allow specifying custom tags at the route level - [@jordanfbrown](https://github.com/jordanfbrown).
36
48
  * [#520](https://github.com/ruby-grape/grape-swagger/pull/520): Response model can have required attributes - [@WojciechKo](https://github.com/WojciechKo).
37
- * [#510](https://github.com/ruby-grape/grape-swagger/pull/510): Use 'token_owner' instead of 'oauth_token' on Swagger UI endpoint authorization. - [@texpert](https://github.com/texpert).
49
+ * [#510](https://github.com/ruby-grape/grape-swagger/pull/510): Use 'token_owner' instead of 'oauth_token' on Swagger UI endpoint authorization - [@texpert](https://github.com/texpert).
38
50
 
39
51
  #### Fixes
40
52
 
@@ -50,7 +62,7 @@
50
62
  * [#502](https://github.com/ruby-grape/grape-swagger/pull/502): Adds specs for rake tasks - [@LeFnord](https://github.com/LeFnord).
51
63
  * [#501](https://github.com/ruby-grape/grape-swagger/pull/501): Adds getting of a specified resource for Rake Tasks - [@LeFnord](https://github.com/LeFnord).
52
64
  * [#500](https://github.com/ruby-grape/grape-swagger/pull/500): Adds Rake tasks to get and validate OAPI/Swagger documentation - [@LeFnord](https://github.com/LeFnord).
53
- * [#493](https://github.com/ruby-grape/grape-swagger/pull/493): Swagger UI endpoint authorization. - [@texpert](https://github.com/texpert).
65
+ * [#493](https://github.com/ruby-grape/grape-swagger/pull/493): Swagger UI endpoint authorization - [@texpert](https://github.com/texpert).
54
66
  * [#492](https://github.com/ruby-grape/grape/pull/492): Define security requirements on endpoint methods - [@tomregelink](https://github.com/tomregelink).
55
67
  * [#497](https://github.com/ruby-grape/grape-swagger/pull/497): Use ruby-grape-danger in Dangerfile - [@dblock](https://github.com/dblock).
56
68
 
data/Gemfile CHANGED
@@ -1,23 +1,36 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
+ ruby RUBY_VERSION
4
+
3
5
  gemspec
4
6
 
5
- case version = ENV['GRAPE_VERSION'] || '~> 0.18'
6
- when 'HEAD'
7
- gem 'grape', github: 'ruby-grape/grape'
8
- else
9
- gem 'grape', version
10
- end
7
+ gem 'grape', case version = ENV['GRAPE_VERSION'] || '~> 0.18'
8
+ when 'HEAD'
9
+ { github: 'ruby-grape/grape' }
10
+ else
11
+ version
12
+ end
11
13
 
12
14
  gem ENV['MODEL_PARSER'] if ENV.key?('MODEL_PARSER')
13
15
 
14
- if RUBY_VERSION < '2.2.2'
15
- gem 'rack', '<2.0.0'
16
- gem 'activesupport', '<5.0.0'
16
+ group :development, :test do
17
+ gem 'bundler'
18
+ gem 'kramdown'
19
+ gem 'pry', platforms: [:mri]
20
+ gem 'pry-byebug', platforms: [:mri]
21
+ gem 'rack'
22
+ gem 'rack-cors'
23
+ gem 'rack-test'
24
+ gem 'rake'
25
+ gem 'rdoc'
26
+ gem 'redcarpet', platforms: [:mri]
27
+ gem 'rouge', platforms: [:mri]
28
+ gem 'rspec', '~> 3.0'
29
+ gem 'rubocop', '~> 0.40'
30
+ gem 'shoulda'
17
31
  end
18
-
19
32
  group :test do
20
- gem 'ruby-grape-danger', '~> 0.1.0', require: false
21
33
  gem 'grape-entity'
22
34
  gem 'grape-swagger-entity'
35
+ gem 'ruby-grape-danger', '~> 0.1.0', require: false
23
36
  end
data/UPGRADING.md CHANGED
@@ -1,5 +1,27 @@
1
- Upgrading Grape-swagger
2
- =======================
1
+ ## Upgrading Grape-swagger
2
+
3
+ ### Upgrading to >= 0.25.2
4
+
5
+ Avoids ambiguous documentation of array parameters,
6
+ by enforcing correct usage of both possibilities:
7
+
8
+ 1. Array of primitive types
9
+ ```ruby
10
+ params do
11
+ requires :foo, type: Array[String]
12
+ end
13
+ ```
14
+
15
+ 2. Array of objects
16
+ ```ruby
17
+ params do
18
+ requires :put_params, type: Array do
19
+ requires :op, type: String
20
+ requires :path, type: String
21
+ requires :value, type: String
22
+ end
23
+ end
24
+ ```
3
25
 
4
26
  ### Upgrading to >= 0.25.0
5
27
 
@@ -13,20 +13,6 @@ Gem::Specification.new do |s|
13
13
 
14
14
  s.add_runtime_dependency 'grape', '>= 0.12.0'
15
15
 
16
- s.add_development_dependency 'rake'
17
- s.add_development_dependency 'shoulda'
18
- s.add_development_dependency 'rdoc'
19
- s.add_development_dependency 'rspec', '~> 3.0'
20
- s.add_development_dependency 'bundler'
21
- s.add_development_dependency 'rack-test'
22
- s.add_development_dependency 'rack-cors'
23
- s.add_development_dependency 'rubocop', '~> 0.40'
24
- s.add_development_dependency 'kramdown'
25
- s.add_development_dependency 'redcarpet' unless RUBY_PLATFORM.eql?('java') || RUBY_ENGINE.eql?('rbx')
26
- s.add_development_dependency 'rouge' unless RUBY_PLATFORM.eql?('java') || RUBY_ENGINE.eql?('rbx')
27
- s.add_development_dependency 'pry' unless RUBY_PLATFORM.eql?('java') || RUBY_ENGINE.eql?('rbx')
28
- s.add_development_dependency 'pry-byebug' unless RUBY_PLATFORM.eql?('java') || RUBY_ENGINE.eql?('rbx')
29
-
30
16
  s.files = `git ls-files`.split("\n")
31
17
  s.test_files = `git ls-files -- {test,spec}/*`.split("\n")
32
18
  s.require_paths = ['lib']
@@ -1,5 +1,4 @@
1
1
  require 'grape-swagger/doc_methods/status_codes'
2
-
3
2
  require 'grape-swagger/doc_methods/produces_consumes'
4
3
  require 'grape-swagger/doc_methods/data_type'
5
4
  require 'grape-swagger/doc_methods/extensions'
@@ -32,7 +32,12 @@ module GrapeSwagger
32
32
  def parse_multi_type(raw_data_type)
33
33
  case raw_data_type
34
34
  when /\A\[.*\]\z/
35
- raw_data_type.gsub(/[\[\s+\]]/, '').split(',').first
35
+ type_as_string = raw_data_type.gsub(/[\[\s+\]]/, '').split(',').first
36
+ begin
37
+ Object.const_get(type_as_string)
38
+ rescue NameError
39
+ type_as_string
40
+ end
36
41
  when Array
37
42
  raw_data_type.first
38
43
  else
@@ -71,6 +76,10 @@ module GrapeSwagger
71
76
  def mapping(value)
72
77
  PRIMITIVE_MAPPINGS[value] || 'string'
73
78
  end
79
+
80
+ def collections
81
+ %w(csv ssv tsv pipes multi)
82
+ end
74
83
  end
75
84
 
76
85
  PRIMITIVE_MAPPINGS = {
@@ -12,9 +12,10 @@ module GrapeSwagger
12
12
  @definitions = definitions
13
13
  unify!(params)
14
14
 
15
- return correct_array_param(params) if should_correct_array?(params)
16
-
17
15
  params_to_move = movable_params(params)
16
+
17
+ return (params + correct_array_param(params_to_move)) if should_correct_array?(params_to_move)
18
+
18
19
  params << parent_definition_of_params(params_to_move, route)
19
20
 
20
21
  params
@@ -33,7 +34,7 @@ module GrapeSwagger
33
34
  end
34
35
 
35
36
  def parent_definition_of_params(params, route)
36
- definition_name = GrapeSwagger::DocMethods::OperationId.manipulate(parse_model(route.path))
37
+ definition_name = OperationId.manipulate(parse_model(route.path))
37
38
  referenced_definition = build_definition(definition_name, params, route.request_method.downcase)
38
39
  definition = @definitions[referenced_definition]
39
40
 
@@ -20,6 +20,7 @@ module GrapeSwagger
20
20
  operation = path.split('/').map(&:capitalize).join
21
21
  operation.gsub!(/\-(\w)/, &:upcase).delete!('-') if operation.include?('-')
22
22
  operation.gsub!(/\_(\w)/, &:upcase).delete!('_') if operation.include?('_')
23
+ operation.gsub!(/\.(\w)/, &:upcase).delete!('.') if operation.include?('.')
23
24
  if path.include?('{')
24
25
  operation.gsub!(/\{(\w)/, &:upcase)
25
26
  operation.delete!('{').delete!('}')
@@ -8,7 +8,7 @@ module GrapeSwagger
8
8
 
9
9
  additional_documentation = settings.fetch(:documentation, {})
10
10
  settings.merge!(additional_documentation)
11
- data_type = GrapeSwagger::DocMethods::DataType.call(settings)
11
+ data_type = DataType.call(settings)
12
12
 
13
13
  value_type = settings.merge(data_type: data_type, path: path, param_name: param, method: method)
14
14
 
@@ -52,8 +52,8 @@ module GrapeSwagger
52
52
  end
53
53
 
54
54
  def document_type_and_format(data_type)
55
- if GrapeSwagger::DocMethods::DataType.primitive?(data_type)
56
- data = GrapeSwagger::DocMethods::DataType.mapping(data_type)
55
+ if DataType.primitive?(data_type)
56
+ data = DataType.mapping(data_type)
57
57
  @parsed_param[:type], @parsed_param[:format] = data
58
58
  else
59
59
  @parsed_param[:type] = data_type
@@ -64,7 +64,7 @@ module GrapeSwagger
64
64
  if value_type[:documentation].present?
65
65
  param_type = value_type[:documentation][:param_type]
66
66
  doc_type = value_type[:documentation][:type]
67
- type = GrapeSwagger::DocMethods::DataType.mapping(doc_type) if doc_type && !DataType.request_primitive?(doc_type)
67
+ type = DataType.mapping(doc_type) if doc_type && !DataType.request_primitive?(doc_type)
68
68
  collection_format = value_type[:documentation][:collectionFormat]
69
69
  end
70
70
 
@@ -74,14 +74,14 @@ module GrapeSwagger
74
74
  if definitions[value_type[:data_type]]
75
75
  array_items['$ref'] = "#/definitions/#{@parsed_param[:type]}"
76
76
  else
77
- array_items[:type] = type || @parsed_param[:type]
77
+ array_items[:type] = type || @parsed_param[:type] == 'array' ? 'string' : @parsed_param[:type]
78
78
  end
79
79
  array_items[:format] = @parsed_param.delete(:format) if @parsed_param[:format]
80
80
 
81
81
  @parsed_param[:in] = param_type || 'formData'
82
82
  @parsed_param[:items] = array_items
83
83
  @parsed_param[:type] = 'array'
84
- @parsed_param[:collectionFormat] = collection_format if %w(csv ssv tsv pipes multi).include?(collection_format)
84
+ @parsed_param[:collectionFormat] = collection_format if DataType.collections.include?(collection_format)
85
85
  end
86
86
 
87
87
  def param_type(value_type)
@@ -91,7 +91,7 @@ module GrapeSwagger
91
91
  elsif param_type
92
92
  param_type
93
93
  elsif %w(POST PUT PATCH).include?(value_type[:method])
94
- GrapeSwagger::DocMethods::DataType.request_primitive?(value_type[:data_type]) ? 'formData' : 'body'
94
+ DataType.request_primitive?(value_type[:data_type]) ? 'formData' : 'body'
95
95
  else
96
96
  'query'
97
97
  end
@@ -20,7 +20,7 @@ module GrapeSwagger
20
20
  path.sub!('/{version}', '')
21
21
  end
22
22
 
23
- path = "#{GrapeSwagger::DocMethods::OptionalObject.build(:base_path, options)}#{path}" if options[:add_base_path]
23
+ path = "#{OptionalObject.build(:base_path, options)}#{path}" if options[:add_base_path]
24
24
 
25
25
  [item, path.start_with?('/') ? path : "/#{path}"]
26
26
  end
@@ -9,7 +9,9 @@ module Grape
9
9
  if content_types.empty?
10
10
  formats = [target_class.format, target_class.default_format].compact.uniq
11
11
  formats = Grape::Formatter::Base.formatters({}).keys if formats.empty?
12
- content_types = Grape::ContentTypes::CONTENT_TYPES.select { |content_type, _mime_type| formats.include? content_type }.values
12
+ content_types = Grape::ContentTypes::CONTENT_TYPES.select do |content_type, _mime_type|
13
+ formats.include? content_type
14
+ end.values
13
15
  end
14
16
 
15
17
  content_types.uniq
@@ -151,7 +153,9 @@ module Grape
151
153
 
152
154
  def consumes_object(route, format)
153
155
  method = route.request_method.downcase.to_sym
154
- format = route.settings[:description][:consumes] if route.settings[:description] && route.settings[:description][:consumes]
156
+ if route.settings[:description] && route.settings[:description][:consumes]
157
+ format = route.settings[:description][:consumes]
158
+ end
155
159
  mime_types = GrapeSwagger::DocMethods::ProducesConsumes.call(format) if [:post, :put].include?(method)
156
160
 
157
161
  mime_types
@@ -199,10 +203,11 @@ module Grape
199
203
 
200
204
  @definitions[response_model][:description] = description_object(route, markdown)
201
205
  # TODO: proof that the definition exist, if model isn't specified
206
+ reference = { '$ref' => "#/definitions/#{response_model}" }
202
207
  memo[value[:code]][:schema] = if route.options[:is_array]
203
- { 'type' => 'array', 'items' => { '$ref' => "#/definitions/#{response_model}" } }
208
+ { 'type' => 'array', 'items' => reference }
204
209
  else
205
- { '$ref' => "#/definitions/#{response_model}" }
210
+ reference
206
211
  end
207
212
  end
208
213
  end
@@ -223,7 +228,11 @@ module Grape
223
228
  end
224
229
 
225
230
  def tag_object(route)
226
- Array(route.path.split('{')[0].split('/').reject(&:empty?).delete_if { |i| ((i == route.prefix.to_s) || (i == route.version)) }.first)
231
+ Array(
232
+ route.path.split('{')[0].split('/').reject(&:empty?).delete_if do |i|
233
+ i == route.prefix.to_s || i == route.version
234
+ end.first
235
+ )
227
236
  end
228
237
 
229
238
  private
@@ -240,7 +249,9 @@ module Grape
240
249
  parse_request_params(required)
241
250
  end || {}
242
251
 
243
- request_params = route.params.merge(request_params) if route.params.present? && !route.settings[:declared_params].present?
252
+ if route.params.present? && !route.settings[:declared_params].present?
253
+ request_params = route.params.merge(request_params)
254
+ end
244
255
 
245
256
  request_params
246
257
  end
@@ -295,7 +306,10 @@ module Grape
295
306
  raise GrapeSwagger::Errors::UnregisteredParser, "No parser registered for #{model_name}." unless parser
296
307
 
297
308
  properties = parser.new(model, self).call
298
- raise GrapeSwagger::Errors::SwaggerSpec, "Empty model #{model_name}, swagger 2.0 doesn't support empty definitions." unless properties && properties.any?
309
+ unless properties && properties.any?
310
+ raise GrapeSwagger::Errors::SwaggerSpec,
311
+ "Empty model #{model_name}, swagger 2.0 doesn't support empty definitions."
312
+ end
299
313
 
300
314
  @definitions[model_name] = GrapeSwagger::DocMethods::BuildModelDefinition.build(model, properties)
301
315
 
@@ -6,7 +6,9 @@ module GrapeSwagger
6
6
 
7
7
  def block_code(code, language)
8
8
  language ||= 'text'
9
- "<div class=\"code_highlight\"><pre><code class=\"highlight #{language}\">#{CGI.escapeHTML(code)}</code></pre></div>"
9
+ "<div class=\"code_highlight\">
10
+ <pre><code class=\"highlight #{language}\">#{CGI.escapeHTML(code)}</code></pre>
11
+ </div>"
10
12
  end
11
13
  end
12
14
 
@@ -31,7 +33,8 @@ module GrapeSwagger
31
33
  # when you want to have rouge as syntax highlighter add rouge to the gemfile or run:
32
34
  # $ (sudo) gem install rouge
33
35
  #
34
- # GrapeSwagger::Markdown::RedcarpetAdapter.new({highlighter: :none},{no_links: true}) # will use no syntax highlighter and won't render links.
36
+ # GrapeSwagger::Markdown::RedcarpetAdapter.new({highlighter: :none},{no_links: true})
37
+ # will use no syntax highlighter and won't render links.
35
38
  ###
36
39
  def initialize(options = {})
37
40
  require 'redcarpet'
@@ -1,3 +1,3 @@
1
1
  module GrapeSwagger
2
- VERSION = '0.25.2'.freeze
2
+ VERSION = '0.25.3'.freeze
3
3
  end
@@ -1,6 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'grape-entity'
3
- require 'grape-swagger-entity'
4
2
 
5
3
  describe '#427 nested entity given as string' do
6
4
  let(:app) do
@@ -1,6 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'grape-entity'
3
- require 'grape-swagger-entity'
4
2
 
5
3
  describe 'definition names' do
6
4
  before :all do
@@ -1,6 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'grape-entity'
3
- require 'grape-swagger-entity'
4
2
 
5
3
  describe '#539 post params given as array' do
6
4
  let(:app) do
@@ -1,6 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'grape-entity'
3
- require 'grape-swagger-entity'
4
2
 
5
3
  describe '#542 array of type in post params' do
6
4
  let(:app) do
@@ -0,0 +1,142 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#553 array of type in post/put params' do
4
+ let(:app) do
5
+ Class.new(Grape::API) do
6
+ namespace :in_form_data do
7
+ desc 'create foo'
8
+ params do
9
+ requires :guid, type: Array[String]
10
+ end
11
+ post do
12
+ # your code goes here
13
+ end
14
+
15
+ desc 'put specific foo'
16
+ params do
17
+ requires :id
18
+ requires :guid, type: Array[String]
19
+ end
20
+ put ':id' do
21
+ # your code goes here
22
+ end
23
+ end
24
+
25
+ namespace :in_body do
26
+ desc 'create foo'
27
+ params do
28
+ requires :guid, type: Array[String], documentation: { param_type: 'body' }
29
+ end
30
+ post do
31
+ # your code goes here
32
+ end
33
+
34
+ desc 'put specific foo'
35
+ params do
36
+ requires :id
37
+ requires :guid, type: Array[String], documentation: { param_type: 'body' }
38
+ end
39
+ put ':id' do
40
+ # your code goes here
41
+ end
42
+ end
43
+
44
+ add_swagger_documentation format: :json
45
+ end
46
+ end
47
+
48
+ subject do
49
+ get '/swagger_doc'
50
+ JSON.parse(last_response.body)
51
+ end
52
+
53
+ describe 'type for Array specified' do
54
+ describe 'in formData' do
55
+ describe 'post request' do
56
+ let(:params) { subject['paths']['/in_form_data']['post']['parameters'] }
57
+
58
+ specify do
59
+ expect(params).to eql([{
60
+ 'in' => 'formData',
61
+ 'name' => 'guid',
62
+ 'type' => 'array',
63
+ 'items' => { 'type' => 'string' },
64
+ 'required' => true
65
+ }])
66
+ end
67
+ end
68
+
69
+ describe 'put request' do
70
+ let(:params) { subject['paths']['/in_form_data/{id}']['put']['parameters'] }
71
+
72
+ specify do
73
+ expect(params).to eql(
74
+ [
75
+ {
76
+ 'in' => 'path',
77
+ 'name' => 'id',
78
+ 'type' => 'string',
79
+ 'required' => true
80
+ },
81
+ {
82
+ 'in' => 'formData',
83
+ 'name' => 'guid',
84
+ 'type' => 'array',
85
+ 'items' => { 'type' => 'string' },
86
+ 'required' => true
87
+ }
88
+ ]
89
+ )
90
+ end
91
+ end
92
+ end
93
+
94
+ describe 'in body' do
95
+ describe 'post request' do
96
+ let(:params) { subject['paths']['/in_body']['post']['parameters'] }
97
+
98
+ specify do
99
+ expect(params).to eql(
100
+ [
101
+ {
102
+ 'in' => 'body',
103
+ 'name' => 'guid',
104
+ 'required' => true,
105
+ 'schema' => {
106
+ 'type' => 'array',
107
+ 'items' => { 'type' => 'string' }
108
+ }
109
+ }
110
+ ]
111
+ )
112
+ end
113
+ end
114
+
115
+ describe 'put request' do
116
+ let(:params) { subject['paths']['/in_body/{id}']['put']['parameters'] }
117
+
118
+ specify do
119
+ expect(params).to eql(
120
+ [
121
+ {
122
+ 'in' => 'path',
123
+ 'name' => 'id',
124
+ 'type' => 'string',
125
+ 'required' => true
126
+ },
127
+ {
128
+ 'in' => 'body',
129
+ 'name' => 'guid',
130
+ 'required' => true,
131
+ 'schema' => {
132
+ 'type' => 'array',
133
+ 'items' => { 'type' => 'string' }
134
+ }
135
+ }
136
+ ]
137
+ )
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
@@ -1,6 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GrapeSwagger::DocMethods::DataType do
4
+ before do
5
+ stub_const 'MyEntity', Class.new
6
+ MyEntity.class_eval do
7
+ def self.entity_name
8
+ 'MyInteger'
9
+ end
10
+ end
11
+ end
12
+
4
13
  subject { described_class.call(value) }
5
14
 
6
15
  describe 'standards' do
@@ -36,6 +45,12 @@ describe GrapeSwagger::DocMethods::DataType do
36
45
  it { expect(subject).to eql 'string' }
37
46
  end
38
47
 
48
+ describe 'Types in array with entity_name' do
49
+ let(:value) { { type: '[MyEntity]' } }
50
+
51
+ it { expect(subject).to eql 'MyInteger' }
52
+ end
53
+
39
54
  describe 'Rack::Multipart::UploadedFile' do
40
55
  let(:value) { { type: Rack::Multipart::UploadedFile } }
41
56
 
data/spec/spec_helper.rb CHANGED
@@ -8,6 +8,9 @@ Dir[File.join(Dir.getwd, 'spec/support/*.rb')].each { |f| require f }
8
8
  require "grape-swagger/#{MODEL_PARSER}" if MODEL_PARSER != 'mock'
9
9
  require File.join(Dir.getwd, "spec/support/model_parsers/#{MODEL_PARSER}_parser.rb")
10
10
 
11
+ require 'grape-entity'
12
+ require 'grape-swagger-entity'
13
+
11
14
  Bundler.setup :default, :test
12
15
 
13
16
  require 'rack'
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'an operation id api' do
4
+ def app
5
+ Class.new(Grape::API) do
6
+ version '0.1'
7
+
8
+ desc 'Show this endpoint'
9
+ get '/simple_opp' do
10
+ { foo: 'bar' }
11
+ end
12
+
13
+ add_swagger_documentation format: :json
14
+ end
15
+ end
16
+
17
+ subject do
18
+ get '/0.1/swagger_doc.json'
19
+ JSON.parse(last_response.body)
20
+ end
21
+
22
+ it 'uses build name as operationId' do
23
+ expect(subject['paths']['/0.1/simple_opp']['get']['operationId']).to eql('get01SimpleOpp')
24
+ end
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-swagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.2
4
+ version: 0.25.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Vandecasteele
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-29 00:00:00.000000000 Z
11
+ date: 2016-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape
@@ -24,188 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.12.0
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: shoulda
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rdoc
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '3.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '3.0'
83
- - !ruby/object:Gem::Dependency
84
- name: bundler
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: rack-test
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rack-cors
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '0.40'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '0.40'
139
- - !ruby/object:Gem::Dependency
140
- name: kramdown
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: redcarpet
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: rouge
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: pry
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: '0'
195
- - !ruby/object:Gem::Dependency
196
- name: pry-byebug
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - ">="
200
- - !ruby/object:Gem::Version
201
- version: '0'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - ">="
207
- - !ruby/object:Gem::Version
208
- version: '0'
209
27
  description:
210
28
  email:
211
29
  - tim.vandecasteele@gmail.com
@@ -264,6 +82,7 @@ files:
264
82
  - spec/issues/533_specify_status_code_spec.rb
265
83
  - spec/issues/539_array_post_body_spec.rb
266
84
  - spec/issues/542_array_of_type_in_post_body_spec.rb
85
+ - spec/issues/553_align_array_put_post_params_spec.rb
267
86
  - spec/lib/data_type_spec.rb
268
87
  - spec/lib/endpoint_spec.rb
269
88
  - spec/lib/extensions_spec.rb
@@ -320,6 +139,7 @@ files:
320
139
  - spec/swagger_v2/namespace_tags_spec.rb
321
140
  - spec/swagger_v2/namespaced_api_spec.rb
322
141
  - spec/swagger_v2/nicknamed_api_spec.rb
142
+ - spec/swagger_v2/operation_id_api_spec.rb
323
143
  - spec/swagger_v2/param_multi_type_spec.rb
324
144
  - spec/swagger_v2/param_type_spec.rb
325
145
  - spec/swagger_v2/param_values_spec.rb
@@ -364,6 +184,7 @@ test_files:
364
184
  - spec/issues/533_specify_status_code_spec.rb
365
185
  - spec/issues/539_array_post_body_spec.rb
366
186
  - spec/issues/542_array_of_type_in_post_body_spec.rb
187
+ - spec/issues/553_align_array_put_post_params_spec.rb
367
188
  - spec/lib/data_type_spec.rb
368
189
  - spec/lib/endpoint_spec.rb
369
190
  - spec/lib/extensions_spec.rb
@@ -420,6 +241,7 @@ test_files:
420
241
  - spec/swagger_v2/namespace_tags_spec.rb
421
242
  - spec/swagger_v2/namespaced_api_spec.rb
422
243
  - spec/swagger_v2/nicknamed_api_spec.rb
244
+ - spec/swagger_v2/operation_id_api_spec.rb
423
245
  - spec/swagger_v2/param_multi_type_spec.rb
424
246
  - spec/swagger_v2/param_type_spec.rb
425
247
  - spec/swagger_v2/param_values_spec.rb