r2-oas 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE.md +12 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
  4. data/.gitignore +12 -0
  5. data/.rspec +3 -0
  6. data/.rubocop.yml +7 -0
  7. data/.rubocop_todo.yml +224 -0
  8. data/.travis.yml +22 -0
  9. data/CHANGELOG.md +3 -0
  10. data/CODE_OF_CONDUCT.md +74 -0
  11. data/Gemfile +12 -0
  12. data/Gemfile.lock +207 -0
  13. data/LICENSE.txt +21 -0
  14. data/README.ja.md +585 -0
  15. data/README.md +582 -0
  16. data/Rakefile +8 -0
  17. data/bin/console +12 -0
  18. data/bin/setup +8 -0
  19. data/docs/HOW_TO_ANALYZE_DOCS.md +875 -0
  20. data/docs/HOW_TO_CLEAN_DOCS.md +19 -0
  21. data/docs/HOW_TO_DEPLOY_SWAGGER_DOC.md +839 -0
  22. data/docs/HOW_TO_DISPLAY_PATHS_LIST.md +28 -0
  23. data/docs/HOW_TO_DISPLAY_PATHS_STATS.md +53 -0
  24. data/docs/HOW_TO_GENERATE_DOCS.md +256 -0
  25. data/docs/HOW_TO_MONITOR_SWAGGER_DOC.md +219 -0
  26. data/docs/HOW_TO_START_SWAGGER_EDITOR.md +218 -0
  27. data/docs/HOW_TO_START_SWAGGER_UI.md +262 -0
  28. data/docs/HOW_TO_USE_HOOK_WHEN_GENERATE_DOC.md +244 -0
  29. data/docs/HOW_TO_USE_SCHEMA_NAMESPACE.md +176 -0
  30. data/docs/HOW_TO_USE_TAG_NAMESPACE.md +176 -0
  31. data/docs/versions/v3.md +155 -0
  32. data/lib/r2-oas.rb +36 -0
  33. data/lib/r2-oas/app_configuration.rb +102 -0
  34. data/lib/r2-oas/app_configuration/server.rb +35 -0
  35. data/lib/r2-oas/app_configuration/swagger.rb +35 -0
  36. data/lib/r2-oas/app_configuration/swagger/editor.rb +47 -0
  37. data/lib/r2-oas/app_configuration/swagger/ui.rb +45 -0
  38. data/lib/r2-oas/app_configuration/tool.rb +31 -0
  39. data/lib/r2-oas/app_configuration/tool/paths/stats.rb +43 -0
  40. data/lib/r2-oas/base.rb +48 -0
  41. data/lib/r2-oas/configuration.rb +69 -0
  42. data/lib/r2-oas/configuration/paths_config.rb +44 -0
  43. data/lib/r2-oas/deploy/client.rb +43 -0
  44. data/lib/r2-oas/deploy/swagger-ui/dist/favicon-16x16.png +0 -0
  45. data/lib/r2-oas/deploy/swagger-ui/dist/favicon-32x32.png +0 -0
  46. data/lib/r2-oas/deploy/swagger-ui/dist/oauth2-redirect.html +68 -0
  47. data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui-bundle.js +134 -0
  48. data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui-bundle.js.map +1 -0
  49. data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui-standalone-preset.js +22 -0
  50. data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui-standalone-preset.js.map +1 -0
  51. data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui.css +4 -0
  52. data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui.css.map +1 -0
  53. data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui.js +9 -0
  54. data/lib/r2-oas/deploy/swagger-ui/dist/swagger-ui.js.map +1 -0
  55. data/lib/r2-oas/deploy/swagger-ui/index.html.erb +60 -0
  56. data/lib/r2-oas/errors.rb +7 -0
  57. data/lib/r2-oas/hooks/global_hook.rb +20 -0
  58. data/lib/r2-oas/hooks/hook.rb +77 -0
  59. data/lib/r2-oas/hooks/repository.rb +15 -0
  60. data/lib/r2-oas/logger/stdout_logger.rb +129 -0
  61. data/lib/r2-oas/pluggable_configuration.rb +33 -0
  62. data/lib/r2-oas/plugins/schema/v3/object/hookable_base_object.rb +100 -0
  63. data/lib/r2-oas/routing/adjustor.rb +44 -0
  64. data/lib/r2-oas/routing/base.rb +12 -0
  65. data/lib/r2-oas/routing/components/all.rb +5 -0
  66. data/lib/r2-oas/routing/components/base_component.rb +10 -0
  67. data/lib/r2-oas/routing/components/path_component.rb +67 -0
  68. data/lib/r2-oas/routing/components/request_component.rb +75 -0
  69. data/lib/r2-oas/routing/components/verb_component.rb +21 -0
  70. data/lib/r2-oas/routing/parser.rb +93 -0
  71. data/lib/r2-oas/schema/analyzer.rb +23 -0
  72. data/lib/r2-oas/schema/base.rb +11 -0
  73. data/lib/r2-oas/schema/cleaner.rb +23 -0
  74. data/lib/r2-oas/schema/editor.rb +120 -0
  75. data/lib/r2-oas/schema/generator.rb +23 -0
  76. data/lib/r2-oas/schema/manager/file/path_item_file_manager.rb +24 -0
  77. data/lib/r2-oas/schema/monitor.rb +52 -0
  78. data/lib/r2-oas/schema/squeezer.rb +23 -0
  79. data/lib/r2-oas/schema/ui.rb +74 -0
  80. data/lib/r2-oas/schema/v3/analyzer.rb +58 -0
  81. data/lib/r2-oas/schema/v3/analyzer/base_analyzer.rb +76 -0
  82. data/lib/r2-oas/schema/v3/analyzer/components/object_analyzer.rb +38 -0
  83. data/lib/r2-oas/schema/v3/analyzer/components_analyzer.rb +30 -0
  84. data/lib/r2-oas/schema/v3/analyzer/path_analyzer.rb +116 -0
  85. data/lib/r2-oas/schema/v3/analyzer/tag_analyzer.rb +38 -0
  86. data/lib/r2-oas/schema/v3/base.rb +28 -0
  87. data/lib/r2-oas/schema/v3/cleaner.rb +19 -0
  88. data/lib/r2-oas/schema/v3/cleaner/base_cleaner.rb +30 -0
  89. data/lib/r2-oas/schema/v3/cleaner/components_cleaner.rb +42 -0
  90. data/lib/r2-oas/schema/v3/generator.rb +28 -0
  91. data/lib/r2-oas/schema/v3/generator/base_generator.rb +88 -0
  92. data/lib/r2-oas/schema/v3/generator/components/object_generator.rb +83 -0
  93. data/lib/r2-oas/schema/v3/generator/components/request_body_generator.rb +45 -0
  94. data/lib/r2-oas/schema/v3/generator/components_generator.rb +38 -0
  95. data/lib/r2-oas/schema/v3/generator/doc_generator.rb +49 -0
  96. data/lib/r2-oas/schema/v3/generator/path_generator.rb +90 -0
  97. data/lib/r2-oas/schema/v3/generator/schema_generator.rb +78 -0
  98. data/lib/r2-oas/schema/v3/manager/diff/base_array_diff_manager.rb +60 -0
  99. data/lib/r2-oas/schema/v3/manager/diff/base_diff_manager.rb +29 -0
  100. data/lib/r2-oas/schema/v3/manager/diff/base_hash_diff_manager.rb +95 -0
  101. data/lib/r2-oas/schema/v3/manager/diff/components_diff_manager.rb +19 -0
  102. data/lib/r2-oas/schema/v3/manager/diff/tag_diff_manager.rb +17 -0
  103. data/lib/r2-oas/schema/v3/manager/file/base_file_manager.rb +60 -0
  104. data/lib/r2-oas/schema/v3/manager/file/components_file_manager.rb +22 -0
  105. data/lib/r2-oas/schema/v3/manager/file/include_ref_base_file_manager.rb +88 -0
  106. data/lib/r2-oas/schema/v3/manager/file/path_item_file_manager.rb +22 -0
  107. data/lib/r2-oas/schema/v3/manager/file_manager.rb +12 -0
  108. data/lib/r2-oas/schema/v3/manager/pathname_manager.rb +73 -0
  109. data/lib/r2-oas/schema/v3/object/base_object.rb +65 -0
  110. data/lib/r2-oas/schema/v3/object/components/request_body_object.rb +92 -0
  111. data/lib/r2-oas/schema/v3/object/components/schema_object.rb +55 -0
  112. data/lib/r2-oas/schema/v3/object/components_object.rb +81 -0
  113. data/lib/r2-oas/schema/v3/object/external_document_object.rb +19 -0
  114. data/lib/r2-oas/schema/v3/object/info_object.rb +34 -0
  115. data/lib/r2-oas/schema/v3/object/openapi_object.rb +58 -0
  116. data/lib/r2-oas/schema/v3/object/path_item_object.rb +167 -0
  117. data/lib/r2-oas/schema/v3/object/paths_object.rb +74 -0
  118. data/lib/r2-oas/schema/v3/object/public.rb +9 -0
  119. data/lib/r2-oas/schema/v3/object/server_object.rb +21 -0
  120. data/lib/r2-oas/schema/v3/object/tag_object.rb +36 -0
  121. data/lib/r2-oas/schema/v3/squeezer.rb +29 -0
  122. data/lib/r2-oas/schema/v3/squeezer/base_squeezer.rb +37 -0
  123. data/lib/r2-oas/schema/v3/squeezer/path_squeezer.rb +28 -0
  124. data/lib/r2-oas/schema/v3/squeezer/tag_squeezer.rb +19 -0
  125. data/lib/r2-oas/shared/all.rb +3 -0
  126. data/lib/r2-oas/shared/sortable.rb +23 -0
  127. data/lib/r2-oas/task.rb +11 -0
  128. data/lib/r2-oas/task_logging.rb +39 -0
  129. data/lib/r2-oas/tasks/common.rake +26 -0
  130. data/lib/r2-oas/tasks/main.rake +117 -0
  131. data/lib/r2-oas/tasks/tool.rake +79 -0
  132. data/lib/r2-oas/tool/paths/ls.rb +15 -0
  133. data/lib/r2-oas/tool/paths/stats.rb +84 -0
  134. data/lib/r2-oas/version.rb +5 -0
  135. data/r2-oas.gemspec +56 -0
  136. metadata +373 -0
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2019 yukihirop
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,585 @@
1
+ # R2-OAS
2
+
3
+ [![Build Status](https://travis-ci.org/yukihirop/r2-oas.svg?branch=master)](https://travis-ci.org/yukihirop/r2-oas)
4
+ [![Coverage Status](https://coveralls.io/repos/github/yukihirop/r2-oas/badge.svg)](https://coveralls.io/github/yukihirop/r2-oas)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/f8c3846f350bb412fd63/maintainability)](https://codeclimate.com/github/yukihirop/r2-oas/maintainability)
6
+
7
+ railsのルーティング情報からOpenAPI形式のドキュメントを生成し、閲覧・編集・管理するためのrakeタスクの提供をします。
8
+
9
+ ```bash
10
+ bundle exec rake routes:oas:docs # ドキュメント生成
11
+ bundle exec rake routes:oas:ui # ドキュメント閲覧
12
+ bundle exec rake routes:oas:editor # ドキュメント編集
13
+ bundle exec rake routes:oas:monitor # ドキュメント監視
14
+ bundle exec rake routes:oas:dist # ドキュメント配布
15
+ bundle exec rake routes:oas:clean # ドキュメント清掃
16
+ bundle exec rake routes:oas:analyze # ドキュメント分解・分析
17
+ bundle exec rake routes:oas:deploy # ドキュメントデプロイ
18
+ ```
19
+
20
+ ## 💎 Installation
21
+
22
+ railsアプリケーションのGemfileに以下を追加します。
23
+
24
+ ```ruby
25
+ group :development do
26
+ gem 'r2-oas'
27
+ end
28
+ ```
29
+
30
+ ## 🔦 Requirements
31
+
32
+ もしSwaggerEditorやSwaggerUIを使ってドキュメントを閲覧・編集する場合には以下のものが必要です。
33
+
34
+ - [`swaggerapi/swagger-ui:latest` docker image](https://hub.docker.com/r/swaggerapi/swagger-ui/)
35
+ - [`swaggerapi/swagger-editor:latest` docker image](https://hub.docker.com/r/swaggerapi/swagger-editor/)
36
+ - [`chromedriver`](http://chromedriver.chromium.org/downloads)
37
+
38
+ もしダウンロードしてなかったら以下のコマンドでダウンロードできます。
39
+
40
+ ```
41
+ $ docker pull swaggerapi/swagger-editor:latest
42
+ $ docker pull swaggerapi/swagger-ui:latest
43
+ $ brew cask install chromedriver
44
+ ```
45
+
46
+ ## 🚀 Tutorial
47
+
48
+ gemをrequire後、以下のrakeタスクを実行するだけです。
49
+
50
+ ```bash
51
+ bundle exec routes:oas:docs
52
+ bundle exec routes:oas:editor
53
+ ```
54
+
55
+ ## 📖 Usage
56
+
57
+ 全ての設定は `オプショナル` です。設定してもしなくても構いません。
58
+
59
+ 設定はrailsプロジェクトの `config/environments/development.rb` に書きます。
60
+
61
+ デフォルトでは以下に設定されています。
62
+
63
+ ```ruby
64
+ # default setting
65
+ R2OAS.configure do |config|
66
+ config.version = :v3
67
+ config.root_dir_path = "./oas_docs"
68
+ config.schema_save_dir_name = "src"
69
+ config.doc_save_file_name = "oas_doc.yml"
70
+ config.force_update_schema = false
71
+ config.use_tag_namespace = true
72
+ config.use_schema_namespace = false
73
+ config.interval_to_save_edited_tmp_schema = 15
74
+ # :dot or :underbar
75
+ config.namespace_type = :underbar
76
+ config.deploy_dir_path = "./deploy_docs"
77
+
78
+ config.server.data = [
79
+ {
80
+ url: "http://localhost:3000",
81
+ description: "localhost"
82
+ }
83
+ ]
84
+
85
+ config.swagger.configure do |swagger|
86
+ swagger.ui.image = "swaggerapi/swagger-ui"
87
+ swagger.ui.port = "8080"
88
+ swagger.ui.exposed_port = "8080/tcp"
89
+ swagger.ui.volume = "/app/swagger.json"
90
+ swagger.editor.image = "swaggerapi/swagger-editor"
91
+ swagger.editor.port = "81"
92
+ swagger.editor.exposed_port = "8080/tcp"
93
+ end
94
+
95
+ config.use_object_classes = {
96
+ info_object: R2OAS::Schema::V3::InfoObject,
97
+ paths_object: R2OAS::Schema::V3::PathsObject,
98
+ path_item_object: R2OAS::Schema::V3::PathItemObject,
99
+ external_document_object: R2OAS::Schema::V3::ExternalDocumentObject,
100
+ components_object: R2OAS::Schema::V3::ComponentsObject,
101
+ components_schema_object: R2OAS::Schema::V3::Components::SchemaObject,
102
+ components_request_body_object: R2OAS::Schema::V3::Components::RequestBodyObject
103
+ }
104
+
105
+ config.http_statuses_when_http_method = {
106
+ get: {
107
+ default: %w(200 422),
108
+ path_parameter: %w(200 404 422)
109
+ },
110
+ post: {
111
+ default: %w(201 422),
112
+ path_parameter: %w(201 404 422)
113
+ },
114
+ patch: {
115
+ default: %w(204 422),
116
+ path_parameter: %w(204 404 422)
117
+ },
118
+ put: {
119
+ default: %w(204 422),
120
+ path_parameter: %w(204 404 422)
121
+ },
122
+ delete: {
123
+ default: %w(200 422),
124
+ path_parameter: %w(200 404 422)
125
+ }
126
+ }
127
+
128
+ config.http_methods_when_generate_request_body = %w[post patch put]
129
+
130
+ config.tool.paths_stats.configure do |paths_stats|
131
+ paths_stats.month_to_turn_to_warning_color = 3
132
+ paths_stats.warning_color = :red
133
+ paths_stats.table_title_color = :yellow
134
+ paths_stats.heading_color = :yellow
135
+ paths_stats.highlight_color = :magenta
136
+ end
137
+ end
138
+ ```
139
+
140
+ railsプロジェクトのルートディレクトリで以下のコマンドが実行可能です。
141
+
142
+ ```bash
143
+ $ # ドキュメント生成
144
+ $ bundle exec rake routes:oas:docs
145
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:docs # pathsファイルを指定してドキュメント生成
146
+
147
+ $ # SwaggerEditorでドキュメント編集
148
+ $ bundle exec rake routes:oas:editor
149
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:editor # pathsファイルを指定してドキュメント編集
150
+ $ # SwaggerUIでドキュメント閲覧
151
+ $ bundle exec rake routes:oas:ui
152
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:ui # pathsファイルを指定してドキュメント閲覧
153
+ $ # テキストエディタでドキュメント編集(初期設定時、git管理しないoas_docs/oas_doc.ymlを監視)
154
+ $ bundle exec rake routes:oas:monitor
155
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:monitor # pathsファイルを指定してドキュメント監視
156
+
157
+ $ # ドキュメントを分解・分析
158
+ $ OAS_FILE="~/Desktop/swagger.yml" bundle exec rake routes:oas:analyze
159
+ $ # どこからも参照されてないcomponents/schemas(requestBodies, ...)を削除
160
+ $ bundle exec rake routes:oas:clean
161
+ $ # githubにホスティング
162
+ $ bundle exec rake routes:oas:deploy
163
+ $ # ドキュメントを配布(初期設定時、配布ファイルは、oas_docs/oas_doc.yml)
164
+ $ bundle exec rake routes:oas:dist
165
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:dist # pathsファイルを指定してドキュメント配布
166
+
167
+ # pathsファイルのリスト取得
168
+ $ bundle exec rake routes:oas:paths_ls
169
+ # pathsファイルの編集履歴表示
170
+ $ bundle exec rake routes:oas:paths_stats
171
+ ```
172
+
173
+ ## 📚 More Usage
174
+
175
+ - [How to generate docs](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_GENERATE_DOCS.md)
176
+ - [How to start swagger editor](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_START_SWAGGER_EDITOR.md)
177
+ - [How to start swagger ui](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_START_SWAGGER_UI.md)
178
+ - [How to monitor swagger document](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_MONITOR_SWAGGER_DOC.md)
179
+ - [How to analyze docs](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_ANALYZE_DOCS.md)
180
+ - [How to clean docs](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_CLEAN_DOCS.md)
181
+ - [How to deploy swagger doc](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_DEPLOY_SWAGGER_DOC.md)
182
+ - [How to use tag namespace](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_USE_TAG_NAMESPACE.md)
183
+ - [How to use schema namespace](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_USE_SCHEMA_NAMESPACE.md)
184
+ - [How to use hook when generate doc](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_USE_HOOK_WHEN_GENERATE_DOC.md)
185
+ - [How to display paths list](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_DISPLAY_PATHS_LIST.md)
186
+ - [How to display paths stats](https://github.com/yukihirop/r2-oas/blob/master/docs/HOW_TO_DISPLAY_PATHS_STATS.md)
187
+
188
+
189
+ ## ⚾️ sample
190
+
191
+ 実際の使用例を見るにはこちらのリポジトリを参考にしてください。
192
+
193
+ - [yukihirop/r2oas-k8s-example](https://github.com/yukihirop/r2oas-k8s-example)
194
+ - [yukihirop/r2oas-moneyforward-example](https://github.com/yukihirop/r2oas-moneyforward-example)
195
+ - [yukihirop/r2oas-leaddesk-example](https://github.com/yukihirop/r2oas-leaddesk-example)
196
+ - [yukihirop/r2oas-advanced-example](https://github.com/yukihirop/r2oas-advanced-example)
197
+
198
+ ## ❤️ Support Rails Version
199
+
200
+ - Rails (>= 4.2.5.1)
201
+
202
+ ## ❤️ Support Ruby Version
203
+
204
+ - Ruby (>= 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin18])
205
+
206
+ ## ❤️ Support Rouging
207
+
208
+ - Rails Engine Routing
209
+ - Rails Normal Routing
210
+
211
+ ## ❤️ Support OpenAPI Schema
212
+
213
+ |version|document|
214
+ |-------|--------|
215
+ |v3|[versions/v3.md](https://github.com/yukihirop/r2-oas/blob/master/docs/versions/v3.md)|
216
+
217
+ ## ❗️ Convention over Configuration (CoC)
218
+
219
+ ツールを便利にするために、設定よりも制約があります。
220
+
221
+ - `タグ名` は `コントローラー名` を表しており、`pathsファイル名とパス` を決定するのに使用されます。
222
+ - 例えば、 `コントローラー名` が `Api::V1::UsersController` ならば、 `タグ名` は `api/v1/user` になります。そして、 `pathsファイル名とパス` は `api/v1/user.yml` となります。
223
+
224
+ - `components/{schemas, requestBodies, ...}名` の `_` は保存時に `/` に変換されます。hennkannsaremasu.
225
+ - 例えば、 `components/schemas名` が `Api_V1_User` なら、 `components/schemasのファイル名とパス` は `api/v1/user.yml` となります。
226
+ - フォーマットは、 `Namespace1_Namespace2_Model` です。
227
+
228
+ - `components/{schemas, requestBodies, ...}名` の `.` は保存時に `/` に変換されます。hennkannsaremasu.
229
+ - 例えば、 `components/schemas名` が `api.v1.User` なら、 `components/schemasのファイル名とパス` は `api/v1/user.yml` となります。
230
+ - フォーマットは、 `namespace1.namespace2.Model` です。
231
+
232
+ ## ⚙ Configure
233
+
234
+ 設定可能な設定に関して説明します。
235
+
236
+ #### basic
237
+
238
+ |option|description|default|
239
+ |------|-----------|---|
240
+ |version|OpenAPIのバージョン| `:v3` |
241
+ |root_dir_path|ドキュメントの保存パス| `"./oas_docs"` |
242
+ |schema_save_dir_name|分解したスキーマの保存ディレクトリ名|`"src"`|
243
+ |doc_save_file_name|生成したドキュメントのファイル名|`"oas_doc.yml"`|
244
+ |force_update_schema|既生のドキュメントをルーティング情報から生成されたデータで更新するか否か|`false`|
245
+ |use_tag_namespace|タグ名にネームスペースを使うか否か|`true`|
246
+ |use_schema_namespace|components/{schemas,requestBodies}名に擬似ネームスペースを利用するか否か|`true`|
247
+ |interval_to_save_edited_tmp_schema|SwaggerEditor上で編集されたドキュメントをメモリに保存する間隔(sec)|`15`|
248
+ |http_statuses_when_http_method|HTTPメソッド毎にどのHTTPステータスのレスポンスを用意するかを決める設定|omission...|
249
+ |http_methods_when_generate_request_body|リクエストボディーを生成する時のHTTPメソッド|`[post put patch]`|
250
+ |namespace_type|components/{schemas,requestBodies,...}名で使用する擬似ネームスペースの種類(:dot or :underbar)| `:underbar` |
251
+ |deploy_dir_path|deployのディレクトリパス|`"./deploy_docs"`|
252
+
253
+ #### server
254
+
255
+ |option|children option|description|default|
256
+ |------|---------------|-----------|-------|
257
+ |server|data|サーバー情報(url, description) |[{ url: `http://localhost:3000`, description: `localhost` }] |
258
+
259
+ #### swagger
260
+
261
+ |option|children option|grandchild option|description|default|
262
+ |------|---------------|-----------------|-----------|-------|
263
+ |swagger|ui|image|SwaggerUIのDockerイメージ|`"swaggerapi/swagger-ui"`|
264
+ |swagger|ui|port|SwaggerUIのポート|`"8080"`|
265
+ |swagger|ui|exposed_port|SwaggerUIの公開ポート|`"8080/tcp"`|
266
+ |swagger|ui|volume|SwaggerUIのVolume|`"/app/swagger.json"`|
267
+ |swagger|editor|image|SwaggerEditorのDockerイメージ|`"swaggerapi/swagger-editor"`|
268
+ |swagger|editor|port|SwaggerEditorのポート|`"8080"`|
269
+ |swagger|editor|exposed_port|SwaggerEditorの公開ポート|`"8080/tcp"`|
270
+
271
+ #### hook
272
+
273
+ |option|description|default|
274
+ |------|-----------|-------|
275
+ |use_object_classes|ドキュメント生成時に使用するオブジェクトクラスの設定|{ info_object: `R2OAS::Schema::V3::InfoObject`,<br>paths_object: `R2OAS::Schema::V3::PathsObject`,<br>path_item_object: `R2OAS::Schema::V3::PathItemObject`, external_document_object: `R2OAS::Schema::V3::ExternalDocumentObject`,<br> components_object: `R2OAS::Schema::V3::ComponentsObject`,<br> components_schema_object: `R2OAS::Schema::V3::Components::SchemaObject`, <br> components_request_body_object:`R2OAS::Schema::V3::Components::RequestBodyObject` }|
276
+
277
+ #### tool
278
+
279
+ |option|children option|grandchild option|description|default|
280
+ |------|---------------|-----------------|-----------|-------|
281
+ |tool|paths_stats|month_to_turn_to_warning_color|警告色を表示するまでの期間(ヶ月)|`3`|
282
+ |tool|paths_stats|warning_color|警告色|`:red`|
283
+ |tool|paths_stats|table_title_color|テーブルのタイトルの色|`:yellow`|
284
+ |tool|paths_stats|heading_color|ヘッダーの色|`:yellow`|
285
+ |tool|paths_stats|highlight_color|強調色|`:magenta`|
286
+
287
+ Please refer to [here](https://github.com/janlelis/paint) for the color.
288
+
289
+ ## Environment variables
290
+
291
+ 環境変数は以下を用意しております。
292
+
293
+ |variable|description|default|
294
+ |--------|-----------|-------|
295
+ |PATHS_FILE|pathsファイルのパス|`""`|
296
+ |OAS_FILE|analyzeするドキュメントへのパス|`""`|
297
+
298
+
299
+ ## .paths
300
+
301
+ `.paths` ファイルを書くことで必要な分だけドキュメントを閲覧・編集・配布する事が可能になります。
302
+
303
+ `#` から始まる行はコメントとして扱われ無視されます。重複も無視されます。
304
+
305
+ `paths` ディレクトリ以下のパスを書きます。
306
+
307
+ `oas_docs/.paths`
308
+ ```
309
+ #account_user_role.yml # ignore
310
+ account.yml
311
+ account.yml # ignore
312
+ account.yml # ignore
313
+ ```
314
+
315
+ ## 💊 Life Cycle Methods (Hook Metohds)
316
+
317
+ ドキュメント生成時に、フックを可能にするメソッドを用意しております。
318
+
319
+ - `before_create`
320
+ - `after_create`
321
+
322
+ フック可能なオブジェクトは以下の通りです。
323
+
324
+ - `R2OAS::Schema::V3::InfoObject`
325
+ - `R2OAS::Schema::V3::PathsObject`
326
+ - `R2OAS::Schema::V3::PathItemObject`
327
+ - `R2OAS::Schema::V3::ExternalDocumentObject`
328
+ - `R2OAS::Schema::V3::ComponentsObject`
329
+ - `R2OAS::Schema::V3::Components::SchemaObject`
330
+ - `R2OAS::Schema::V3::Components::RequestBodyObject`
331
+
332
+ これらのクラスを継承して、フックの設定を書きます。以下に例を用意しました。
333
+
334
+ #### case: InfoObject
335
+
336
+ ```ruby
337
+ class CustomInfoObject < R2OAS::Schema::V3::InfoObject
338
+ before_create do |doc|
339
+ # [重要] docへの破壊的な変更をしてください。
340
+ # [重要] railsが提供するメソッドを使用する事ができます。
341
+ doc.merge!({
342
+ # Something ....
343
+ })
344
+ end
345
+
346
+ after_create do |doc, path|
347
+ # [重要] docへの破壊的な変更をしてください。
348
+ # [重要] railsが提供するメソッドを使用する事ができます。
349
+ doc.merge!({
350
+ # Something ....
351
+ })
352
+ end
353
+ end
354
+ ```
355
+
356
+ #### case: PathsObject
357
+
358
+ ```ruby
359
+ class CustomPathsObject < R2OAS::Schema::V3::PathsObject
360
+ before_create do |doc|
361
+ # [重要] docへの破壊的な変更をしてください。
362
+ # [重要] railsが提供するメソッドを使用する事ができます。
363
+ doc.merge!({
364
+ # Something ....
365
+ })
366
+ end
367
+
368
+ after_create do |doc|
369
+ # [重要] docへの破壊的な変更をしてください。
370
+ # [重要] railsが提供するメソッドを使用する事ができます。
371
+ doc.merge!({
372
+ # Something ....
373
+ })
374
+ end
375
+ end
376
+ ```
377
+
378
+ #### case: PathItemObject
379
+
380
+ ```ruby
381
+ class CustomPathItemObject < R2OAS::Schema::V3::PathItemObject
382
+ before_create do |doc, path|
383
+ # [重要] docへの破壊的な変更をしてください。
384
+ # [重要] railsが提供するメソッドを使用する事ができます。
385
+ doc.merge!({
386
+ # Something ....
387
+ })
388
+ end
389
+
390
+ after_create do |doc, schema_name|
391
+ # [重要] docへの破壊的な変更をしてください。
392
+ # [重要] railsが提供するメソッドを使用する事ができます。
393
+ doc.merge!({
394
+ # Something ....
395
+ })
396
+ end
397
+ end
398
+ ```
399
+
400
+ #### case: ExternalDocumentObject
401
+
402
+ ```ruby
403
+ class CustomExternalDocumentObject < R2OAS::Schema::V3::ExternalDocumentObject
404
+ before_create do |doc|
405
+ # [重要] docへの破壊的な変更をしてください。
406
+ # [重要] railsが提供するメソッドを使用する事ができます。
407
+ doc.merge!({
408
+ # Something ....
409
+ })
410
+ end
411
+
412
+ after_create do |doc|
413
+ # [重要] docへの破壊的な変更をしてください。
414
+ # [重要] railsが提供するメソッドを使用する事ができます。
415
+ doc.merge!({
416
+ # Something ....
417
+ })
418
+ end
419
+ end
420
+ ```
421
+
422
+ #### case: ComponentsObject
423
+
424
+ ```ruby
425
+ class CustomComponentsObject < R2OAS::Schema::V3::ComponentsObject
426
+ before_create do |doc|
427
+ # [重要] docへの破壊的な変更をしてください。
428
+ # [重要] railsが提供するメソッドを使用する事ができます。
429
+ doc.merge!({
430
+ # Something ....
431
+ })
432
+ end
433
+
434
+ after_create do |doc|
435
+ # [重要] docへの破壊的な変更をしてください。
436
+ # [重要] railsが提供するメソッドを使用する事ができます。
437
+ doc.merge!({
438
+ # Something ....
439
+ })
440
+ end
441
+ end
442
+ ```
443
+
444
+ #### case: Components::SchemaObject
445
+
446
+ ```ruby
447
+ class CustomComponentsSchemaObject < R2OAS::Schema::V3::Components::SchemaObject
448
+ before_create do |doc, schema_name|
449
+ # [重要] docへの破壊的な変更をしてください。
450
+ # [重要] railsが提供するメソッドを使用する事ができます。
451
+ doc.merge!({
452
+ # Something ....
453
+ })
454
+ end
455
+
456
+ after_create do |doc, schema_name|
457
+ # [重要] docへの破壊的な変更をしてください。
458
+ # [重要] railsが提供するメソッドを使用する事ができます。
459
+ doc.merge!({
460
+ # Something ....
461
+ })
462
+ end
463
+ end
464
+ ```
465
+
466
+ ドキュメント生成時にcomponents/schemas名を上書きしたい場合は以下の様にします。
467
+
468
+ ```ruby
469
+ class CustomComponentsSchemaObject < R2OAS::Schema::V3::Components::SchemaObject
470
+ def components_schema_name(doc, path_component, tag_name, verb, http_status, schema_name)
471
+ # [重要] 返値は文字列であるべきです。
472
+ # 初期値はschema_name
473
+ schema_name
474
+ end
475
+ end
476
+ ```
477
+
478
+ `path_component` は `R2OAS::Routing::PathComponent` のインスタンスです。
479
+
480
+ ```ruby
481
+ module R2OAS
482
+ module Routing
483
+ class PathComponent < BaseComponent
484
+ def initialize(path)
485
+ def to_s
486
+ def symbol_to_brace
487
+ def path_parameters_data
488
+ def path_excluded_path_parameters
489
+ def exist_path_parameters?
490
+ def path_parameters
491
+ private
492
+ def without_format
493
+ ```
494
+
495
+ #### case: Components::RequestBodyObject
496
+
497
+ ```ruby
498
+ class CustomComponentsRequestBodyObject < R2OAS::Schema::V3::Components::RequestBodyObject
499
+ before_create do |doc, schema_name|
500
+ # [重要] docへの破壊的な変更をしてください。
501
+ # [重要] railsが提供するメソッドを使用する事ができます。
502
+ doc.merge!({
503
+ # Something ....
504
+ })
505
+ end
506
+
507
+ after_create do |doc, schema_name|
508
+ # [重要] docへの破壊的な変更をしてください。
509
+ # [重要] railsが提供するメソッドを使用する事ができます。
510
+ doc.merge!({
511
+ # Something ....
512
+ })
513
+ end
514
+ end
515
+ ```
516
+
517
+ ドキュメント生成時にcomponents/requestBodies名を上書きしたい場合は以下の様にします。
518
+
519
+ ```ruby
520
+ class CustomComponentsRequestBodyObject < R2OAS::Schema::V3::Components::RequestBodyObject
521
+ def components_request_body_name(doc, path_component, tag_name, verb, schema_name)
522
+ # [重要] 返値は文字列であるべきです。
523
+ # 初期値はschema_name
524
+ schema_name
525
+ end
526
+
527
+ def components_schema_name(doc, path_component, tag_name, verb, schema_name)
528
+ # [重要] 返値は文字列であるべきです。
529
+ # 初期値はschema_name
530
+ schema_name
531
+ end
532
+ end
533
+ ```
534
+
535
+ そして最後に設定を書きます。
536
+
537
+ ```ruby
538
+ # もし、InfoObjectとPathItemObjectをカスタムのものにしたい場合は以下の様にします。
539
+ R2OAS.configure do |config|
540
+ #
541
+ # omission ...
542
+ #
543
+ config.use_object_classes.merge!({
544
+ info_object: CustomInfoObject,
545
+ path_item_object: CustomPathItemObject
546
+ })
547
+ end
548
+ ```
549
+
550
+ これだけです。
551
+
552
+ ## 🔩 CORS
553
+
554
+ [rack-cors](https://github.com/cyu/rack-cors)を使用する事でCORSを可能にします。
555
+
556
+ ```ruby
557
+ require 'rack/cors'
558
+ use Rack::Cors do
559
+ allow do
560
+ origins '*'
561
+ resource '*', headers: :any, methods: [ :get, :post, :put, :delete, :options ]
562
+ end
563
+ end
564
+ ```
565
+
566
+ `before` ブロックにCORSヘッダーを設定できます。
567
+
568
+ ```ruby
569
+ before do
570
+ header['Access-Control-Allow-Origin'] = '*'
571
+ header['Access-Control-Request-Method'] = '*'
572
+ end
573
+ ```
574
+
575
+ ## 📝 License
576
+
577
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
578
+
579
+ ## 🤝 Contributing
580
+
581
+ 1. Fork it ( http://github.com/yukihirop/r2-oas/fork )
582
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
583
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
584
+ 4. Push to the branch (`git push origin my-new-feature`)
585
+ 5. Create new Pull Request