swagger_docs_generator 0.1.1 → 0.1.2
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/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
|