grape-swagger 0.25.2 → 0.25.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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