swagger_docs_generator 0.2.0 → 0.3.0.pre.18
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 +4 -4
- data/lib/swagger_docs_generator/configuration/configuration.rb +14 -5
- data/lib/swagger_docs_generator/configuration/configuration_info.rb +4 -0
- data/lib/swagger_docs_generator/generator.rb +30 -47
- data/lib/swagger_docs_generator/info.rb +1 -1
- data/lib/swagger_docs_generator/metadata/controller.rb +3 -31
- data/lib/swagger_docs_generator/metadata/definition.rb +19 -10
- data/lib/swagger_docs_generator/metadata/jsons.rb +32 -0
- data/lib/swagger_docs_generator/metadata/metadata.rb +11 -1
- data/lib/swagger_docs_generator/parser/action.rb +15 -7
- data/lib/swagger_docs_generator/parser/actions/parameters/body.rb +31 -0
- data/lib/swagger_docs_generator/parser/actions/parameters/form.rb +20 -0
- data/lib/swagger_docs_generator/parser/actions/parameters/header.rb +27 -0
- data/lib/swagger_docs_generator/parser/actions/parameters/path.rb +27 -0
- data/lib/swagger_docs_generator/parser/actions/parameters/query.rb +28 -0
- data/lib/swagger_docs_generator/parser/actions/parameters.rb +31 -57
- data/lib/swagger_docs_generator/parser/actions/response.rb +3 -59
- data/lib/swagger_docs_generator/parser/actions/schema.rb +4 -0
- data/lib/swagger_docs_generator/parser/controller.rb +7 -7
- data/lib/swagger_docs_generator/parser/definition.rb +9 -7
- data/lib/swagger_docs_generator/parser/model.rb +0 -3
- data/lib/swagger_docs_generator/parser/parser.rb +12 -11
- data/lib/swagger_docs_generator.rb +6 -0
- data/lib/tasks/swagger.rake +6 -5
- data/spec/spec_helper.rb +1 -0
- data/spec/support/examples/parameters.rb +154 -0
- data/spec/swagger_docs_generator/configuration/configuration_customize_spec.rb +6 -6
- data/spec/swagger_docs_generator/configuration/configuration_default_spec.rb +8 -3
- data/spec/swagger_docs_generator/parser/parameters/param_body_spec.rb +62 -0
- data/spec/swagger_docs_generator/parser/parameters/param_form_spec.rb +52 -0
- data/spec/swagger_docs_generator/parser/parameters/param_header_spec.rb +62 -0
- data/spec/swagger_docs_generator/parser/parameters/param_path_spec.rb +62 -0
- data/spec/swagger_docs_generator/parser/parameters/param_query_spec.rb +62 -0
- metadata +18 -9
- data/lib/swagger_docs_generator/metadata/path.rb +0 -24
- data/lib/swagger_docs_generator/metadata/tag.rb +0 -24
- data/spec/swagger_docs_generator/metadata/controller_spec.rb +0 -18
- /data/lib/swagger_docs_generator/{parser/models → models}/active_record.rb +0 -0
- /data/lib/swagger_docs_generator/{parser/models → models}/mongo.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b051b9f9b3126e0dfde300b94560f20a5960cbfd
|
4
|
+
data.tar.gz: 9cb75ad8328e271617bbb2a0bfa5f5b1b5971588
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f8aef3acd286a908de1e73a170f9f67c8dd9ef2f401d17c77580014bf84a28ff0777181202437064b547c1c19271ad3671c2f014055b9c8261023954b5e579d
|
7
|
+
data.tar.gz: d7c2943197818158acf799cfd96e11cd0feeff52254171a72d5fde516c70003cd18f2177c4602bc6cf55037eccdc751b30b93d70ca2a4ad4b274d9abb43a7f5b
|
@@ -18,18 +18,15 @@ module SwaggerDocsGenerator
|
|
18
18
|
# @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md
|
19
19
|
class Configuration
|
20
20
|
# Accessors with default value
|
21
|
-
attr_accessor :swagger, :cleanning, :
|
21
|
+
attr_accessor :swagger, :cleanning, :base_path
|
22
22
|
|
23
23
|
# Accessors without default value
|
24
24
|
attr_accessor :schemes, :consumes, :produces, :host, :external_docs,
|
25
|
-
:security, :definitions
|
26
|
-
# :external_docs, :security_definitions, :security
|
27
|
-
# :paths, :tags, :host
|
25
|
+
:security, :definitions, :doc_class, :doc_folder
|
28
26
|
|
29
27
|
# Initalize default value (and requried) for json swagger file
|
30
28
|
def initialize
|
31
29
|
@swagger = '2.0'
|
32
|
-
@base_controller = ''
|
33
30
|
@base_path = '/'
|
34
31
|
@cleanning = true
|
35
32
|
end
|
@@ -43,5 +40,17 @@ module SwaggerDocsGenerator
|
|
43
40
|
def config
|
44
41
|
@config ||= Configuration.new
|
45
42
|
end
|
43
|
+
|
44
|
+
def file_base
|
45
|
+
File.join(@config.doc_folder, @config.doc_class)
|
46
|
+
end
|
47
|
+
|
48
|
+
def file_docs
|
49
|
+
Dir[File.join(@config.doc_folder, '*.rb')]
|
50
|
+
end
|
51
|
+
|
52
|
+
def temporary_folder
|
53
|
+
Rails.root.join('tmp', SwaggerDocsGenerator::GEM)
|
54
|
+
end
|
46
55
|
end
|
47
56
|
end
|
@@ -11,30 +11,44 @@ module SwaggerDocsGenerator
|
|
11
11
|
attr_reader :swagger_file
|
12
12
|
|
13
13
|
def initialize
|
14
|
-
@hash = {}
|
15
14
|
@file = 'swagger.json'
|
16
|
-
@swagger_file = File.join(
|
17
|
-
@
|
18
|
-
|
15
|
+
@swagger_file = File.join(Dir.pwd, 'public', @file)
|
16
|
+
@temp = FileUtils.mkdir_p(SwaggerDocsGenerator.temporary_folder)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Import documentation file
|
20
|
+
def import_documentations
|
21
|
+
require SwaggerDocsGenerator.file_base
|
22
|
+
SwaggerDocsGenerator.file_docs.each { |rb| require rb }
|
19
23
|
end
|
20
24
|
|
21
25
|
# Open or create a swagger.json file
|
22
26
|
def generate_swagger_file
|
23
27
|
delete_file_before
|
24
|
-
File.open(@swagger_file, 'a+')
|
28
|
+
File.open(@swagger_file, 'a+') do |file|
|
29
|
+
# file.puts write_in_swagger_file.to_json
|
30
|
+
file.puts JSON.pretty_generate write_in_swagger_file
|
31
|
+
end
|
25
32
|
end
|
26
33
|
|
27
34
|
# Delete files temporary
|
28
35
|
def delete_temporary_files
|
29
|
-
FileUtils.
|
36
|
+
FileUtils.rm_rf(@temp[0]) if SwaggerDocsGenerator.configure.cleanning
|
30
37
|
end
|
31
38
|
|
32
39
|
def info_swagger_file
|
33
|
-
|
40
|
+
"#{prefix_info} #{@swagger_file}"
|
34
41
|
end
|
35
42
|
|
36
43
|
def info_swagger_temporary
|
37
|
-
|
44
|
+
"#{prefix_info} #{SwaggerDocsGenerator.temporary_folder}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def info_controller_parser
|
48
|
+
klasses = "#{SwaggerDocsGenerator.version_ruby}::BaseDoc".constantize
|
49
|
+
klasses.subclasses.each do |controller|
|
50
|
+
yield("#{prefix_info} [Controller] #{controller::CONTROLLER}")
|
51
|
+
end
|
38
52
|
end
|
39
53
|
|
40
54
|
private
|
@@ -45,50 +59,19 @@ module SwaggerDocsGenerator
|
|
45
59
|
'->'
|
46
60
|
end
|
47
61
|
|
48
|
-
def create_info_text(message)
|
49
|
-
"#{prefix_info} #{message}"
|
50
|
-
end
|
51
|
-
|
52
|
-
# :reek:UtilityFunction
|
53
|
-
def path
|
54
|
-
File.join(Dir.pwd, '/public')
|
55
|
-
end
|
56
|
-
|
57
62
|
def delete_file_before
|
58
63
|
File.delete(@swagger_file) if File.exist?(@swagger_file)
|
59
64
|
end
|
60
65
|
|
61
|
-
|
62
|
-
FileUtils.mkdir_p(@version) unless File.directory?(@version)
|
63
|
-
end
|
64
|
-
|
66
|
+
# :reek:UtilityFunction
|
65
67
|
def write_in_swagger_file
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
@hash.merge!(MetadataInfo.new.construct_swagger_file)
|
74
|
-
end
|
75
|
-
|
76
|
-
def write_in_swagger_file_controllers
|
77
|
-
@hash.merge!(MetadataPath.new.construct_swagger_file)
|
78
|
-
@hash.merge!(MetadataTag.new.construct_swagger_file)
|
79
|
-
end
|
80
|
-
|
81
|
-
def write_in_swagger_file_models
|
82
|
-
@hash.merge!(MetadataDefinition.new.construct_swagger_file)
|
83
|
-
end
|
84
|
-
|
85
|
-
def agregate_metadata
|
86
|
-
case defined?(Rails) && Rails.env
|
87
|
-
when 'production' || 'test'
|
88
|
-
write_in_swagger_file.to_json
|
89
|
-
else
|
90
|
-
JSON.pretty_generate write_in_swagger_file
|
91
|
-
end
|
68
|
+
# Parse option to this gem
|
69
|
+
hash = MetadataConfiguration.new.construct_swagger_file
|
70
|
+
hash.merge!(MetadataInfo.new.construct_swagger_file)
|
71
|
+
# Parse temporary file (controller - actions)
|
72
|
+
hash.merge!(MetadataJsons.new.construct_swagger_file)
|
73
|
+
# Parse Model
|
74
|
+
hash.merge!(MetadataDefinition.new.construct_swagger_file)
|
92
75
|
end
|
93
76
|
end
|
94
77
|
end
|
@@ -6,40 +6,12 @@ module SwaggerDocsGenerator
|
|
6
6
|
# @abstract
|
7
7
|
# Abstract class for metadata provide to controlloer in Rails application
|
8
8
|
class MetadataController < Metadata
|
9
|
-
def initialize
|
10
|
-
@file_path = File.join(Dir.pwd, 'public',
|
11
|
-
SwaggerDocsGenerator.configure_info.version)
|
12
|
-
@conf = SwaggerDocsGenerator.configure.base_controller
|
13
|
-
@controllers = case @conf
|
14
|
-
when String then string_controller
|
15
|
-
when Array then array_controller
|
16
|
-
when Class then class_controller
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
9
|
private
|
21
10
|
|
22
|
-
attr_accessor :controllers, :file_path
|
23
|
-
|
24
|
-
# :reek:UtilityFunction
|
25
|
-
def string_controller
|
26
|
-
ApplicationController.subclasses
|
27
|
-
end
|
28
|
-
|
29
|
-
def array_controller
|
30
|
-
array = []
|
31
|
-
@conf.map { |controller| array |= search_subclasses(controller) }
|
32
|
-
array
|
33
|
-
end
|
34
|
-
|
35
|
-
def class_controller
|
36
|
-
search_subclasses(@conf.subclasses)
|
37
|
-
end
|
38
|
-
|
39
11
|
# :reek:UtilityFunction
|
40
|
-
def
|
41
|
-
|
42
|
-
|
12
|
+
def temporary_file(controller)
|
13
|
+
File.join(SwaggerDocsGenerator.temporary_folder,
|
14
|
+
"#{controller.controller_name}.json")
|
43
15
|
end
|
44
16
|
end
|
45
17
|
end
|
@@ -8,7 +8,7 @@ module SwaggerDocsGenerator
|
|
8
8
|
# Generate metadata for block definition in swagger file
|
9
9
|
#
|
10
10
|
# @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#definitions-object
|
11
|
-
class MetadataDefinition <
|
11
|
+
class MetadataDefinition < Metadata
|
12
12
|
def initialize
|
13
13
|
super
|
14
14
|
@model = nil
|
@@ -24,20 +24,19 @@ module SwaggerDocsGenerator
|
|
24
24
|
find_models.merge!(find_in_controller)
|
25
25
|
end
|
26
26
|
|
27
|
-
# :reek:NilCheck
|
28
27
|
def find_models
|
29
28
|
hash = {}
|
30
|
-
|
31
|
-
data = each_controller(controller)
|
32
|
-
hash.merge!(data) unless data.
|
29
|
+
all_class_documentation.each do |controller|
|
30
|
+
data = each_controller(controller::CONTROLLER)
|
31
|
+
hash.merge!(data) unless data.empty?
|
33
32
|
end
|
34
33
|
hash
|
35
34
|
end
|
36
35
|
|
37
36
|
def find_in_controller
|
38
37
|
hash = {}
|
39
|
-
|
40
|
-
file =
|
38
|
+
all_class_documentation.each do |controller|
|
39
|
+
file = temporary_file(controller::CONTROLLER)
|
41
40
|
hash.merge!(read_file(file)) if File.exist?(file)
|
42
41
|
end
|
43
42
|
hash
|
@@ -49,11 +48,15 @@ module SwaggerDocsGenerator
|
|
49
48
|
json.key?('definitions') ? json['definitions'] : {}
|
50
49
|
end
|
51
50
|
|
52
|
-
def each_controller(
|
53
|
-
|
51
|
+
def each_controller(model_name)
|
52
|
+
read_model(model_name) || {}
|
53
|
+
end
|
54
|
+
|
55
|
+
def read_model(model_name)
|
56
|
+
@model = Model.new(model_name)
|
54
57
|
contruct_hash
|
55
58
|
rescue NameError => message
|
56
|
-
puts "
|
59
|
+
puts "-> [Model] #{message.name} -- doesn't exist"
|
57
60
|
end
|
58
61
|
|
59
62
|
def contruct_hash
|
@@ -64,5 +67,11 @@ module SwaggerDocsGenerator
|
|
64
67
|
}
|
65
68
|
}
|
66
69
|
end
|
70
|
+
|
71
|
+
# :reek:UtilityFunction
|
72
|
+
def temporary_file(controller)
|
73
|
+
File.join(SwaggerDocsGenerator.temporary_folder,
|
74
|
+
"#{controller.controller_name}.json")
|
75
|
+
end
|
67
76
|
end
|
68
77
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SwaggerDocsGenerator
|
4
|
+
# Parse temporary json files
|
5
|
+
class MetadataJsons
|
6
|
+
def initialize
|
7
|
+
@paths = { paths: {} }
|
8
|
+
@tags_array = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def construct_swagger_file
|
12
|
+
hash = {}
|
13
|
+
files_tmp.each do |file|
|
14
|
+
@paths[:paths].merge!(read_part_json(file, 'paths'))
|
15
|
+
@tags_array.push read_part_json(file, 'tags')
|
16
|
+
end
|
17
|
+
hash.merge(@paths).merge(tags: @tags_array)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
# :reek:UtilityFunction
|
23
|
+
def files_tmp
|
24
|
+
Dir[Rails.root.join(SwaggerDocsGenerator.temporary_folder, '*.json')]
|
25
|
+
end
|
26
|
+
|
27
|
+
# :reek:UtilityFunction
|
28
|
+
def read_part_json(file, key)
|
29
|
+
JSON.parse(File.read(file))[key]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -24,10 +24,20 @@ module SwaggerDocsGenerator
|
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
+
# :reek:UtilityFunction
|
28
|
+
def base_class_documentation
|
29
|
+
"#{SwaggerDocsGenerator.version_ruby}::BaseDoc".constantize
|
30
|
+
end
|
31
|
+
|
32
|
+
def all_class_documentation
|
33
|
+
base_class_documentation.subclasses
|
34
|
+
end
|
35
|
+
|
27
36
|
attr_reader :config
|
28
37
|
end
|
29
38
|
end
|
30
39
|
|
31
40
|
require 'swagger_docs_generator/metadata/configuration'
|
32
41
|
require 'swagger_docs_generator/metadata/info'
|
33
|
-
require 'swagger_docs_generator/metadata/
|
42
|
+
require 'swagger_docs_generator/metadata/jsons'
|
43
|
+
require 'swagger_docs_generator/metadata/definition'
|
@@ -2,12 +2,19 @@
|
|
2
2
|
|
3
3
|
require 'swagger_docs_generator/parser/actions/actions'
|
4
4
|
|
5
|
+
# :reek:UtilityFunction
|
6
|
+
# :reek:InstanceVariableAssumption
|
7
|
+
# :reek:TooManyInstanceVariables
|
8
|
+
# :reek:TooManyStatements
|
9
|
+
|
10
|
+
# rubocop:disable Metrics/AbcSize
|
11
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
5
12
|
module SwaggerDocsGenerator
|
6
13
|
# # Parse action in controller classe to Rails application. It's adding
|
7
14
|
# paths to swagger docs file.
|
8
15
|
class ParserAction < Parser
|
9
16
|
def initialize(action, &block)
|
10
|
-
super(binding.of_callers[1].klass
|
17
|
+
super(binding.of_callers[1].klass)
|
11
18
|
@action = action
|
12
19
|
@parameter = []
|
13
20
|
@response = {}
|
@@ -15,9 +22,8 @@ module SwaggerDocsGenerator
|
|
15
22
|
end
|
16
23
|
|
17
24
|
def adding_path
|
18
|
-
json = JSON.parse(File.read(
|
19
|
-
File.open(
|
20
|
-
# json['paths'].merge!(construct_routes(json))
|
25
|
+
json = JSON.parse(File.read(temporary_file))
|
26
|
+
File.open(temporary_file, 'w') do |file|
|
21
27
|
path_exist(json, construct_routes)
|
22
28
|
file.puts(JSON.pretty_generate(json))
|
23
29
|
end
|
@@ -54,7 +60,7 @@ module SwaggerDocsGenerator
|
|
54
60
|
element.merge!(deprecated: @deprecated) if @deprecated.present?
|
55
61
|
element.merge!(produces: @produce) if @produce.present?
|
56
62
|
element.merge!(responses: @response)
|
57
|
-
element.merge!(tags:
|
63
|
+
element.merge!(tags: write_tag)
|
58
64
|
end
|
59
65
|
|
60
66
|
def route
|
@@ -65,8 +71,8 @@ module SwaggerDocsGenerator
|
|
65
71
|
{ @route => { @verb => construct_path }.merge!(patch: construct_path) }
|
66
72
|
end
|
67
73
|
|
68
|
-
def
|
69
|
-
[
|
74
|
+
def write_tag
|
75
|
+
[@tag_name]
|
70
76
|
end
|
71
77
|
|
72
78
|
def summary(text)
|
@@ -100,3 +106,5 @@ module SwaggerDocsGenerator
|
|
100
106
|
end
|
101
107
|
end
|
102
108
|
end
|
109
|
+
# rubocop:enable Metrics/AbcSize
|
110
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :reek:InstanceVariableAssumption
|
4
|
+
# :reek:NilCheck
|
5
|
+
|
6
|
+
module SwaggerDocsGenerator
|
7
|
+
module Actions
|
8
|
+
# Write parameter type :body
|
9
|
+
class Body < Parameter
|
10
|
+
def to_hash
|
11
|
+
{
|
12
|
+
in: :body,
|
13
|
+
name: @name.nil? ? 'body' : @name,
|
14
|
+
description: @description.nil? ? '' : @description,
|
15
|
+
required: @required.nil? ? true : @required,
|
16
|
+
schema: { '$ref': @schema.nil? ? '' : format_name }
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def schema(text)
|
23
|
+
@schema = text
|
24
|
+
end
|
25
|
+
|
26
|
+
def format_name
|
27
|
+
"#/definitions/#{@schema.tr(' ', '_').camelize}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :reek:InstanceVariableAssumption
|
4
|
+
# :reek:NilCheck
|
5
|
+
|
6
|
+
module SwaggerDocsGenerator
|
7
|
+
module Actions
|
8
|
+
# Write parameter type :form
|
9
|
+
class Form < Parameter
|
10
|
+
def to_hash
|
11
|
+
{
|
12
|
+
in: :form,
|
13
|
+
name: @name.nil? ? 'form' : @name,
|
14
|
+
description: @description.nil? ? '' : @description,
|
15
|
+
required: @required.nil? ? true : @required
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :reek:InstanceVariableAssumption
|
4
|
+
# :reek:NilCheck
|
5
|
+
|
6
|
+
module SwaggerDocsGenerator
|
7
|
+
module Actions
|
8
|
+
# Write parameter type :header
|
9
|
+
class Header < Parameter
|
10
|
+
def to_hash
|
11
|
+
{
|
12
|
+
in: :header,
|
13
|
+
name: @name.nil? ? 'header' : @name,
|
14
|
+
description: @description.nil? ? '' : @description,
|
15
|
+
required: @required.nil? ? true : @required,
|
16
|
+
type: @type.nil? ? '' : @type
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def type(text)
|
23
|
+
@type = text
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :reek:InstanceVariableAssumption
|
4
|
+
# :reek:NilCheck
|
5
|
+
|
6
|
+
module SwaggerDocsGenerator
|
7
|
+
module Actions
|
8
|
+
# Write parameter type :path
|
9
|
+
class Path < Parameter
|
10
|
+
def to_hash
|
11
|
+
{
|
12
|
+
in: :path,
|
13
|
+
name: @name.nil? ? 'path' : @name,
|
14
|
+
description: @description.nil? ? '' : @description,
|
15
|
+
required: @required.nil? ? true : @required,
|
16
|
+
type: @type.nil? ? '' : @type
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def type(text)
|
23
|
+
@type = text
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :reek:InstanceVariableAssumption
|
4
|
+
# :reek:NilCheck
|
5
|
+
|
6
|
+
module SwaggerDocsGenerator
|
7
|
+
module Actions
|
8
|
+
# Write parameter type :query
|
9
|
+
class Query < Parameter
|
10
|
+
def to_hash
|
11
|
+
{
|
12
|
+
in: :query,
|
13
|
+
name: @name.nil? ? 'query' : @name,
|
14
|
+
description: @description.nil? ? '' : @description,
|
15
|
+
required: @required.nil? ? true : @required,
|
16
|
+
type: @type.nil? ? 'array' : @type,
|
17
|
+
items: { type: 'string' }
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def type(text)
|
24
|
+
@type = text
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,6 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# :reek:UtilityFunction
|
4
|
+
# :reek:InstanceVariableAssumption
|
5
|
+
# :reek:TooManyInstanceVariables
|
6
|
+
# :reek:DuplicateMethodCall
|
7
|
+
# :reek:TooManyStatements
|
8
|
+
|
4
9
|
module SwaggerDocsGenerator
|
5
10
|
module Actions
|
6
11
|
# # Test :parameters
|
@@ -8,88 +13,57 @@ module SwaggerDocsGenerator
|
|
8
13
|
# Complete parameters field for action
|
9
14
|
class Parameter
|
10
15
|
def initialize(&block)
|
16
|
+
@param = nil
|
11
17
|
instance_eval(&block) if block_given?
|
12
18
|
end
|
13
19
|
|
14
20
|
def to_hash
|
15
|
-
|
16
|
-
when :path then path_hash
|
17
|
-
when :header then header_hash
|
18
|
-
when :query then query_hash
|
19
|
-
when :body then body_hash
|
20
|
-
when :form then form_hash
|
21
|
-
end
|
21
|
+
@param.to_hash
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
|
-
def
|
27
|
-
@
|
28
|
-
@name = data[0]
|
29
|
-
@description = data[1]
|
30
|
-
@type = data[2]
|
31
|
-
@required = data[3]
|
26
|
+
def name(text)
|
27
|
+
@name = text
|
32
28
|
end
|
33
29
|
|
34
|
-
def
|
35
|
-
|
36
|
-
name: @name,
|
37
|
-
in: @in,
|
38
|
-
description: @description,
|
39
|
-
required: @required,
|
40
|
-
type: @type
|
41
|
-
}
|
30
|
+
def description(text)
|
31
|
+
@description = text
|
42
32
|
end
|
43
33
|
|
44
|
-
def
|
45
|
-
@
|
46
|
-
@name = data[0]
|
47
|
-
@description = data[1]
|
48
|
-
@type = data[2]
|
49
|
-
@required = data[3]
|
50
|
-
@enum = data[4]
|
34
|
+
def required(text)
|
35
|
+
@required = text
|
51
36
|
end
|
52
37
|
|
53
|
-
def
|
54
|
-
|
55
|
-
name: @name,
|
56
|
-
in: @in,
|
57
|
-
description: @description,
|
58
|
-
required: @required,
|
59
|
-
type: @type,
|
60
|
-
enum: @enum
|
61
|
-
}
|
38
|
+
def body(&block)
|
39
|
+
@param = Body.new(&block)
|
62
40
|
end
|
63
41
|
|
64
|
-
def
|
65
|
-
@
|
42
|
+
def form(&block)
|
43
|
+
@param = Form.new(&block)
|
66
44
|
end
|
67
45
|
|
68
|
-
|
69
|
-
|
70
|
-
def body(data)
|
71
|
-
@in = :body
|
72
|
-
@name = data[1]
|
73
|
-
@description = data[0]
|
74
|
-
@definition = data[1]
|
46
|
+
def header(&block)
|
47
|
+
@param = Header.new(&block)
|
75
48
|
end
|
76
49
|
|
77
|
-
def
|
78
|
-
|
79
|
-
name: @name,
|
80
|
-
in: @in,
|
81
|
-
description: @description,
|
82
|
-
required: true,
|
83
|
-
schema: { type: :object, items: { '$ref': @definition.tr(' ', '_').camelize } }
|
84
|
-
}
|
50
|
+
def path(&block)
|
51
|
+
@param = Path.new(&block)
|
85
52
|
end
|
86
53
|
|
87
|
-
def
|
88
|
-
@
|
54
|
+
def query(&block)
|
55
|
+
@param = Query.new(&block)
|
89
56
|
end
|
90
57
|
|
91
|
-
def
|
58
|
+
def test_value(value, default)
|
59
|
+
value.empty? ? default : value
|
92
60
|
end
|
93
61
|
end
|
94
62
|
end
|
95
63
|
end
|
64
|
+
|
65
|
+
require 'swagger_docs_generator/parser/actions/parameters/body'
|
66
|
+
require 'swagger_docs_generator/parser/actions/parameters/form'
|
67
|
+
require 'swagger_docs_generator/parser/actions/parameters/header'
|
68
|
+
require 'swagger_docs_generator/parser/actions/parameters/path'
|
69
|
+
require 'swagger_docs_generator/parser/actions/parameters/query'
|