swagger_docs_generator 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/swagger_docs_generator/generator.rb +27 -10
- data/lib/swagger_docs_generator/info.rb +1 -1
- data/lib/swagger_docs_generator/metadata/controller.rb +4 -3
- data/lib/swagger_docs_generator/metadata/definition.rb +49 -0
- data/lib/swagger_docs_generator/metadata/metadata.rb +6 -1
- data/lib/swagger_docs_generator/metadata/path.rb +1 -1
- data/lib/swagger_docs_generator/metadata/tag.rb +1 -1
- data/lib/swagger_docs_generator/parser/actions/actions.rb +1 -0
- data/lib/swagger_docs_generator/parser/actions/deprecated.rb +17 -0
- data/lib/swagger_docs_generator/parser/actions/parameters.rb +75 -1
- data/lib/swagger_docs_generator/parser/actions/response.rb +57 -3
- data/lib/swagger_docs_generator/parser/model.rb +24 -0
- data/lib/swagger_docs_generator/parser/models/active_record.rb +46 -0
- data/lib/swagger_docs_generator/parser/models/mongo.rb +48 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c5734093ec6f9cbab3b957e7a2a6d90b0d780ae
|
4
|
+
data.tar.gz: 96a39e44e18eadde0f0e0a530c41437d84f00e71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00cf5fbd1e2fa923f38f64ef2c8ddd15f3d148682b1967b8d99aa7f6876ab395db61049e5088281b5ba192a89877f996e5a06c7c6a48c50edee01f33573f4127
|
7
|
+
data.tar.gz: 4b8db2dddcc67381a419f5bf84dc54cf32e71253914b6953df2df56ba78a793471b33c926d39d267c241bf700d5e1619feadfc539a0597509871ceb9da6b1d51
|
@@ -11,10 +11,10 @@ module SwaggerDocsGenerator
|
|
11
11
|
attr_reader :swagger_file
|
12
12
|
|
13
13
|
def initialize
|
14
|
+
@hash = {}
|
14
15
|
@file = 'swagger.json'
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@version = File.join(@path, SwaggerDocsGenerator.configure_info.version)
|
16
|
+
@swagger_file = File.join(path, @file)
|
17
|
+
@version = File.join(path, SwaggerDocsGenerator.configure_info.version)
|
18
18
|
create_version_folder
|
19
19
|
end
|
20
20
|
|
@@ -25,14 +25,20 @@ module SwaggerDocsGenerator
|
|
25
25
|
end
|
26
26
|
|
27
27
|
# Delete files temporary
|
28
|
+
# @todo necessary ?
|
28
29
|
def delete_temporary_files
|
29
|
-
FileUtils.rm_rf(@version)
|
30
|
+
# FileUtils.rm_rf(@version)
|
30
31
|
end
|
31
32
|
|
32
33
|
private
|
33
34
|
|
34
35
|
attr_reader :meta
|
35
36
|
|
37
|
+
# :reek:UtilityFunction
|
38
|
+
def path
|
39
|
+
File.join(Dir.pwd, '/public')
|
40
|
+
end
|
41
|
+
|
36
42
|
def delete_file_before
|
37
43
|
File.delete(@swagger_file) if File.exist?(@swagger_file)
|
38
44
|
end
|
@@ -41,13 +47,24 @@ module SwaggerDocsGenerator
|
|
41
47
|
FileUtils.mkdir_p(@version) unless File.directory?(@version)
|
42
48
|
end
|
43
49
|
|
44
|
-
# :reek:UtilityFunction
|
45
50
|
def write_in_swagger_file
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
+
write_in_swagger_file_configurations
|
52
|
+
write_in_swagger_file_controllers
|
53
|
+
write_in_swagger_file_models
|
54
|
+
end
|
55
|
+
|
56
|
+
def write_in_swagger_file_configurations
|
57
|
+
@hash.merge!(MetadataConfiguration.new.construct_swagger_file)
|
58
|
+
@hash.merge!(MetadataInfo.new.construct_swagger_file)
|
59
|
+
end
|
60
|
+
|
61
|
+
def write_in_swagger_file_controllers
|
62
|
+
@hash.merge!(MetadataPath.new.construct_swagger_file)
|
63
|
+
@hash.merge!(MetadataTag.new.construct_swagger_file)
|
64
|
+
end
|
65
|
+
|
66
|
+
def write_in_swagger_file_models
|
67
|
+
@hash.merge!(MetadataDefinition.new.construct_swagger_file)
|
51
68
|
end
|
52
69
|
|
53
70
|
def agregate_metadata
|
@@ -7,8 +7,8 @@ module SwaggerDocsGenerator
|
|
7
7
|
# Abstract class for metadata provide to controlloer in Rails application
|
8
8
|
class MetadataController < Metadata
|
9
9
|
def initialize
|
10
|
-
@
|
11
|
-
|
10
|
+
@file_path = File.join(Dir.pwd, 'public',
|
11
|
+
SwaggerDocsGenerator.configure_info.version)
|
12
12
|
conf = SwaggerDocsGenerator.configure.base_controller
|
13
13
|
@controllers = if conf.is_a?(String)
|
14
14
|
ApplicationController.subclasses
|
@@ -19,9 +19,10 @@ module SwaggerDocsGenerator
|
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
|
-
attr_accessor :controllers, :
|
22
|
+
attr_accessor :controllers, :file_path
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
require 'swagger_docs_generator/metadata/path'
|
27
27
|
require 'swagger_docs_generator/metadata/tag'
|
28
|
+
require 'swagger_docs_generator/metadata/definition'
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'swagger_docs_generator/parser/model'
|
4
|
+
|
5
|
+
module SwaggerDocsGenerator
|
6
|
+
# # Metadata generated
|
7
|
+
#
|
8
|
+
# Generate metadata for block definition in swagger file
|
9
|
+
#
|
10
|
+
# @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#definitions-object
|
11
|
+
class MetadataDefinition < MetadataController
|
12
|
+
def initialize
|
13
|
+
super
|
14
|
+
@model = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def construct_swagger_file
|
18
|
+
{ definitions: find_models }
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
# :reek:NilCheck
|
24
|
+
def find_models
|
25
|
+
hash = {}
|
26
|
+
controllers.each do |controller|
|
27
|
+
data = each_controller(controller)
|
28
|
+
hash.merge!(data) unless data.nil?
|
29
|
+
end
|
30
|
+
hash
|
31
|
+
end
|
32
|
+
|
33
|
+
def each_controller(controller)
|
34
|
+
@model = Model.new(controller)
|
35
|
+
contruct_hash
|
36
|
+
rescue NameError => message
|
37
|
+
puts "Error model name : #{message.name}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def contruct_hash
|
41
|
+
{
|
42
|
+
@model.name => {
|
43
|
+
type: 'object',
|
44
|
+
properties: @model.attribute_properties
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -5,6 +5,9 @@ module SwaggerDocsGenerator
|
|
5
5
|
#
|
6
6
|
# Metadata generated in swagger json file
|
7
7
|
class Metadata
|
8
|
+
ACCEPT = %i(title version contact description host schemes base_path
|
9
|
+
swagger).freeze
|
10
|
+
|
8
11
|
def initialize
|
9
12
|
@config = nil
|
10
13
|
end
|
@@ -12,7 +15,9 @@ module SwaggerDocsGenerator
|
|
12
15
|
def construct_swagger_file
|
13
16
|
hash = {}
|
14
17
|
self.class.protected_instance_methods.each do |method|
|
15
|
-
|
18
|
+
if ACCEPT.include?(method) || method.is_a?(Hash)
|
19
|
+
hash.merge!(send(method)) unless @config.send(method).blank?
|
20
|
+
end
|
16
21
|
end
|
17
22
|
hash
|
18
23
|
end
|
@@ -15,7 +15,7 @@ module SwaggerDocsGenerator
|
|
15
15
|
def construct_swagger_file
|
16
16
|
hash = {}
|
17
17
|
controllers.each do |controller|
|
18
|
-
file = File.join(
|
18
|
+
file = File.join(file_path, "#{controller.controller_name}.json")
|
19
19
|
hash.merge!(JSON.parse(File.read(file))['paths']) if File.exist?(file)
|
20
20
|
end
|
21
21
|
{ paths: hash }
|
@@ -15,7 +15,7 @@ module SwaggerDocsGenerator
|
|
15
15
|
def construct_swagger_file
|
16
16
|
array = []
|
17
17
|
controllers.each do |controller|
|
18
|
-
file = File.join(
|
18
|
+
file = File.join(file_path, "#{controller.controller_name}.json")
|
19
19
|
array.push(JSON.parse(File.read(file))['tags']) if File.exist?(file)
|
20
20
|
end
|
21
21
|
{ tags: array }
|
@@ -39,4 +39,5 @@ require 'swagger_docs_generator/parser/actions/description'
|
|
39
39
|
require 'swagger_docs_generator/parser/actions/response'
|
40
40
|
require 'swagger_docs_generator/parser/actions/consumes'
|
41
41
|
require 'swagger_docs_generator/parser/actions/produces'
|
42
|
+
require 'swagger_docs_generator/parser/actions/deprecated'
|
42
43
|
require 'swagger_docs_generator/parser/actions/parameters'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SwaggerDocsGenerator
|
4
|
+
module Actions
|
5
|
+
# # Test :deprecated
|
6
|
+
#
|
7
|
+
# Complete deprected field for action
|
8
|
+
class Deprecated < Actions
|
9
|
+
VALUE = :deprecated
|
10
|
+
|
11
|
+
def initialize(data)
|
12
|
+
super(VALUE)
|
13
|
+
complete_hash(data)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :reek:UtilityFunction
|
3
4
|
module SwaggerDocsGenerator
|
4
5
|
module Actions
|
5
6
|
# # Test :parameters
|
@@ -10,7 +11,80 @@ module SwaggerDocsGenerator
|
|
10
11
|
|
11
12
|
def initialize(data)
|
12
13
|
super(VALUE)
|
13
|
-
complete_hash(data)
|
14
|
+
complete_hash(data) if data[VALUE].present?
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# name: 0
|
20
|
+
# in: 1 -- [query, header, path, formData, body]
|
21
|
+
# description: 2
|
22
|
+
# type: || schema: 3 -- [string, number, integer, boolean, array, file]
|
23
|
+
# required: 4
|
24
|
+
# other: 5
|
25
|
+
def complete_hash(data)
|
26
|
+
all_parameters = []
|
27
|
+
raw ||= data[key]
|
28
|
+
raw.each do |parameter|
|
29
|
+
all_parameters.push(write_param(parameter))
|
30
|
+
end
|
31
|
+
hash[key] = all_parameters
|
32
|
+
end
|
33
|
+
|
34
|
+
def write_param(param)
|
35
|
+
hash = case param_in(param)
|
36
|
+
when 'body'
|
37
|
+
body(param)
|
38
|
+
else
|
39
|
+
classic(param)
|
40
|
+
end
|
41
|
+
type_or_schema = param[5]
|
42
|
+
hash.merge!(type_or_schema) if type_or_schema.present?
|
43
|
+
hash
|
44
|
+
end
|
45
|
+
|
46
|
+
def classic(param)
|
47
|
+
{
|
48
|
+
name: param_name(param),
|
49
|
+
in: param_in(param),
|
50
|
+
description: param_description(param),
|
51
|
+
type: param_type(param),
|
52
|
+
required: param_required(param)
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
def body(param)
|
57
|
+
{
|
58
|
+
name: param_name(param),
|
59
|
+
in: param_in(param),
|
60
|
+
description: param_description(param),
|
61
|
+
schema: { '$ref': param_schema(param) },
|
62
|
+
required: param_required(param)
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
def param_name(param)
|
67
|
+
param[0].to_s
|
68
|
+
end
|
69
|
+
|
70
|
+
def param_in(param)
|
71
|
+
param[1].to_s.camelize(:lower)
|
72
|
+
end
|
73
|
+
|
74
|
+
def param_description(param)
|
75
|
+
param[2].humanize
|
76
|
+
end
|
77
|
+
|
78
|
+
def param_type(param)
|
79
|
+
param[3]
|
80
|
+
end
|
81
|
+
|
82
|
+
def param_required(param)
|
83
|
+
param[4] || false
|
84
|
+
end
|
85
|
+
|
86
|
+
def param_schema(param)
|
87
|
+
param[3]
|
14
88
|
end
|
15
89
|
end
|
16
90
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :reek:UtilityFunction
|
4
|
+
|
3
5
|
module SwaggerDocsGenerator
|
4
6
|
module Actions
|
5
7
|
# # Test :response
|
@@ -16,9 +18,61 @@ module SwaggerDocsGenerator
|
|
16
18
|
private
|
17
19
|
|
18
20
|
def complete_hash(data)
|
19
|
-
|
20
|
-
|
21
|
-
|
21
|
+
raw = data[key]
|
22
|
+
hash[key] = raw.present? ? each_response(raw) : no_response
|
23
|
+
end
|
24
|
+
|
25
|
+
def each_response(raw)
|
26
|
+
sh = {}
|
27
|
+
raw.each do |code|
|
28
|
+
case code
|
29
|
+
when Array
|
30
|
+
sh.merge!(one_response_with_schema(code))
|
31
|
+
when Integer
|
32
|
+
sh.merge!(one_response(code))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
sh
|
36
|
+
end
|
37
|
+
|
38
|
+
def no_response
|
39
|
+
one_response(200)
|
40
|
+
end
|
41
|
+
|
42
|
+
def one_response(code)
|
43
|
+
response = ActionDispatch::Response.new(code)
|
44
|
+
{ response.code => { description: response.message } }
|
45
|
+
end
|
46
|
+
|
47
|
+
# :reek:FeatureEnvy
|
48
|
+
def one_response_with_schema(code)
|
49
|
+
key = code[0]
|
50
|
+
response = ActionDispatch::Response.new(key)
|
51
|
+
{
|
52
|
+
response.code => {
|
53
|
+
'description' => response.message,
|
54
|
+
'schema' => type_or_not(code)
|
55
|
+
}
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
def type_or_not(code)
|
60
|
+
code.length.eql?(3) ? include_type(code) : no_type(code)
|
61
|
+
end
|
62
|
+
|
63
|
+
def include_type(code)
|
64
|
+
{
|
65
|
+
'type' => code[1],
|
66
|
+
'items' => {
|
67
|
+
'$ref' => code[2]
|
68
|
+
}
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
def no_type(code)
|
73
|
+
{
|
74
|
+
'$ref' => code[1]
|
75
|
+
}
|
22
76
|
end
|
23
77
|
end
|
24
78
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'swagger_docs_generator/parser/models/mongo'
|
4
|
+
require 'swagger_docs_generator/parser/models/active_record'
|
5
|
+
|
6
|
+
module SwaggerDocsGenerator
|
7
|
+
# Parser models
|
8
|
+
class Model
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
def initialize(controller)
|
12
|
+
@name = controller.controller_name.singularize.camelize
|
13
|
+
@orm = if defined?(Mongoid)
|
14
|
+
ModelMongo.new(name)
|
15
|
+
else
|
16
|
+
ModelActiveRecord.new(name)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def attribute_properties
|
21
|
+
@orm.attribute_properties
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Lint/Eval
|
4
|
+
module SwaggerDocsGenerator
|
5
|
+
# # Parse Active Record model
|
6
|
+
class ModelActiveRecord
|
7
|
+
NAME = :active_record
|
8
|
+
TYPES = {
|
9
|
+
'binary' => { type: 'string', format: 'binary' },
|
10
|
+
'boolean' => { type: 'boolean' },
|
11
|
+
'date' => { type: 'string', format: 'date' },
|
12
|
+
'datetime' => { type: 'string', format: 'date-time' },
|
13
|
+
'decimal' => { type: 'number', format: 'double' },
|
14
|
+
'float' => { type: 'number', format: 'float' },
|
15
|
+
'integer' => { type: 'integer', format: 'int32' },
|
16
|
+
'bigint' => { type: 'integer', format: 'int64' },
|
17
|
+
'primary_key' => { type: 'integer', format: 'int32' },
|
18
|
+
'references' => { type: 'integer', format: 'int32' },
|
19
|
+
'string' => { type: 'string' },
|
20
|
+
'text' => { type: 'string' },
|
21
|
+
'time' => { type: 'string', format: 'date-time' },
|
22
|
+
'timestamp' => { type: 'string', format: 'date-time' }
|
23
|
+
}.freeze
|
24
|
+
|
25
|
+
def initialize(model)
|
26
|
+
@model = eval(model)
|
27
|
+
end
|
28
|
+
|
29
|
+
def attribute_properties
|
30
|
+
propertie = {}
|
31
|
+
@model.columns_hash.each do |name, _value|
|
32
|
+
propertie.merge!(attribute_propertie(name))
|
33
|
+
end
|
34
|
+
propertie
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def attribute_propertie(name)
|
40
|
+
{
|
41
|
+
name => TYPES[@model.columns_hash[name].type.to_s]
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
# rubocop:enable Lint/Eval
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Lint/Eval
|
4
|
+
module SwaggerDocsGenerator
|
5
|
+
# # Parse Mongo model
|
6
|
+
class ModelMongo
|
7
|
+
NAME = :mongo
|
8
|
+
TYPES = {
|
9
|
+
'Array' => { type: 'string' },
|
10
|
+
'BigDecimal' => { type: 'number', format: 'double' },
|
11
|
+
'Mongoid::Boolean' => { type: 'boolean' },
|
12
|
+
'Date' => { type: 'string', format: 'date' },
|
13
|
+
'DateTime' => { type: 'string', format: 'date-time' },
|
14
|
+
'Float' => { type: 'number', format: 'float' },
|
15
|
+
'Hash' => { type: 'string' },
|
16
|
+
'Integer' => { type: 'integer', format: 'int64' },
|
17
|
+
'BSON::ObjectId' => { type: 'string' },
|
18
|
+
'Object' => { type: 'string' },
|
19
|
+
'BSON::Binary' => { type: 'string', format: 'binary' },
|
20
|
+
'Range' => { type: 'string' },
|
21
|
+
'String' => { type: 'string' },
|
22
|
+
'Symbol' => { type: 'string' },
|
23
|
+
'Time' => { type: 'string', format: 'date-time' },
|
24
|
+
'TimeWithZone' => { type: 'string', format: 'date-time' }
|
25
|
+
}.freeze
|
26
|
+
|
27
|
+
def initialize(model)
|
28
|
+
@model = eval(model)
|
29
|
+
end
|
30
|
+
|
31
|
+
def attribute_properties
|
32
|
+
propertie = {}
|
33
|
+
@model.fields.each do |name, _value|
|
34
|
+
propertie.merge!(attribute_propertie(name))
|
35
|
+
end
|
36
|
+
propertie
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def attribute_propertie(name)
|
42
|
+
{
|
43
|
+
name => TYPES.fetch(@model.fields[name].type.to_s)
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
# rubocop:enable Lint/Eval
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swagger_docs_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- VAILLANT Jeremy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- lib/swagger_docs_generator/info.rb
|
163
163
|
- lib/swagger_docs_generator/metadata/configuration.rb
|
164
164
|
- lib/swagger_docs_generator/metadata/controller.rb
|
165
|
+
- lib/swagger_docs_generator/metadata/definition.rb
|
165
166
|
- lib/swagger_docs_generator/metadata/info.rb
|
166
167
|
- lib/swagger_docs_generator/metadata/metadata.rb
|
167
168
|
- lib/swagger_docs_generator/metadata/path.rb
|
@@ -170,6 +171,7 @@ files:
|
|
170
171
|
- lib/swagger_docs_generator/parser/action.rb
|
171
172
|
- lib/swagger_docs_generator/parser/actions/actions.rb
|
172
173
|
- lib/swagger_docs_generator/parser/actions/consumes.rb
|
174
|
+
- lib/swagger_docs_generator/parser/actions/deprecated.rb
|
173
175
|
- lib/swagger_docs_generator/parser/actions/description.rb
|
174
176
|
- lib/swagger_docs_generator/parser/actions/parameters.rb
|
175
177
|
- lib/swagger_docs_generator/parser/actions/produces.rb
|
@@ -177,6 +179,9 @@ files:
|
|
177
179
|
- lib/swagger_docs_generator/parser/actions/summary.rb
|
178
180
|
- lib/swagger_docs_generator/parser/actions/tags.rb
|
179
181
|
- lib/swagger_docs_generator/parser/controller.rb
|
182
|
+
- lib/swagger_docs_generator/parser/model.rb
|
183
|
+
- lib/swagger_docs_generator/parser/models/active_record.rb
|
184
|
+
- lib/swagger_docs_generator/parser/models/mongo.rb
|
180
185
|
- lib/swagger_docs_generator/parser/parser.rb
|
181
186
|
- lib/swagger_docs_generator/railtie.rb
|
182
187
|
- lib/tasks/swagger.rake
|