r2-oas 0.4.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/CHANGELOG.md +99 -0
  3. data/GEMSPEC.md +20 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.ja.md +271 -0
  6. data/README.md +271 -0
  7. data/lib/r2-oas.rb +35 -0
  8. data/lib/r2-oas/app_configuration.rb +121 -0
  9. data/lib/r2-oas/app_configuration/deprecation.rb +28 -0
  10. data/lib/r2-oas/app_configuration/server.rb +35 -0
  11. data/lib/r2-oas/app_configuration/swagger.rb +35 -0
  12. data/lib/r2-oas/app_configuration/swagger/editor.rb +47 -0
  13. data/lib/r2-oas/app_configuration/swagger/ui.rb +45 -0
  14. data/lib/r2-oas/app_configuration/tool.rb +31 -0
  15. data/lib/r2-oas/app_configuration/tool/paths/stats.rb +43 -0
  16. data/lib/r2-oas/base.rb +48 -0
  17. data/lib/r2-oas/configuration.rb +121 -0
  18. data/lib/r2-oas/configuration/paths_config.rb +44 -0
  19. data/lib/r2-oas/deploy/client.rb +70 -0
  20. data/lib/r2-oas/deploy/swagger-ui/index.html.erb +60 -0
  21. data/lib/r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object.rb +100 -0
  22. data/lib/r2-oas/errors.rb +13 -0
  23. data/lib/r2-oas/hooks/global_hook.rb +20 -0
  24. data/lib/r2-oas/hooks/hook.rb +79 -0
  25. data/lib/r2-oas/hooks/repository.rb +15 -0
  26. data/lib/r2-oas/lib/core_ext/hash/deep_merge.rb +44 -0
  27. data/lib/r2-oas/lib/core_ext/object/blank.rb +135 -0
  28. data/lib/r2-oas/lib/three-way-merge/twm.rb +83 -0
  29. data/lib/r2-oas/logger/stdout_logger.rb +129 -0
  30. data/lib/r2-oas/pluggable_configuration.rb +36 -0
  31. data/lib/r2-oas/plugin/base.rb +44 -0
  32. data/lib/r2-oas/plugin/executor.rb +148 -0
  33. data/lib/r2-oas/plugin/hookable.rb +42 -0
  34. data/lib/r2-oas/plugin/public.rb +3 -0
  35. data/lib/r2-oas/plugin/transform/transform.rb +10 -0
  36. data/lib/r2-oas/plugin/transform/v3/transform.rb +20 -0
  37. data/lib/r2-oas/plugin/transform/v3/visitable.rb +37 -0
  38. data/lib/r2-oas/public.rb +5 -0
  39. data/lib/r2-oas/routing/adjustor.rb +44 -0
  40. data/lib/r2-oas/routing/base.rb +12 -0
  41. data/lib/r2-oas/routing/components/all.rb +5 -0
  42. data/lib/r2-oas/routing/components/base_component.rb +10 -0
  43. data/lib/r2-oas/routing/components/path_component.rb +67 -0
  44. data/lib/r2-oas/routing/components/request_component.rb +75 -0
  45. data/lib/r2-oas/routing/components/verb_component.rb +21 -0
  46. data/lib/r2-oas/routing/parser.rb +93 -0
  47. data/lib/r2-oas/schema/analyzer.rb +23 -0
  48. data/lib/r2-oas/schema/base.rb +11 -0
  49. data/lib/r2-oas/schema/builder.rb +23 -0
  50. data/lib/r2-oas/schema/cleaner.rb +23 -0
  51. data/lib/r2-oas/schema/editor.rb +146 -0
  52. data/lib/r2-oas/schema/generator.rb +23 -0
  53. data/lib/r2-oas/schema/manager/file/path_item_file_manager.rb +24 -0
  54. data/lib/r2-oas/schema/manager/file_manager.rb +26 -0
  55. data/lib/r2-oas/schema/monitor.rb +52 -0
  56. data/lib/r2-oas/schema/squeezer.rb +23 -0
  57. data/lib/r2-oas/schema/ui.rb +73 -0
  58. data/lib/r2-oas/schema/v3/analyzer.rb +58 -0
  59. data/lib/r2-oas/schema/v3/analyzer/base_analyzer.rb +71 -0
  60. data/lib/r2-oas/schema/v3/analyzer/components/object_analyzer.rb +38 -0
  61. data/lib/r2-oas/schema/v3/analyzer/components_analyzer.rb +30 -0
  62. data/lib/r2-oas/schema/v3/analyzer/path_analyzer.rb +116 -0
  63. data/lib/r2-oas/schema/v3/analyzer/tag_analyzer.rb +38 -0
  64. data/lib/r2-oas/schema/v3/base.rb +28 -0
  65. data/lib/r2-oas/schema/v3/builder.rb +28 -0
  66. data/lib/r2-oas/schema/v3/builder/base_builder.rb +72 -0
  67. data/lib/r2-oas/schema/v3/builder/doc_builder.rb +51 -0
  68. data/lib/r2-oas/schema/v3/cleaner.rb +19 -0
  69. data/lib/r2-oas/schema/v3/cleaner/base_cleaner.rb +30 -0
  70. data/lib/r2-oas/schema/v3/cleaner/components_cleaner.rb +42 -0
  71. data/lib/r2-oas/schema/v3/generator.rb +24 -0
  72. data/lib/r2-oas/schema/v3/generator/base_generator.rb +122 -0
  73. data/lib/r2-oas/schema/v3/generator/components/object_generator.rb +64 -0
  74. data/lib/r2-oas/schema/v3/generator/components/request_body_generator.rb +45 -0
  75. data/lib/r2-oas/schema/v3/generator/components_generator.rb +38 -0
  76. data/lib/r2-oas/schema/v3/generator/doc_generator.rb +115 -0
  77. data/lib/r2-oas/schema/v3/generator/path_generator.rb +78 -0
  78. data/lib/r2-oas/schema/v3/generator/schema_generator.rb +58 -0
  79. data/lib/r2-oas/schema/v3/manager/diff/base_array_diff_manager.rb +60 -0
  80. data/lib/r2-oas/schema/v3/manager/diff/base_diff_manager.rb +29 -0
  81. data/lib/r2-oas/schema/v3/manager/diff/base_hash_diff_manager.rb +95 -0
  82. data/lib/r2-oas/schema/v3/manager/diff/components_diff_manager.rb +19 -0
  83. data/lib/r2-oas/schema/v3/manager/diff/tag_diff_manager.rb +17 -0
  84. data/lib/r2-oas/schema/v3/manager/file/base_file_manager.rb +66 -0
  85. data/lib/r2-oas/schema/v3/manager/file/components_file_manager.rb +22 -0
  86. data/lib/r2-oas/schema/v3/manager/file/include_ref_base_file_manager.rb +89 -0
  87. data/lib/r2-oas/schema/v3/manager/file/path_item_file_manager.rb +22 -0
  88. data/lib/r2-oas/schema/v3/manager/file_manager.rb +12 -0
  89. data/lib/r2-oas/schema/v3/manager/pathname_manager.rb +78 -0
  90. data/lib/r2-oas/schema/v3/object/from_files/base_object.rb +62 -0
  91. data/lib/r2-oas/schema/v3/object/from_files/components/request_body_object.rb +103 -0
  92. data/lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb +102 -0
  93. data/lib/r2-oas/schema/v3/object/from_files/components_object.rb +46 -0
  94. data/lib/r2-oas/schema/v3/object/from_files/external_document_object.rb +23 -0
  95. data/lib/r2-oas/schema/v3/object/from_files/info_object.rb +23 -0
  96. data/lib/r2-oas/schema/v3/object/from_files/openapi_object.rb +61 -0
  97. data/lib/r2-oas/schema/v3/object/from_files/path_item_object.rb +110 -0
  98. data/lib/r2-oas/schema/v3/object/from_files/paths_object.rb +33 -0
  99. data/lib/r2-oas/schema/v3/object/from_files/utils/all.rb +4 -0
  100. data/lib/r2-oas/schema/v3/object/from_files/utils/deep_methods.rb +27 -0
  101. data/lib/r2-oas/schema/v3/object/from_files/utils/refs.rb +151 -0
  102. data/lib/r2-oas/schema/v3/object/from_routes/base_object.rb +75 -0
  103. data/lib/r2-oas/schema/v3/object/from_routes/components/request_body_object.rb +96 -0
  104. data/lib/r2-oas/schema/v3/object/from_routes/components/schema_object.rb +59 -0
  105. data/lib/r2-oas/schema/v3/object/from_routes/components_object.rb +81 -0
  106. data/lib/r2-oas/schema/v3/object/from_routes/external_document_object.rb +28 -0
  107. data/lib/r2-oas/schema/v3/object/from_routes/info_object.rb +43 -0
  108. data/lib/r2-oas/schema/v3/object/from_routes/openapi_object.rb +59 -0
  109. data/lib/r2-oas/schema/v3/object/from_routes/path_item_object.rb +175 -0
  110. data/lib/r2-oas/schema/v3/object/from_routes/paths_object.rb +77 -0
  111. data/lib/r2-oas/schema/v3/object/from_routes/public.rb +9 -0
  112. data/lib/r2-oas/schema/v3/object/from_routes/server_object.rb +21 -0
  113. data/lib/r2-oas/schema/v3/object/from_routes/tag_object.rb +37 -0
  114. data/lib/r2-oas/schema/v3/object/store.rb +54 -0
  115. data/lib/r2-oas/schema/v3/squeezer.rb +29 -0
  116. data/lib/r2-oas/schema/v3/squeezer/base_squeezer.rb +37 -0
  117. data/lib/r2-oas/schema/v3/squeezer/path_squeezer.rb +28 -0
  118. data/lib/r2-oas/schema/v3/squeezer/tag_squeezer.rb +19 -0
  119. data/lib/r2-oas/shared/all.rb +4 -0
  120. data/lib/r2-oas/shared/callable.rb +17 -0
  121. data/lib/r2-oas/shared/sortable.rb +23 -0
  122. data/lib/r2-oas/store.rb +122 -0
  123. data/lib/r2-oas/support/deprecation.rb +24 -0
  124. data/lib/r2-oas/support/deprecation/behavior.rb +21 -0
  125. data/lib/r2-oas/support/deprecation/instance_delegator.rb +42 -0
  126. data/lib/r2-oas/support/deprecation/reporting.rb +91 -0
  127. data/lib/r2-oas/task.rb +11 -0
  128. data/lib/r2-oas/task_logging.rb +41 -0
  129. data/lib/r2-oas/tasks/common.rake +25 -0
  130. data/lib/r2-oas/tasks/main.rake +132 -0
  131. data/lib/r2-oas/tasks/tool.rake +86 -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 +48 -0
  136. metadata +415 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b365f9c68dd7df3c642a3b6d067d4a63f8e112806ee68711f949c76a244652e2
4
+ data.tar.gz: c3c3ef2eca59de1d9db5889d1191ae480b8c96e09ac58cf8ef9036bb932c3781
5
+ SHA512:
6
+ metadata.gz: 24fd75460c287ff115e05b9fb86fb8f5e253a99e0c368943d54ee4b5142425ce90086857220fa158e998b3325bc7ff40f5f0af87f9adf27a9d899e3d4a4747b5
7
+ data.tar.gz: 6a8b41ccaad2f0a4fc38b4af4fbb7a569042b76623a859ec8a9d4c42072805c5d7d0b037129ce7d82c6d50637fd493e7a08e0f2b7fa64773fe8218c3b7eadd7b
@@ -0,0 +1,99 @@
1
+ # Change Log
2
+
3
+ ## v0.4.0
4
+
5
+ 2020-07-22
6
+
7
+ - [`BigFeature`] 🎯 Implement plugin ([#154](https://github.com/yukihirop/r2-oas/pull/154))
8
+ - Please see [use plugins docs](https://yukihirop.github.io/r2-oas/#/usage/use_plugins)
9
+ - [`Feature`] Implement `routes:oas:init`([#154](https://github.com/yukihirop/r2-oas/pull/154))
10
+ - Please see [initialize docs](https://yukihirop.github.io/r2-oas/#/usage/initialize)
11
+ - [`Breaking`] Rename from `routes:oas:dist` to `routes:oas:build` ([#154](https://github.com/yukihirop/r2-oas/pull/154))
12
+ - [`Feature`] Allowed definition of custom rake tasks ([#152](https://github.com/yukihirop/r2-oas/pull/152))
13
+ - Please see [define tasks docs](https://yukihirop.github.io/r2-oas/#/usage/define_tasks)
14
+ - [`Deprecated`] Deprecated use of `R2OAS.use_object_classes=` ([#155](https://github.com/yukihirop/r2-oas/pull/155))
15
+
16
+ Please see milestone [v0.4.0](https://github.com/yukihirop/r2-oas/milestone/4?closed=1)
17
+
18
+ ## v0.3.4
19
+
20
+ 2020-07-11
21
+
22
+ - [`Other`] Modify gemspec `files` fields ([#147](https://github.com/yukihirop/r2-oas/pull/147))
23
+ - Add `r2-oas.gemspec` into gemspec `files`
24
+
25
+ ## v0.3.3
26
+
27
+ 2020-07-11
28
+
29
+ - [`FixBugs`] A cute pet store syndrome 🐈 ([f3f4c30](https://github.com/yukihirop/r2-oas/pull/144))
30
+ - [`FixBugs`] R2OAS.logger.level does not work ([f3f4c30](https://github.com/yukihirop/r2-oas/pull/144))
31
+ - [`Breaking`] Change default namespace type from `:underbar` to `:dot` ([f3f4c30](https://github.com/yukihirop/r2-oas/pull/144))
32
+ - [`Other`] Modify gemspec `files` fields ([f3f4c30](https://github.com/yukihirop/r2-oas/pull/144))
33
+
34
+ Please see milestone [v0.3.3](https://github.com/yukihirop/r2-oas/milestone/3?closed=1)
35
+
36
+ ## v0.3.2
37
+
38
+ 2020-07-05
39
+
40
+ - [`Feature`] The file size at the time of gem install was reduced by about 10MB. ([dbdbce9 ](https://github.com/yukihirop/r2-oas/pull/138))
41
+
42
+ ## v0.3.1
43
+
44
+ 2020-06-07
45
+
46
+ - [`Breaking`] Remove unnecessary runtime dependencies ([384ea1a](https://github.com/yukihirop/r2-oas/pull/132))
47
+
48
+ ## v0.3.0
49
+
50
+ 2020-05-30
51
+
52
+ - [`Feature/Breaking`] Support Ruby 2.7 🎉 ([931ec4b](https://github.com/yukihirop/r2-oas/pull/122))
53
+
54
+ - Remove `Gemfile.lock`
55
+
56
+ - [`Developer`] Create script to test all support ruby in development ([8d0df98](https://github.com/yukihirop/r2-oas/pull/124))
57
+ - [`Docs`] Add docs about Trableshouting ([f4a782f](https://github.com/yukihirop/r2-oas/pull/125))
58
+
59
+ ## v0.2.0
60
+
61
+ 2020-05-02
62
+
63
+ - [`Feature/Breaking`] Upgrade `routes:oas:docs` cmd ([37ccddf](https://github.com/yukihirop/r2-oas/pull/117))
64
+
65
+ - `.docs` is needed to continue using r2-oas. `If you are using previous version`,you need to run the following command to generate `.docs`.
66
+
67
+ ```bash
68
+ CACHE_DOCS=true bundle exec rake routes:oas:docs
69
+ ```
70
+
71
+ - [`Breaking`] Divide into `Generator` and `Builder` ([00fea7d](https://github.com/yukihirop/r2-oas/pull/116))
72
+ - `routes:oas:docs` cmd do not generate `oas_docs/oas_doc.yml`
73
+
74
+ ## v0.1.3
75
+
76
+ 2020-04-27
77
+
78
+ - [`FixBugs`] Fix clash when edit ([906d068](https://github.com/yukihirop/r2-oas/pull/109))
79
+ - [`Feature`] Change log display to relative path ([c735d22](https://github.com/yukihirop/r2-oas/pull/111))
80
+
81
+ ## v0.1.2
82
+
83
+ 2020-04-22
84
+
85
+ - No Change
86
+
87
+ ## v0.1.1
88
+
89
+ 2020-04-22
90
+
91
+ - [`Feature`] Create document by docsify([def4463](https://github.com/yukihirop/r2-oas/pull/99))
92
+ - [`Breaking`] Do not generate component schema when http_status equal 204 and 404 by default ([f7fcafd](https://github.com/yukihirop/r2-oas/pull/103))
93
+
94
+
95
+ ## v0.1.0
96
+
97
+ 2019-10-22 / The day of the throne (called 即位礼正殿の儀の行われる日 in Japanease)
98
+
99
+ - first release
@@ -0,0 +1,20 @@
1
+ Configureless and no DSL. 👍 But you can also configure.
2
+ Manage with yaml file instead of Ruby code.
3
+ Loosely coupled to your Rails project. 👍
4
+ So if you want to use another tool, you can port it right away. 😢
5
+ Generate api docment(OpenAPI) side only from `Rails` routing.
6
+
7
+ Provide rake tasks to management API Docment (OpenAPI) 🎉
8
+
9
+ $ bundle exec rake routes:oas:init
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:build
15
+ $ bundle exec rake routes:oas:clean
16
+ $ bundle exec rake routes:oas:analyze
17
+ $ bundle exec rake routes:oas:deploy
18
+
19
+
20
+ Happy Coding ❗️
@@ -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,271 @@
1
+ # R2-OAS
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/r2-oas.svg)](https://badge.fury.io/rb/r2-oas)
4
+ [![Build Status](https://travis-ci.org/yukihirop/r2-oas.svg?branch=master)](https://travis-ci.org/yukihirop/r2-oas)
5
+ [![Coverage Status](https://coveralls.io/repos/github/yukihirop/r2-oas/badge.svg)](https://coveralls.io/github/yukihirop/r2-oas)
6
+ [![Maintainability](https://api.codeclimate.com/v1/badges/f8c3846f350bb412fd63/maintainability)](https://codeclimate.com/github/yukihirop/r2-oas/maintainability)
7
+
8
+ Railsのルーティング情報からOpenAPI形式のドキュメントを生成し、閲覧・編集・管理するためのrakeタスクの提供をします。
9
+
10
+ ```bash
11
+ bundle exec rake routes:oas:init # 初期化
12
+ bundle exec rake routes:oas:docs # ドキュメント生成
13
+ bundle exec rake routes:oas:ui # ドキュメント閲覧
14
+ bundle exec rake routes:oas:editor # ドキュメント編集
15
+ bundle exec rake routes:oas:monitor # ドキュメント監視
16
+ bundle exec rake routes:oas:build # ドキュメントビルド
17
+ bundle exec rake routes:oas:clean # ドキュメント清掃
18
+ bundle exec rake routes:oas:analyze # ドキュメント分解・分析
19
+ bundle exec rake routes:oas:deploy # ドキュメントデプロイ
20
+ ```
21
+
22
+ ## 💎 Installation
23
+
24
+ railsアプリケーションのGemfileに以下を追加します。
25
+
26
+ ```ruby
27
+ group :development do
28
+ gem 'r2-oas'
29
+ end
30
+ ```
31
+
32
+ ## 🔦 Requirements
33
+
34
+ もしSwaggerEditorやSwaggerUIを使ってドキュメントを閲覧・編集する場合には以下のものが必要です。
35
+
36
+ - [`swaggerapi/swagger-ui:latest` docker image](https://hub.docker.com/r/swaggerapi/swagger-ui/)
37
+ - [`swaggerapi/swagger-editor:latest` docker image](https://hub.docker.com/r/swaggerapi/swagger-editor/)
38
+ - [`chromedriver`](http://chromedriver.chromium.org/downloads)
39
+
40
+ もしダウンロードしてなかったら以下のコマンドでダウンロードできます。
41
+
42
+ ```
43
+ $ docker pull swaggerapi/swagger-editor:latest
44
+ $ docker pull swaggerapi/swagger-ui:latest
45
+ $ brew cask install chromedriver
46
+ ```
47
+
48
+ ## 🚀 Tutorial
49
+
50
+ gemをrequire後、以下のrakeタスクを実行するだけです。
51
+
52
+ ```bash
53
+ bundle exec routes:oas:docs
54
+ bundle exec routes:oas:editor
55
+ ```
56
+
57
+ #### Generate docs
58
+
59
+ ![oas_docs](https://user-images.githubusercontent.com/11146767/80856236-0b839a80-8c83-11ea-888f-d0e659e0c251.gif)
60
+
61
+
62
+ #### Edit docs
63
+
64
+ ![oas_editor](https://user-images.githubusercontent.com/11146767/80856240-15a59900-8c83-11ea-9dbd-4382528944f2.gif)
65
+
66
+ ## 📚 Documents
67
+
68
+ 公式ドキュメントはこちら => https://yukihirop.github.io/r2-oas
69
+
70
+ ## 📖 Usage
71
+
72
+
73
+ railsプロジェクトのルートディレクトリで以下のコマンドが実行可能です。
74
+ 一般的なコマンドの使用例を示します。
75
+
76
+ ### Initialize
77
+
78
+ `r2-oas`の初期化
79
+
80
+ ```bash
81
+ $ bundle exec rake routes:oas:init
82
+ ```
83
+
84
+ ### Generate
85
+
86
+ ドキュメントの生成
87
+
88
+ ```bash
89
+ $ bundle exec rake routes:oas:docs # Generate docs
90
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:docs # Generate docs by specify unit paths
91
+ ```
92
+
93
+ ### Editor
94
+
95
+ SwaggerEditorの起動
96
+
97
+ ```bash
98
+ $ bundle exec rake routes:oas:editor # Start swagger editor
99
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:editor # Start swagger editor by specify unit paths
100
+ ```
101
+
102
+ ### UI
103
+
104
+ SwaggerUIの起動
105
+
106
+ ```bash
107
+ $ bundle exec rake routes:oas:ui # Start swagger ui
108
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:ui # Start swagger ui by specify unit paths
109
+ ```
110
+
111
+ ### Build
112
+
113
+ ドキュメントのビルド
114
+ ※プラグインが適用されます。
115
+
116
+ ```bash
117
+ $ bundle exec rake routes:oas:build
118
+ ```
119
+
120
+ ### Analyze
121
+
122
+ ドキュメントの分割
123
+ OpenAPI形式のドキュメントを読み取り、それをいくつかの部分に分割してソースファイルを生成します
124
+
125
+ ```bash
126
+ $ OAS_FILE="~/Desktop/swagger.yml" bundle exec rake routes:oas:analyze
127
+ ```
128
+
129
+ ## ⚾️ sample
130
+
131
+ 実際の使用例を見るにはこちらのリポジトリを参考にしてください。
132
+
133
+ - [yukihirop/r2oas-k8s-example](https://github.com/yukihirop/r2oas-k8s-example)
134
+ - [yukihirop/r2oas-moneyforward-example](https://github.com/yukihirop/r2oas-moneyforward-example)
135
+ - [yukihirop/r2oas-leaddesk-example](https://github.com/yukihirop/r2oas-leaddesk-example)
136
+ - [yukihirop/r2oas-advanced-example](https://github.com/yukihirop/r2oas-advanced-example)
137
+
138
+ ## ❤️ Support Rails Version
139
+
140
+ - Rails (>= 4.2.5.1)
141
+
142
+ ## ❤️ Support Ruby Version
143
+
144
+ - Ruby (>= 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin18])
145
+
146
+ ## ❤️ Support Rouging
147
+
148
+ - Rails Engine Routing
149
+ - Rails Normal Routing
150
+
151
+ ## ❤️ Support OpenAPI Schema
152
+
153
+ OpenAPIの3.0.0をサポートしてます。
154
+
155
+ 公式ドキュメントはこちら => https://yukihirop.github.io/r2-oas/#/schema/3.0.0
156
+
157
+ ## ❗️Convention over Configuration (CoC)
158
+
159
+ ツールを便利にするために、設定よりも制約があります。
160
+
161
+ - `タグ名` は `コントローラー名` を表しており、`pathsファイル名とパス` を決定するのに使用されます。
162
+ - 例えば、 `コントローラー名` が `Api::V1::UsersController` ならば、 `タグ名` は `api/v1/user` になります。そして、 `pathsファイル名とパス` は `api/v1/user.yml` となります。
163
+
164
+ - `components/{schemas, requestBodies, ...}名` の `_` は保存時に `/` に変換されます。hennkannsaremasu.
165
+ - 例えば、 `components/schemas名` が `Api_V1_User` なら、 `components/schemasのファイル名とパス` は `api/v1/user.yml` となります。
166
+ - フォーマットは、 `Namespace1_Namespace2_Model` です。
167
+
168
+ - `components/{schemas, requestBodies, ...}名` の `.` は保存時に `/` に変換されます。hennkannsaremasu.
169
+ - 例えば、 `components/schemas名` が `api.v1.User` なら、 `components/schemasのファイル名とパス` は `api/v1/user.yml` となります。
170
+ - フォーマットは、 `namespace1.namespace2.Model` です。
171
+
172
+ ## ⚙ Configure
173
+
174
+ 全ての設定は `オプショナル` です。設定してもしなくても構いません。
175
+
176
+ 公式ドキュメントはこちら => https://yukihirop.github.io/r2-oas/#/setting/configure
177
+
178
+ ## Bundle and Rspec with multiple ruby ​​versions
179
+
180
+ #### Bundle
181
+
182
+ ```bash
183
+ /bin/bash devscript/all_support_ruby.sh bundle
184
+ .
185
+ .
186
+ .
187
+ ===== Bundle install for All Support Ruby Result =====
188
+ ruby-2.3.3: 0
189
+ ruby-2.4.2: 0
190
+ ruby-2.5.8: 0
191
+ ruby-2.6.6: 0
192
+ ruby-2.7.1: 0
193
+ ======================================================
194
+ ```
195
+
196
+ rubyのバージョンを `2.6.6` と `2.7.1` に指定する場合
197
+
198
+ ```bash
199
+ /bin/bash devscript/all_support_ruby.sh bundle 2.6.6 2.7.1
200
+ .
201
+ .
202
+ .
203
+ ===== Bundle install for All Support Ruby Result =====
204
+ ruby-2.6.6: 0
205
+ ruby-2.7.1: 0
206
+ ======================================================
207
+ ```
208
+
209
+ #### Rspec
210
+
211
+ ```bash
212
+ /bin/bash devscript/all_support_ruby.sh rspec
213
+ .
214
+ .
215
+ .
216
+ ===== Rspec for All Support Ruby Result =====
217
+ ruby-2.3.3: 0
218
+ ruby-2.4.2: 0
219
+ ruby-2.5.8: 0
220
+ ruby-2.6.6: 0
221
+ ruby-2.7.1: 0
222
+ =============================================
223
+ ```
224
+
225
+ rubyのバージョンを `2.6.6` と `2.7.1` に指定する場合
226
+
227
+ ```bash
228
+ /bin/bash devscript/all_support_ruby.sh rspec 2.6.6 2.7.1
229
+ .
230
+ .
231
+ .
232
+ ===== Rspec for All Support Ruby Result =====
233
+ ruby-2.6.6: 0
234
+ ruby-2.7.1: 0
235
+ =============================================
236
+ ```
237
+
238
+ ## 🔩 CORS
239
+
240
+ [rack-cors](https://github.com/cyu/rack-cors)を使用する事でCORSを可能にします。
241
+
242
+ ```ruby
243
+ require 'rack/cors'
244
+ use Rack::Cors do
245
+ allow do
246
+ origins '*'
247
+ resource '*', headers: :any, methods: [ :get, :post, :put, :delete, :options ]
248
+ end
249
+ end
250
+ ```
251
+
252
+ `before` ブロックにCORSヘッダーを設定できます。
253
+
254
+ ```ruby
255
+ before do
256
+ header['Access-Control-Allow-Origin'] = '*'
257
+ header['Access-Control-Request-Method'] = '*'
258
+ end
259
+ ```
260
+
261
+ ## 📝 License
262
+
263
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
264
+
265
+ ## 🤝 Contributing
266
+
267
+ 1. Fork it ( http://github.com/yukihirop/r2-oas/fork )
268
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
269
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
270
+ 4. Push to the branch (`git push origin my-new-feature`)
271
+ 5. Create new Pull Request
@@ -0,0 +1,271 @@
1
+ # R2-OAS
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/r2-oas.svg)](https://badge.fury.io/rb/r2-oas)
4
+ [![Build Status](https://travis-ci.org/yukihirop/r2-oas.svg?branch=master)](https://travis-ci.org/yukihirop/r2-oas)
5
+ [![Coverage Status](https://coveralls.io/repos/github/yukihirop/r2-oas/badge.svg)](https://coveralls.io/github/yukihirop/r2-oas)
6
+ [![Maintainability](https://api.codeclimate.com/v1/badges/f8c3846f350bb412fd63/maintainability)](https://codeclimate.com/github/yukihirop/r2-oas/maintainability)
7
+
8
+ Generate api docment(OpenAPI) side only from `Rails` routing.
9
+
10
+ Provides a rake command to help `generate` , `view` , and `edit` OpenAPI documents.
11
+
12
+ ```bash
13
+ bunlde exec rake routes:oas:init # initialize
14
+ bundle exec rake routes:oas:docs # generate
15
+ bundle exec rake routes:oas:ui # view
16
+ bundle exec rake routes:oas:editor # edit
17
+ bundle exec rake routes:oas:monitor # monitor
18
+ bundle exec rake routes:oas:build # build
19
+ bundle exec rake routes:oas:clean # clean
20
+ bundle exec rake routes:oas:analyze # analyze
21
+ bundle exec rake routes:oas:deploy # deploy
22
+ ```
23
+
24
+ ## 💎 Installation
25
+
26
+ Add this line to your application's Gemfile:
27
+
28
+ ```ruby
29
+ group :development do
30
+ gem 'r2-oas'
31
+ end
32
+ ```
33
+
34
+ And then execute:
35
+
36
+ $ bundle
37
+
38
+ Or install it yourself as:
39
+
40
+ $ gem install r2-oas
41
+
42
+ ## 🔦 Requirements
43
+
44
+ If you want to view with `Swagger UI` or edit with `Swagger Editor`, This gem needs the following:
45
+
46
+ - [`swaggerapi/swagger-ui:latest` docker image](https://hub.docker.com/r/swaggerapi/swagger-ui/)
47
+ - [`swaggerapi/swagger-editor:latest` docker image](https://hub.docker.com/r/swaggerapi/swagger-editor/)
48
+ - [`chromedriver`](http://chromedriver.chromium.org/downloads)
49
+
50
+ If you do not have it download as below.
51
+
52
+ ```
53
+ $ docker pull swaggerapi/swagger-editor:latest
54
+ $ docker pull swaggerapi/swagger-ui:latest
55
+ $ brew cask install chromedriver
56
+ ```
57
+
58
+ ## 🚀 Tutorial
59
+
60
+ After requiring a gem,
61
+
62
+ ```bash
63
+ bundle exec routes:oas:docs
64
+ bundle exec routes:oas:editor
65
+ ```
66
+
67
+ #### Generate docs
68
+
69
+ ![oas_docs](https://user-images.githubusercontent.com/11146767/80856236-0b839a80-8c83-11ea-888f-d0e659e0c251.gif)
70
+
71
+
72
+ #### Edit docs
73
+
74
+ ![oas_editor](https://user-images.githubusercontent.com/11146767/80856240-15a59900-8c83-11ea-9dbd-4382528944f2.gif)
75
+
76
+ ## Usage
77
+
78
+ You can execute the following command in the root directory of rails.
79
+ The following are examples of typical command usage.
80
+
81
+ Full docs are available at https://yukihirop.github.io/r2-oas
82
+
83
+ ### Initialize
84
+
85
+ Initialize r2-oas.
86
+
87
+ ```bash
88
+ $ bundle exec rake routes:oas:init
89
+ ```
90
+
91
+ ### Generate
92
+
93
+ Generate docs.
94
+
95
+ ```bash
96
+ $ bundle exec rake routes:oas:docs # Generate docs
97
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:docs # Generate docs by specify unit paths
98
+ ```
99
+
100
+ ### Editor
101
+
102
+ Start swagger editor.
103
+
104
+ ```bash
105
+ $ bundle exec rake routes:oas:editor # Start swagger editor
106
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:editor # Start swagger editor by specify unit paths
107
+ ```
108
+
109
+ ### UI
110
+
111
+ Start swagger ui.
112
+
113
+ ```bash
114
+ $ bundle exec rake routes:oas:ui # Start swagger ui
115
+ $ PATHS_FILE="oas_docs/schema/paths/api/v1/task.yml" bundle exec rake routes:oas:ui # Start swagger ui by specify unit paths
116
+ ```
117
+
118
+ ### Build
119
+
120
+ Build docs.
121
+ `Plugin is applied`
122
+
123
+ ```bash
124
+ $ bundle exec rake routes:oas:build
125
+ ```
126
+
127
+ ### Analyze
128
+
129
+ Analyze docs.
130
+ Reads OpenAPI format document and divides it into several parts to generate a source file
131
+
132
+ ```bash
133
+ $ OAS_FILE="~/Desktop/swagger.yml" bundle exec rake routes:oas:analyze
134
+ ```
135
+
136
+ ## 📚 Documents
137
+
138
+ Full docs are available at https://yukihirop.github.io/r2-oas
139
+
140
+ ## ❤️ Support Rails Version
141
+
142
+ - Rails (>= 4.2.5.1)
143
+
144
+ ## ❤️ Support Ruby Version
145
+
146
+ - Ruby (>= 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin18])
147
+
148
+ ## ❤️ Support Rouging
149
+
150
+ - Rails Engine Routing
151
+ - Rails Normal Routing
152
+
153
+ ## ❤️ Support OpenAPI Schema
154
+
155
+ Full docs are available at https://yukihirop.github.io/r2-oas/#/schema/3.0.0
156
+
157
+ ## ❗️ Convention over Configuration (CoC)
158
+
159
+ - `tag name` represents `controller name` and determine `paths file name`.
160
+ - For example, If `controller name` is `Api::V1::UsersController`, `tag_name` is `api/v1/user`. and `paths file name` is `api/v1/user.yml`
161
+
162
+ - `_` of `components/{schemas,requestBodies, ...} name` convert `/` when save file.
163
+ - For example, If `components/schemas name` is `Api_V1_User`, `components/schemas file name` is `api/v1/user.yml`.
164
+ - `_` is supposed to be used to express `namespace`.
165
+ - format is `Namespace1_Namespace2_Model`.
166
+
167
+ - `.` of `components/{schemas,requestBodies, ...} name` convert `/` when save file.
168
+ - For example, If `components/schemas name` is `api.v1.User`, `components/schemas file name` is `api/v1/user.yml`.
169
+ - `.` is supposed to be used to express `namespace`.
170
+ - format is `namespace1.namespace2.Model`.
171
+
172
+ ## ⚙ Configure
173
+
174
+ All settings are `optional`
175
+
176
+ Full docs are available at https://yukihirop.github.io/r2-oas/#/setting/configure
177
+
178
+ ## Bundle and Rspec with multiple ruby ​​versions
179
+
180
+ #### Bundle
181
+
182
+ ```bash
183
+ /bin/bash devscript/all_support_ruby.sh bundle
184
+ .
185
+ .
186
+ .
187
+ ===== Bundle install for All Support Ruby Result =====
188
+ ruby-2.3.3: 0
189
+ ruby-2.4.2: 0
190
+ ruby-2.5.8: 0
191
+ ruby-2.6.6: 0
192
+ ruby-2.7.1: 0
193
+ ======================================================
194
+ ```
195
+
196
+ If specify ruby version `2.6.6` and `2.7.1`
197
+
198
+ ```bash
199
+ /bin/bash devscript/all_support_ruby.sh bundle 2.6.6 2.7.1
200
+ .
201
+ .
202
+ .
203
+ ===== Bundle install for All Support Ruby Result =====
204
+ ruby-2.6.6: 0
205
+ ruby-2.7.1: 0
206
+ ======================================================
207
+ ```
208
+
209
+ #### Rspec
210
+
211
+ ```bash
212
+ /bin/bash devscript/all_support_ruby.sh rspec
213
+ .
214
+ .
215
+ .
216
+ ===== Rspec for All Support Ruby Result =====
217
+ ruby-2.3.3: 0
218
+ ruby-2.4.2: 0
219
+ ruby-2.5.8: 0
220
+ ruby-2.6.6: 0
221
+ ruby-2.7.1: 0
222
+ =============================================
223
+ ```
224
+
225
+ If specify ruby version `2.6.6` and `2.7.1`
226
+
227
+ ```bash
228
+ /bin/bash devscript/all_support_ruby.sh rspec 2.6.6 2.7.1
229
+ .
230
+ .
231
+ .
232
+ ===== Rspec for All Support Ruby Result =====
233
+ ruby-2.6.6: 0
234
+ ruby-2.7.1: 0
235
+ =============================================
236
+ ```
237
+
238
+ ## 🔩 CORS
239
+
240
+ Use [rack-cors](https://github.com/cyu/rack-cors) to enable CORS.
241
+
242
+ ```ruby
243
+ require 'rack/cors'
244
+ use Rack::Cors do
245
+ allow do
246
+ origins '*'
247
+ resource '*', headers: :any, methods: [ :get, :post, :put, :delete, :options ]
248
+ end
249
+ end
250
+ ```
251
+
252
+ Alternatively you can set CORS headers in a `before` block.
253
+
254
+ ```ruby
255
+ before do
256
+ header['Access-Control-Allow-Origin'] = '*'
257
+ header['Access-Control-Request-Method'] = '*'
258
+ end
259
+ ```
260
+
261
+ ## 📝 License
262
+
263
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
264
+
265
+ ## 🤝 Contributing
266
+
267
+ 1. Fork it ( http://github.com/yukihirop/r2-oas/fork )
268
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
269
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
270
+ 4. Push to the branch (`git push origin my-new-feature`)
271
+ 5. Create new Pull Request