r2-oas 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.github/ISSUE_TEMPLATE.md +12 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +224 -0
- data/.travis.yml +22 -0
- data/CHANGELOG.md +3 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +207 -0
- data/LICENSE.txt +21 -0
- data/README.ja.md +585 -0
- data/README.md +582 -0
- data/Rakefile +8 -0
- data/bin/console +12 -0
- data/bin/setup +8 -0
- data/docs/HOW_TO_ANALYZE_DOCS.md +875 -0
- data/docs/HOW_TO_CLEAN_DOCS.md +19 -0
- data/docs/HOW_TO_DEPLOY_SWAGGER_DOC.md +839 -0
- data/docs/HOW_TO_DISPLAY_PATHS_LIST.md +28 -0
- data/docs/HOW_TO_DISPLAY_PATHS_STATS.md +53 -0
- data/docs/HOW_TO_GENERATE_DOCS.md +256 -0
- data/docs/HOW_TO_MONITOR_SWAGGER_DOC.md +219 -0
- data/docs/HOW_TO_START_SWAGGER_EDITOR.md +218 -0
- data/docs/HOW_TO_START_SWAGGER_UI.md +262 -0
- data/docs/HOW_TO_USE_HOOK_WHEN_GENERATE_DOC.md +244 -0
- data/docs/HOW_TO_USE_SCHEMA_NAMESPACE.md +176 -0
- data/docs/HOW_TO_USE_TAG_NAMESPACE.md +176 -0
- data/docs/versions/v3.md +155 -0
- data/lib/r2-oas.rb +36 -0
- data/lib/r2-oas/app_configuration.rb +102 -0
- data/lib/r2-oas/app_configuration/server.rb +35 -0
- data/lib/r2-oas/app_configuration/swagger.rb +35 -0
- data/lib/r2-oas/app_configuration/swagger/editor.rb +47 -0
- data/lib/r2-oas/app_configuration/swagger/ui.rb +45 -0
- data/lib/r2-oas/app_configuration/tool.rb +31 -0
- data/lib/r2-oas/app_configuration/tool/paths/stats.rb +43 -0
- data/lib/r2-oas/base.rb +48 -0
- data/lib/r2-oas/configuration.rb +69 -0
- data/lib/r2-oas/configuration/paths_config.rb +44 -0
- data/lib/r2-oas/deploy/client.rb +43 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/favicon-16x16.png +0 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/favicon-32x32.png +0 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/oauth2-redirect.html +68 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui-bundle.js +134 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui-bundle.js.map +1 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui-standalone-preset.js +22 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui-standalone-preset.js.map +1 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui.css +4 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui.css.map +1 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui.js +9 -0
- data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui.js.map +1 -0
- data/lib/r2-oas/deploy/swagger-ui/index.html.erb +60 -0
- data/lib/r2-oas/errors.rb +7 -0
- data/lib/r2-oas/hooks/global_hook.rb +20 -0
- data/lib/r2-oas/hooks/hook.rb +77 -0
- data/lib/r2-oas/hooks/repository.rb +15 -0
- data/lib/r2-oas/logger/stdout_logger.rb +129 -0
- data/lib/r2-oas/pluggable_configuration.rb +33 -0
- data/lib/r2-oas/plugins/schema/v3/object/hookable_base_object.rb +100 -0
- data/lib/r2-oas/routing/adjustor.rb +44 -0
- data/lib/r2-oas/routing/base.rb +12 -0
- data/lib/r2-oas/routing/components/all.rb +5 -0
- data/lib/r2-oas/routing/components/base_component.rb +10 -0
- data/lib/r2-oas/routing/components/path_component.rb +67 -0
- data/lib/r2-oas/routing/components/request_component.rb +75 -0
- data/lib/r2-oas/routing/components/verb_component.rb +21 -0
- data/lib/r2-oas/routing/parser.rb +93 -0
- data/lib/r2-oas/schema/analyzer.rb +23 -0
- data/lib/r2-oas/schema/base.rb +11 -0
- data/lib/r2-oas/schema/cleaner.rb +23 -0
- data/lib/r2-oas/schema/editor.rb +120 -0
- data/lib/r2-oas/schema/generator.rb +23 -0
- data/lib/r2-oas/schema/manager/file/path_item_file_manager.rb +24 -0
- data/lib/r2-oas/schema/monitor.rb +52 -0
- data/lib/r2-oas/schema/squeezer.rb +23 -0
- data/lib/r2-oas/schema/ui.rb +74 -0
- data/lib/r2-oas/schema/v3/analyzer.rb +58 -0
- data/lib/r2-oas/schema/v3/analyzer/base_analyzer.rb +76 -0
- data/lib/r2-oas/schema/v3/analyzer/components/object_analyzer.rb +38 -0
- data/lib/r2-oas/schema/v3/analyzer/components_analyzer.rb +30 -0
- data/lib/r2-oas/schema/v3/analyzer/path_analyzer.rb +116 -0
- data/lib/r2-oas/schema/v3/analyzer/tag_analyzer.rb +38 -0
- data/lib/r2-oas/schema/v3/base.rb +28 -0
- data/lib/r2-oas/schema/v3/cleaner.rb +19 -0
- data/lib/r2-oas/schema/v3/cleaner/base_cleaner.rb +30 -0
- data/lib/r2-oas/schema/v3/cleaner/components_cleaner.rb +42 -0
- data/lib/r2-oas/schema/v3/generator.rb +28 -0
- data/lib/r2-oas/schema/v3/generator/base_generator.rb +88 -0
- data/lib/r2-oas/schema/v3/generator/components/object_generator.rb +83 -0
- data/lib/r2-oas/schema/v3/generator/components/request_body_generator.rb +45 -0
- data/lib/r2-oas/schema/v3/generator/components_generator.rb +38 -0
- data/lib/r2-oas/schema/v3/generator/doc_generator.rb +49 -0
- data/lib/r2-oas/schema/v3/generator/path_generator.rb +90 -0
- data/lib/r2-oas/schema/v3/generator/schema_generator.rb +78 -0
- data/lib/r2-oas/schema/v3/manager/diff/base_array_diff_manager.rb +60 -0
- data/lib/r2-oas/schema/v3/manager/diff/base_diff_manager.rb +29 -0
- data/lib/r2-oas/schema/v3/manager/diff/base_hash_diff_manager.rb +95 -0
- data/lib/r2-oas/schema/v3/manager/diff/components_diff_manager.rb +19 -0
- data/lib/r2-oas/schema/v3/manager/diff/tag_diff_manager.rb +17 -0
- data/lib/r2-oas/schema/v3/manager/file/base_file_manager.rb +60 -0
- data/lib/r2-oas/schema/v3/manager/file/components_file_manager.rb +22 -0
- data/lib/r2-oas/schema/v3/manager/file/include_ref_base_file_manager.rb +88 -0
- data/lib/r2-oas/schema/v3/manager/file/path_item_file_manager.rb +22 -0
- data/lib/r2-oas/schema/v3/manager/file_manager.rb +12 -0
- data/lib/r2-oas/schema/v3/manager/pathname_manager.rb +73 -0
- data/lib/r2-oas/schema/v3/object/base_object.rb +65 -0
- data/lib/r2-oas/schema/v3/object/components/request_body_object.rb +92 -0
- data/lib/r2-oas/schema/v3/object/components/schema_object.rb +55 -0
- data/lib/r2-oas/schema/v3/object/components_object.rb +81 -0
- data/lib/r2-oas/schema/v3/object/external_document_object.rb +19 -0
- data/lib/r2-oas/schema/v3/object/info_object.rb +34 -0
- data/lib/r2-oas/schema/v3/object/openapi_object.rb +58 -0
- data/lib/r2-oas/schema/v3/object/path_item_object.rb +167 -0
- data/lib/r2-oas/schema/v3/object/paths_object.rb +74 -0
- data/lib/r2-oas/schema/v3/object/public.rb +9 -0
- data/lib/r2-oas/schema/v3/object/server_object.rb +21 -0
- data/lib/r2-oas/schema/v3/object/tag_object.rb +36 -0
- data/lib/r2-oas/schema/v3/squeezer.rb +29 -0
- data/lib/r2-oas/schema/v3/squeezer/base_squeezer.rb +37 -0
- data/lib/r2-oas/schema/v3/squeezer/path_squeezer.rb +28 -0
- data/lib/r2-oas/schema/v3/squeezer/tag_squeezer.rb +19 -0
- data/lib/r2-oas/shared/all.rb +3 -0
- data/lib/r2-oas/shared/sortable.rb +23 -0
- data/lib/r2-oas/task.rb +11 -0
- data/lib/r2-oas/task_logging.rb +39 -0
- data/lib/r2-oas/tasks/common.rake +26 -0
- data/lib/r2-oas/tasks/main.rake +117 -0
- data/lib/r2-oas/tasks/tool.rake +79 -0
- data/lib/r2-oas/tool/paths/ls.rb +15 -0
- data/lib/r2-oas/tool/paths/stats.rb +84 -0
- data/lib/r2-oas/version.rb +5 -0
- data/r2-oas.gemspec +56 -0
- metadata +373 -0
data/docs/versions/v3.md
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
# v3
|
2
|
+
|
3
|
+
## Support Schema
|
4
|
+
|
5
|
+
Generate schema yaml like this:
|
6
|
+
|
7
|
+
- Schema
|
8
|
+
- openapi
|
9
|
+
- info
|
10
|
+
- tags
|
11
|
+
- paths
|
12
|
+
- externalDocs
|
13
|
+
- servers
|
14
|
+
- security
|
15
|
+
- components
|
16
|
+
- schemas
|
17
|
+
- requestBodies
|
18
|
+
- securitySchemes
|
19
|
+
- parameters
|
20
|
+
- responses (experimental)
|
21
|
+
- examples (experimental)
|
22
|
+
- headers (experimental)
|
23
|
+
- links (experimental)
|
24
|
+
- callbacks (experimental)
|
25
|
+
|
26
|
+
## openapi
|
27
|
+
|
28
|
+
Support field like this:
|
29
|
+
|
30
|
+
|field name|field type|
|
31
|
+
|----------|----------|
|
32
|
+
|`openapi`|`string`|
|
33
|
+
|
34
|
+
[show more...](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#openapi-object)
|
35
|
+
|
36
|
+
## info
|
37
|
+
|
38
|
+
Support field like this:
|
39
|
+
|
40
|
+
|field name|field type|
|
41
|
+
|----------|----------|
|
42
|
+
|`title`|`string`|
|
43
|
+
|`description`|`string`|
|
44
|
+
|`termsOfService`|`string`|
|
45
|
+
|`contact`|`Contact Object`|
|
46
|
+
|`license`|`License Object`|
|
47
|
+
|`version`|`string`|
|
48
|
+
|
49
|
+
[show more...](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#info-object)
|
50
|
+
|
51
|
+
## tags
|
52
|
+
|
53
|
+
Support field like this:
|
54
|
+
|
55
|
+
|field name|field type|
|
56
|
+
|----------|----------|
|
57
|
+
|`name`|`string`|
|
58
|
+
|`description`|`string`|
|
59
|
+
|`externalDocs`|`External Document Object`|
|
60
|
+
|
61
|
+
[show more...](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#tagObject)
|
62
|
+
|
63
|
+
## paths
|
64
|
+
|
65
|
+
Support field like this:
|
66
|
+
|
67
|
+
|field name|field type|
|
68
|
+
|----------|----------|
|
69
|
+
|`/{path}`|`Path Item Object`|
|
70
|
+
|
71
|
+
[show more...](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#paths-object)
|
72
|
+
|
73
|
+
for example:
|
74
|
+
```
|
75
|
+
paths:
|
76
|
+
"/users":
|
77
|
+
post:
|
78
|
+
tags:
|
79
|
+
- user
|
80
|
+
summary: post summary
|
81
|
+
description: post description
|
82
|
+
responses:
|
83
|
+
default:
|
84
|
+
description: ''
|
85
|
+
deprecated: false
|
86
|
+
"/{model_name}/{id}":
|
87
|
+
get:
|
88
|
+
tags:
|
89
|
+
- rails_admin/main
|
90
|
+
summary: get summary
|
91
|
+
description: get description
|
92
|
+
responses:
|
93
|
+
default:
|
94
|
+
description: ''
|
95
|
+
'200':
|
96
|
+
description: rails_admin/main description
|
97
|
+
content:
|
98
|
+
application/json:
|
99
|
+
schema:
|
100
|
+
"$ref": "#/components/schemas/Main"
|
101
|
+
deprecated: false
|
102
|
+
parameters:
|
103
|
+
- name: model_name
|
104
|
+
in: path
|
105
|
+
description: model_name
|
106
|
+
required: true
|
107
|
+
schema:
|
108
|
+
type: string
|
109
|
+
- name: id
|
110
|
+
in: path
|
111
|
+
description: id
|
112
|
+
required: true
|
113
|
+
schema:
|
114
|
+
type: integer
|
115
|
+
```
|
116
|
+
|
117
|
+
## externalDocs
|
118
|
+
|
119
|
+
Support field like this:
|
120
|
+
|
121
|
+
|field name|field type|
|
122
|
+
|----------|----------|
|
123
|
+
|`description`|`string`|
|
124
|
+
|`url`|`string`|
|
125
|
+
|
126
|
+
[show more...](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#external-documentation-object)
|
127
|
+
|
128
|
+
## servers
|
129
|
+
|
130
|
+
Support field like this:
|
131
|
+
|
132
|
+
|field name|field type|
|
133
|
+
|----------|----------|
|
134
|
+
|`url`|`string`|
|
135
|
+
|`description`|`string`|
|
136
|
+
|
137
|
+
[show more...](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#server-object)
|
138
|
+
|
139
|
+
## components
|
140
|
+
|
141
|
+
Support field like this:
|
142
|
+
|
143
|
+
|field name|field type|
|
144
|
+
|----------|----------|
|
145
|
+
|`schemas`| `Schema Object` |
|
146
|
+
|`requestBodies`| `Request Body Object`|
|
147
|
+
|`securitySchemes`| `Security Schemes Object` |
|
148
|
+
|`parameters`| `Parameter Object` |
|
149
|
+
|`responses`| `Response Object` |
|
150
|
+
|`examples`| `Example Object` |
|
151
|
+
|`headers`| `Header Object` |
|
152
|
+
|`links`|`Link Object` |
|
153
|
+
|`callbacks`| `Callback Object`|
|
154
|
+
|
155
|
+
[show more...](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#components-object)
|
data/lib/r2-oas.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'r2-oas/version'
|
4
|
+
require 'r2-oas/configuration'
|
5
|
+
require 'r2-oas/errors'
|
6
|
+
require 'r2-oas/schema/v3/object/public'
|
7
|
+
|
8
|
+
module R2OAS
|
9
|
+
extend ActiveSupport::Autoload
|
10
|
+
|
11
|
+
if !defined?(::Rails)
|
12
|
+
raise NoImplementError, 'Can not load Rails'
|
13
|
+
# support Rails version
|
14
|
+
elsif ::Rails::VERSION::STRING >= '4.2.5.1'
|
15
|
+
extend Configuration
|
16
|
+
require 'r2-oas/task'
|
17
|
+
|
18
|
+
autoload :Base, 'r2-oas/base'
|
19
|
+
autoload :NoImplementError, 'r2-oas/errors'
|
20
|
+
autoload :NoFileExistsError, 'r2-oas/errors'
|
21
|
+
autoload :NoSupportError, 'r2-oas/errors'
|
22
|
+
autoload :Sortable, 'r2-oas/shared/all'
|
23
|
+
|
24
|
+
module Schema
|
25
|
+
extend ActiveSupport::Autoload
|
26
|
+
|
27
|
+
autoload :Base, 'r2-oas/schema/base'
|
28
|
+
autoload :Generator, 'r2-oas/schema/generator'
|
29
|
+
autoload :Analyzer, 'r2-oas/schema/analyzer'
|
30
|
+
autoload :Squeezer, 'r2-oas/schema/squeezer'
|
31
|
+
autoload :Cleaner, 'r2-oas/schema/cleaner'
|
32
|
+
end
|
33
|
+
else
|
34
|
+
raise NoImplementError, "Do not support Rails Version: #{::Rails::VERSION::STRING}"
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'app_configuration/server'
|
4
|
+
require_relative 'app_configuration/swagger'
|
5
|
+
require_relative 'app_configuration/tool'
|
6
|
+
|
7
|
+
module R2OAS
|
8
|
+
module AppConfiguration
|
9
|
+
DEFAULT_VERSION = :v3
|
10
|
+
DEFAULT_ROOT_DIR_PATH = './oas_docs'
|
11
|
+
DEFAULT_SCHEMA_SAVE_DIR_NAME = 'src'
|
12
|
+
DEFAULT_DOC_SAVE_FILE_NAME = 'oas_doc.yml'
|
13
|
+
DEFAULT_FORCE_UPDATE_SCHEMA = false
|
14
|
+
DEFAULT_USE_TAG_NAMESPACE = true
|
15
|
+
DEFAULT_USE_SCHEMA_NAMESPACE = true
|
16
|
+
DEFAULT_SERVER = Server.new
|
17
|
+
DEFAULT_INTERVAL_TO_SAVE_EDITED_TMP_SCHEMA = 15
|
18
|
+
DEFAULT_SWAGGER = Swagger.new
|
19
|
+
# rubocop:disable Style/MutableConstant
|
20
|
+
DEFAULT_HTTP_STATUSES_WHEN_HTTP_METHOD = {
|
21
|
+
get: {
|
22
|
+
default: %w[200 422],
|
23
|
+
path_parameter: %w[200 404 422]
|
24
|
+
},
|
25
|
+
post: {
|
26
|
+
default: %w[201 422],
|
27
|
+
path_parameter: %w[201 404 422]
|
28
|
+
},
|
29
|
+
patch: {
|
30
|
+
default: %w[204 422],
|
31
|
+
path_parameter: %w[204 404 422]
|
32
|
+
},
|
33
|
+
put: {
|
34
|
+
default: %w[204 422],
|
35
|
+
path_parameter: %w[204 404 422]
|
36
|
+
},
|
37
|
+
delete: {
|
38
|
+
default: %w[200 422],
|
39
|
+
path_parameter: %w[200 404 422]
|
40
|
+
}
|
41
|
+
}
|
42
|
+
DEFAULT_HTTP_METHODS_WHEN_GENERATE_REQUEST_BODY = %w[post patch put]
|
43
|
+
# rubocop:enable Style/MutableConstant
|
44
|
+
DEFAULT_TOOL = Tool.new
|
45
|
+
# :dot or :underbar
|
46
|
+
DEFAULT_NAMESPACE_TYPE = :underbar
|
47
|
+
DEFAULT_DEPLOY_DIR_PATH = "./deploy_docs"
|
48
|
+
|
49
|
+
PUBLIC_VALID_OPTIONS_KEYS = %i[
|
50
|
+
version
|
51
|
+
root_dir_path
|
52
|
+
schema_save_dir_name
|
53
|
+
doc_save_file_name
|
54
|
+
force_update_schema
|
55
|
+
use_tag_namespace
|
56
|
+
use_schema_namespace
|
57
|
+
server
|
58
|
+
interval_to_save_edited_tmp_schema
|
59
|
+
swagger
|
60
|
+
http_statuses_when_http_method
|
61
|
+
http_methods_when_generate_request_body
|
62
|
+
tool
|
63
|
+
namespace_type
|
64
|
+
deploy_dir_path
|
65
|
+
].freeze
|
66
|
+
|
67
|
+
UNPUBLIC_VALID_OPTIONS_KEYS = %i[
|
68
|
+
paths_config
|
69
|
+
logger
|
70
|
+
].freeze
|
71
|
+
|
72
|
+
VALID_OPTIONS_KEYS = PUBLIC_VALID_OPTIONS_KEYS + UNPUBLIC_VALID_OPTIONS_KEYS
|
73
|
+
|
74
|
+
attr_accessor *PUBLIC_VALID_OPTIONS_KEYS
|
75
|
+
|
76
|
+
def options
|
77
|
+
VALID_OPTIONS_KEYS.inject({}) do |option, key|
|
78
|
+
option.merge!(key => send(key))
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
module_function def set_default(target)
|
85
|
+
target.version = DEFAULT_VERSION
|
86
|
+
target.root_dir_path = DEFAULT_ROOT_DIR_PATH
|
87
|
+
target.schema_save_dir_name = DEFAULT_SCHEMA_SAVE_DIR_NAME
|
88
|
+
target.doc_save_file_name = DEFAULT_DOC_SAVE_FILE_NAME
|
89
|
+
target.force_update_schema = DEFAULT_FORCE_UPDATE_SCHEMA
|
90
|
+
target.use_tag_namespace = DEFAULT_USE_TAG_NAMESPACE
|
91
|
+
target.use_schema_namespace = DEFAULT_USE_SCHEMA_NAMESPACE
|
92
|
+
target.server = DEFAULT_SERVER
|
93
|
+
target.interval_to_save_edited_tmp_schema = DEFAULT_INTERVAL_TO_SAVE_EDITED_TMP_SCHEMA
|
94
|
+
target.swagger = DEFAULT_SWAGGER
|
95
|
+
target.http_statuses_when_http_method = DEFAULT_HTTP_STATUSES_WHEN_HTTP_METHOD
|
96
|
+
target.tool = DEFAULT_TOOL
|
97
|
+
target.http_methods_when_generate_request_body = DEFAULT_HTTP_METHODS_WHEN_GENERATE_REQUEST_BODY
|
98
|
+
target.namespace_type = DEFAULT_NAMESPACE_TYPE
|
99
|
+
target.deploy_dir_path = DEFAULT_DEPLOY_DIR_PATH
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module R2OAS
|
4
|
+
module AppConfiguration
|
5
|
+
class Server
|
6
|
+
DEFAULT_URL = 'http://localhost:3000'
|
7
|
+
DEFAULT_DESCRIPTION = 'localhost'
|
8
|
+
|
9
|
+
VALID_OPTIONS_KEYS = [
|
10
|
+
:data
|
11
|
+
].freeze
|
12
|
+
|
13
|
+
attr_accessor *VALID_OPTIONS_KEYS
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
set_default
|
17
|
+
end
|
18
|
+
|
19
|
+
def configure
|
20
|
+
yield self
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def set_default
|
26
|
+
self.data = [
|
27
|
+
{
|
28
|
+
url: DEFAULT_URL,
|
29
|
+
description: DEFAULT_DESCRIPTION
|
30
|
+
}
|
31
|
+
]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'swagger/ui'
|
4
|
+
require_relative 'swagger/editor'
|
5
|
+
|
6
|
+
module R2OAS
|
7
|
+
module AppConfiguration
|
8
|
+
class Swagger
|
9
|
+
DEFAULT_EDITOR = Editor.new
|
10
|
+
DEFAULT_UI = UI.new
|
11
|
+
|
12
|
+
VALID_OPTIONS_KEYS = %i[
|
13
|
+
editor
|
14
|
+
ui
|
15
|
+
].freeze
|
16
|
+
|
17
|
+
attr_accessor *VALID_OPTIONS_KEYS
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
set_default
|
21
|
+
end
|
22
|
+
|
23
|
+
def configure
|
24
|
+
yield self
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def set_default
|
30
|
+
self.editor = DEFAULT_EDITOR
|
31
|
+
self.ui = DEFAULT_UI
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module R2OAS
|
4
|
+
module AppConfiguration
|
5
|
+
class Swagger
|
6
|
+
class Editor
|
7
|
+
DEFAULT_IMAGE = 'swaggerapi/swagger-editor'
|
8
|
+
DEFAULT_PORT = '81'
|
9
|
+
DEFAULT_EXPOSED_PORT = '8080/tcp'
|
10
|
+
DEFAULT_STORAGE_KEY = 'swagger-editor-content' # Fixed
|
11
|
+
DEFAULT_HOST = 'http://localhost' # Fixed
|
12
|
+
|
13
|
+
VALID_OPTIONS_KEYS = %i[
|
14
|
+
image
|
15
|
+
port
|
16
|
+
exposed_port
|
17
|
+
].freeze
|
18
|
+
|
19
|
+
attr_accessor *VALID_OPTIONS_KEYS
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
set_default
|
23
|
+
end
|
24
|
+
|
25
|
+
def configure
|
26
|
+
yield self
|
27
|
+
end
|
28
|
+
|
29
|
+
def url
|
30
|
+
"#{DEFAULT_HOST}:#{port}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def storage_key
|
34
|
+
DEFAULT_STORAGE_KEY
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def set_default
|
40
|
+
self.image = DEFAULT_IMAGE
|
41
|
+
self.port = DEFAULT_PORT
|
42
|
+
self.exposed_port = DEFAULT_EXPOSED_PORT
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module R2OAS
|
4
|
+
module AppConfiguration
|
5
|
+
class Swagger
|
6
|
+
class UI
|
7
|
+
DEFAULT_IMAGE = 'swaggerapi/swagger-ui'
|
8
|
+
DEFAULT_PORT = '8080'
|
9
|
+
DEFAULT_EXPOSED_PORT = '8080/tcp'
|
10
|
+
DEFAULT_VOLUME = '/app/swagger.json'
|
11
|
+
DEFAULT_HOST = 'http://localhost' # Fixed
|
12
|
+
|
13
|
+
VALID_OPTIONS_KEYS = %i[
|
14
|
+
image
|
15
|
+
port
|
16
|
+
exposed_port
|
17
|
+
volume
|
18
|
+
].freeze
|
19
|
+
|
20
|
+
attr_accessor *VALID_OPTIONS_KEYS
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
set_default
|
24
|
+
end
|
25
|
+
|
26
|
+
def configure
|
27
|
+
yield self
|
28
|
+
end
|
29
|
+
|
30
|
+
def url
|
31
|
+
"#{DEFAULT_HOST}:#{port}"
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def set_default
|
37
|
+
self.image = DEFAULT_IMAGE
|
38
|
+
self.port = DEFAULT_PORT
|
39
|
+
self.exposed_port = DEFAULT_EXPOSED_PORT
|
40
|
+
self.volume = DEFAULT_VOLUME
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|