r2-oas 0.4.0
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 +7 -0
- data/CHANGELOG.md +99 -0
- data/GEMSPEC.md +20 -0
- data/LICENSE.txt +21 -0
- data/README.ja.md +271 -0
- data/README.md +271 -0
- data/lib/r2-oas.rb +35 -0
- data/lib/r2-oas/app_configuration.rb +121 -0
- data/lib/r2-oas/app_configuration/deprecation.rb +28 -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 +121 -0
- data/lib/r2-oas/configuration/paths_config.rb +44 -0
- data/lib/r2-oas/deploy/client.rb +70 -0
- data/lib/r2-oas/deploy/swagger-ui/index.html.erb +60 -0
- data/lib/r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object.rb +100 -0
- data/lib/r2-oas/errors.rb +13 -0
- data/lib/r2-oas/hooks/global_hook.rb +20 -0
- data/lib/r2-oas/hooks/hook.rb +79 -0
- data/lib/r2-oas/hooks/repository.rb +15 -0
- data/lib/r2-oas/lib/core_ext/hash/deep_merge.rb +44 -0
- data/lib/r2-oas/lib/core_ext/object/blank.rb +135 -0
- data/lib/r2-oas/lib/three-way-merge/twm.rb +83 -0
- data/lib/r2-oas/logger/stdout_logger.rb +129 -0
- data/lib/r2-oas/pluggable_configuration.rb +36 -0
- data/lib/r2-oas/plugin/base.rb +44 -0
- data/lib/r2-oas/plugin/executor.rb +148 -0
- data/lib/r2-oas/plugin/hookable.rb +42 -0
- data/lib/r2-oas/plugin/public.rb +3 -0
- data/lib/r2-oas/plugin/transform/transform.rb +10 -0
- data/lib/r2-oas/plugin/transform/v3/transform.rb +20 -0
- data/lib/r2-oas/plugin/transform/v3/visitable.rb +37 -0
- data/lib/r2-oas/public.rb +5 -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/builder.rb +23 -0
- data/lib/r2-oas/schema/cleaner.rb +23 -0
- data/lib/r2-oas/schema/editor.rb +146 -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/manager/file_manager.rb +26 -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 +73 -0
- data/lib/r2-oas/schema/v3/analyzer.rb +58 -0
- data/lib/r2-oas/schema/v3/analyzer/base_analyzer.rb +71 -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/builder.rb +28 -0
- data/lib/r2-oas/schema/v3/builder/base_builder.rb +72 -0
- data/lib/r2-oas/schema/v3/builder/doc_builder.rb +51 -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 +24 -0
- data/lib/r2-oas/schema/v3/generator/base_generator.rb +122 -0
- data/lib/r2-oas/schema/v3/generator/components/object_generator.rb +64 -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 +115 -0
- data/lib/r2-oas/schema/v3/generator/path_generator.rb +78 -0
- data/lib/r2-oas/schema/v3/generator/schema_generator.rb +58 -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 +66 -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 +89 -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 +78 -0
- data/lib/r2-oas/schema/v3/object/from_files/base_object.rb +62 -0
- data/lib/r2-oas/schema/v3/object/from_files/components/request_body_object.rb +103 -0
- data/lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb +102 -0
- data/lib/r2-oas/schema/v3/object/from_files/components_object.rb +46 -0
- data/lib/r2-oas/schema/v3/object/from_files/external_document_object.rb +23 -0
- data/lib/r2-oas/schema/v3/object/from_files/info_object.rb +23 -0
- data/lib/r2-oas/schema/v3/object/from_files/openapi_object.rb +61 -0
- data/lib/r2-oas/schema/v3/object/from_files/path_item_object.rb +110 -0
- data/lib/r2-oas/schema/v3/object/from_files/paths_object.rb +33 -0
- data/lib/r2-oas/schema/v3/object/from_files/utils/all.rb +4 -0
- data/lib/r2-oas/schema/v3/object/from_files/utils/deep_methods.rb +27 -0
- data/lib/r2-oas/schema/v3/object/from_files/utils/refs.rb +151 -0
- data/lib/r2-oas/schema/v3/object/from_routes/base_object.rb +75 -0
- data/lib/r2-oas/schema/v3/object/from_routes/components/request_body_object.rb +96 -0
- data/lib/r2-oas/schema/v3/object/from_routes/components/schema_object.rb +59 -0
- data/lib/r2-oas/schema/v3/object/from_routes/components_object.rb +81 -0
- data/lib/r2-oas/schema/v3/object/from_routes/external_document_object.rb +28 -0
- data/lib/r2-oas/schema/v3/object/from_routes/info_object.rb +43 -0
- data/lib/r2-oas/schema/v3/object/from_routes/openapi_object.rb +59 -0
- data/lib/r2-oas/schema/v3/object/from_routes/path_item_object.rb +175 -0
- data/lib/r2-oas/schema/v3/object/from_routes/paths_object.rb +77 -0
- data/lib/r2-oas/schema/v3/object/from_routes/public.rb +9 -0
- data/lib/r2-oas/schema/v3/object/from_routes/server_object.rb +21 -0
- data/lib/r2-oas/schema/v3/object/from_routes/tag_object.rb +37 -0
- data/lib/r2-oas/schema/v3/object/store.rb +54 -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 +4 -0
- data/lib/r2-oas/shared/callable.rb +17 -0
- data/lib/r2-oas/shared/sortable.rb +23 -0
- data/lib/r2-oas/store.rb +122 -0
- data/lib/r2-oas/support/deprecation.rb +24 -0
- data/lib/r2-oas/support/deprecation/behavior.rb +21 -0
- data/lib/r2-oas/support/deprecation/instance_delegator.rb +42 -0
- data/lib/r2-oas/support/deprecation/reporting.rb +91 -0
- data/lib/r2-oas/task.rb +11 -0
- data/lib/r2-oas/task_logging.rb +41 -0
- data/lib/r2-oas/tasks/common.rake +25 -0
- data/lib/r2-oas/tasks/main.rake +132 -0
- data/lib/r2-oas/tasks/tool.rake +86 -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 +48 -0
- metadata +415 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'forwardable'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
require_relative '../base_generator'
|
|
6
|
+
require 'r2-oas/schema/v3/manager/file/components_file_manager'
|
|
7
|
+
|
|
8
|
+
module R2OAS
|
|
9
|
+
module Schema
|
|
10
|
+
module V3
|
|
11
|
+
module Components
|
|
12
|
+
class ObjectGenerator < BaseGenerator
|
|
13
|
+
def initialize(schema_data = {}, options = {})
|
|
14
|
+
super(options.except(:middle_category))
|
|
15
|
+
@major_category = 'components'
|
|
16
|
+
@middle_category = options[:middle_category]
|
|
17
|
+
sorted_schema_data = deep_sort(schema_data, @middle_category)
|
|
18
|
+
@components_objects = sorted_schema_data[@middle_category]
|
|
19
|
+
@glob_schema_paths = create_glob_components_objects_paths
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def generate_docs
|
|
23
|
+
logger.info ' <From routes data>'
|
|
24
|
+
generate_docs_from_routes_data
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
alias components_objects_files_paths schema_files_paths
|
|
30
|
+
|
|
31
|
+
def generate_docs_from_routes_data
|
|
32
|
+
process_when_generate_docs do |save_file_path|
|
|
33
|
+
logger.info " Add schema file into store: \t#{save_file_path}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def process_when_generate_docs
|
|
38
|
+
logger.info " <Update Components schema files (#{@major_category}/#{@middle_category})>"
|
|
39
|
+
@components_objects&.each do |schema_name, data|
|
|
40
|
+
result = {
|
|
41
|
+
@major_category => {
|
|
42
|
+
@middle_category => { schema_name.to_s => data }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
relative_path = "#{@major_category}/#{@middle_category}/#{schema_name}"
|
|
47
|
+
file_manager = ComponentsFileManager.build(relative_path, :relative)
|
|
48
|
+
save_file_path = file_manager.save_file_path(type: :relative)
|
|
49
|
+
store.add(save_file_path, result.to_yaml)
|
|
50
|
+
|
|
51
|
+
yield save_file_path if block_given?
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def create_glob_components_objects_paths
|
|
56
|
+
many_components_file_paths.select do |file_path|
|
|
57
|
+
file_path.include? "#{schema_save_dir_path}/#{@major_category}/#{@middle_category}"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'forwardable'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
require_relative 'object_generator'
|
|
6
|
+
require 'r2-oas/schema/v3/manager/file/components_file_manager'
|
|
7
|
+
|
|
8
|
+
module R2OAS
|
|
9
|
+
module Schema
|
|
10
|
+
module V3
|
|
11
|
+
module Components
|
|
12
|
+
class RequestBodyGenerator < ObjectGenerator
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
# override
|
|
16
|
+
def process_when_generate_docs
|
|
17
|
+
logger.info " <Update Components schema files (#{@major_category}/#{@middle_category})>"
|
|
18
|
+
@components_objects&.each do |schema_name, data|
|
|
19
|
+
result = {
|
|
20
|
+
@major_category => {
|
|
21
|
+
@middle_category => { schema_name.to_s => data.slice('content') }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
relative_path = "#{@major_category}/#{@middle_category}/#{schema_name}"
|
|
26
|
+
file_manager = ComponentsFileManager.build(relative_path, :relative)
|
|
27
|
+
save_file_path = file_manager.save_file_path(type: :relative)
|
|
28
|
+
store.add(save_file_path, result.to_yaml)
|
|
29
|
+
|
|
30
|
+
if data.key?('has_one') && data['has_one']['type'].eql?('schema')
|
|
31
|
+
original_path = data['has_one']['original_path']
|
|
32
|
+
file_manager = ComponentsFileManager.new(original_path, :ref)
|
|
33
|
+
result = data['has_one']['data']
|
|
34
|
+
save_file_path = file_manager.save_file_path(type: :relative)
|
|
35
|
+
store.add(save_file_path, result.to_yaml)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
yield save_file_path if block_given?
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base_generator'
|
|
4
|
+
require_relative 'components/object_generator'
|
|
5
|
+
require_relative 'components/request_body_generator'
|
|
6
|
+
|
|
7
|
+
module R2OAS
|
|
8
|
+
module Schema
|
|
9
|
+
module V3
|
|
10
|
+
class ComponentsGenerator < BaseGenerator
|
|
11
|
+
def initialize(schema_data = {}, options = {})
|
|
12
|
+
super(options)
|
|
13
|
+
@components = schema_data['components'] || scehma_data[:components]
|
|
14
|
+
@options = options
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def generate_docs
|
|
18
|
+
support_components_objects.each do |object_name|
|
|
19
|
+
generator_class(object_name).new(@components, @options.merge(
|
|
20
|
+
middle_category: object_name
|
|
21
|
+
)).generate_docs
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def generator_class(object_name)
|
|
28
|
+
case object_name
|
|
29
|
+
when 'requestBodies'
|
|
30
|
+
Components::RequestBodyGenerator
|
|
31
|
+
else
|
|
32
|
+
Components::ObjectGenerator
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'yaml'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
require 'r2-oas/errors'
|
|
6
|
+
require 'r2-oas/lib/three-way-merge/twm'
|
|
7
|
+
require 'r2-oas/schema/v3/manager/file_manager'
|
|
8
|
+
require_relative 'base_generator'
|
|
9
|
+
require_relative 'schema_generator'
|
|
10
|
+
|
|
11
|
+
module R2OAS
|
|
12
|
+
module Schema
|
|
13
|
+
module V3
|
|
14
|
+
class DocGenerator < BaseGenerator
|
|
15
|
+
def initialize(options = {})
|
|
16
|
+
super
|
|
17
|
+
@schema_generator = SchemaGenerator.new(options)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def generate_docs
|
|
21
|
+
logger.info '[Generate OAS schema files] start'
|
|
22
|
+
@schema_generator.generate_docs
|
|
23
|
+
save_schemas_from_store
|
|
24
|
+
logger.info '[Generate OAS schema files] end'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def save_schemas_from_store
|
|
30
|
+
local_store = ::R2OAS::Store.new(cache_docs)
|
|
31
|
+
|
|
32
|
+
# Check checksum
|
|
33
|
+
unless local_store.checksum?
|
|
34
|
+
raise R2OAS::ChecksumError, <<-ERR
|
|
35
|
+
|
|
36
|
+
Invalid file: #{relative_cahe_docs_path}
|
|
37
|
+
Please delete #{relative_cahe_docs_path} and execute the following command again.
|
|
38
|
+
|
|
39
|
+
CACHE_DOCS=true bundle exec rake routes:oas:docs
|
|
40
|
+
ERR
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
save_diff_schemas_from(local_store)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def save_diff_schemas_from(local_store)
|
|
47
|
+
local_sha1s = local_store.data['data'].keys
|
|
48
|
+
global_sha1s = store.data['data'].keys
|
|
49
|
+
|
|
50
|
+
# Maake diff sha1s
|
|
51
|
+
new_sha1s, after_sha1s, before_sha1s = nil
|
|
52
|
+
if exists_cache?
|
|
53
|
+
after_sha1s = global_sha1s - local_sha1s
|
|
54
|
+
before_sha1s = local_sha1s - global_sha1s
|
|
55
|
+
else
|
|
56
|
+
new_sha1s = global_sha1s - local_sha1s
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Make diff store
|
|
60
|
+
new_store = store.dup_slice(*new_sha1s)
|
|
61
|
+
after_store = store.dup_slice(*after_sha1s)
|
|
62
|
+
before_store = local_store.dup_slice(*before_sha1s)
|
|
63
|
+
|
|
64
|
+
is_exists_cache = exists_cache?
|
|
65
|
+
if is_exists_cache || schema_file_do_not_exists?
|
|
66
|
+
unless is_create_cache
|
|
67
|
+
# First try
|
|
68
|
+
if new_store&.exists?
|
|
69
|
+
new_store.save do |save_path|
|
|
70
|
+
logger.info " Write schema file: \t#{save_path}"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Change routing
|
|
75
|
+
after_store.diff_from(before_store) do |analyze_data|
|
|
76
|
+
analyze_data.each do |file_path, data|
|
|
77
|
+
left = data['after']
|
|
78
|
+
orig = data['before']
|
|
79
|
+
right = FileManager.new(file_path, :full).load_data
|
|
80
|
+
merged3 = Twm.yaml_merge(left, orig, right)
|
|
81
|
+
analyzer = Analyzer.new({}, merged3, type: :edited)
|
|
82
|
+
analyzer.analyze_docs
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# TODO: Fix Bugs
|
|
87
|
+
# Delete paths/unknown.yml
|
|
88
|
+
file_manager = FileManager.new(unknown_paths_path, :full)
|
|
89
|
+
file_manager.delete
|
|
90
|
+
end
|
|
91
|
+
else
|
|
92
|
+
unless is_create_cache || is_exists_cache
|
|
93
|
+
raise NoFileExistsError, <<-ERR
|
|
94
|
+
|
|
95
|
+
Can't find the file #{relative_cahe_docs_path}
|
|
96
|
+
Please execute the following command to create #{relative_cahe_docs_path}
|
|
97
|
+
|
|
98
|
+
CACHE_DOCS=true bundle exec rake routes:oas:docs
|
|
99
|
+
ERR
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Save docs cache
|
|
104
|
+
deflated_cache_docs = Zlib::Deflate.deflate(Marshal.dump(store.data))
|
|
105
|
+
IO.binwrite(abs_cache_docs_path, deflated_cache_docs)
|
|
106
|
+
if is_exists_cache
|
|
107
|
+
logger.info "[Generate OAS docs] Update cache at #{relative_cahe_docs_path}"
|
|
108
|
+
else
|
|
109
|
+
logger.info "[Generate OAS docs] Create cache at #{relative_cahe_docs_path}"
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'forwardable'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
require_relative 'base_generator'
|
|
6
|
+
require 'r2-oas/schema/v3/manager/file/path_item_file_manager'
|
|
7
|
+
|
|
8
|
+
module R2OAS
|
|
9
|
+
module Schema
|
|
10
|
+
module V3
|
|
11
|
+
class PathGenerator < BaseGenerator
|
|
12
|
+
def initialize(schema_data = {}, options = {})
|
|
13
|
+
super(options)
|
|
14
|
+
sorted_schema_data = deep_sort(schema_data, 'paths')
|
|
15
|
+
@paths = sorted_schema_data['paths']
|
|
16
|
+
@glob_schema_paths = create_glob_paths_paths
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def generate_docs
|
|
20
|
+
logger.info ' <From routes data>'
|
|
21
|
+
generate_docs_from_routes_data
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
alias paths_files_paths schema_files_paths
|
|
27
|
+
|
|
28
|
+
def generate_docs_from_routes_data
|
|
29
|
+
process_when_generate_docs do |save_file_path|
|
|
30
|
+
logger.info " Add schema file into store: \t#{save_file_path}"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def process_when_generate_docs
|
|
35
|
+
logger.info ' <Update schema files (paths)>'
|
|
36
|
+
save_each_tags(@paths) do |tag_name, result|
|
|
37
|
+
relative_path = "paths/#{tag_name}"
|
|
38
|
+
file_manager = PathItemFileManager.new(relative_path, :relative)
|
|
39
|
+
save_file_path = file_manager.save_file_path(type: :relative)
|
|
40
|
+
store.add(save_file_path, result.to_yaml)
|
|
41
|
+
|
|
42
|
+
yield save_file_path if block_given?
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def create_glob_paths_paths
|
|
47
|
+
if many_paths_file_paths.present? && !skip_load_dot_paths
|
|
48
|
+
many_paths_file_paths
|
|
49
|
+
else
|
|
50
|
+
["#{schema_save_dir_path}/paths/**/**.yml"]
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def unit_paths_data_group_by_tags(unit_paths_data)
|
|
55
|
+
unit_paths_data.each_with_object({}) do |(path, data_when_path), result|
|
|
56
|
+
data_when_path.each do |verb, data_when_verb|
|
|
57
|
+
tag_name = data_when_verb['tags'].first
|
|
58
|
+
result[tag_name] ||= {}
|
|
59
|
+
result[tag_name].deep_merge!(
|
|
60
|
+
'paths' => {
|
|
61
|
+
path => {
|
|
62
|
+
verb => data_when_verb
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def save_each_tags(unit_paths_data)
|
|
71
|
+
unit_paths_data_group_by_tags(unit_paths_data).each do |tag_name, result|
|
|
72
|
+
yield [tag_name, result] if block_given?
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
require_relative 'base_generator'
|
|
5
|
+
require_relative 'path_generator'
|
|
6
|
+
require_relative 'components_generator'
|
|
7
|
+
require 'r2-oas/schema/v3/manager/file_manager'
|
|
8
|
+
|
|
9
|
+
module R2OAS
|
|
10
|
+
module Schema
|
|
11
|
+
module V3
|
|
12
|
+
class SchemaGenerator < BaseGenerator
|
|
13
|
+
def initialize(options = {})
|
|
14
|
+
super(options)
|
|
15
|
+
@docs = create_docs
|
|
16
|
+
@options = options
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def generate_docs
|
|
20
|
+
logger.info '<From routes data>'
|
|
21
|
+
generate_docs_from_routes_data
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def generate_docs_from_routes_data
|
|
27
|
+
process_when_generate_docs do |save_file_path|
|
|
28
|
+
logger.info " Add schema file into store: \t#{save_file_path}"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def process_when_generate_docs
|
|
33
|
+
logger.info '<Update schema files>'
|
|
34
|
+
@docs.each do |field_name, data|
|
|
35
|
+
result = { field_name.to_s => data }
|
|
36
|
+
|
|
37
|
+
case field_name
|
|
38
|
+
when 'paths'
|
|
39
|
+
logger.info ' [Generate OAS schema files (paths)] start'
|
|
40
|
+
PathGenerator.new(result, @options).generate_docs
|
|
41
|
+
logger.info ' [Generate OAS schema files (paths)] end'
|
|
42
|
+
when 'components'
|
|
43
|
+
logger.info ' [Generate OAS schema files (components)] start'
|
|
44
|
+
ComponentsGenerator.new(result, @options).generate_docs
|
|
45
|
+
logger.info ' [Generate OAS schema files (components)] end'
|
|
46
|
+
else
|
|
47
|
+
file_manager = FileManager.new(field_name, :relative)
|
|
48
|
+
save_file_path = file_manager.save_file_path(type: :relative)
|
|
49
|
+
store.add(save_file_path, result.to_yaml)
|
|
50
|
+
|
|
51
|
+
yield file_manager.save_file_path(type: :relative) if block_given?
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base_diff_manager'
|
|
4
|
+
|
|
5
|
+
module R2OAS
|
|
6
|
+
module Schema
|
|
7
|
+
module V3
|
|
8
|
+
class BaseArrayDiffManager < BaseDiffManager
|
|
9
|
+
def initialize(before_schema_data, after_schema_data)
|
|
10
|
+
super
|
|
11
|
+
@major_category = 'base'
|
|
12
|
+
@judge_key = ''
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def process_by_using_diff_data
|
|
16
|
+
before_data_at_major = @before_schema_data[@major_category]
|
|
17
|
+
after_data_at_major = @after_schema_data[@major_category]
|
|
18
|
+
after_schema_data_grouped_by = schema_data_grouped_by_judge_key(after_data_at_major)
|
|
19
|
+
|
|
20
|
+
result = before_data_at_major.map do |data|
|
|
21
|
+
judge_name = data[@judge_key]
|
|
22
|
+
if judge_name.in? after_schema_data_grouped_by.keys
|
|
23
|
+
after_schema_data_grouped_by[judge_name]
|
|
24
|
+
else
|
|
25
|
+
data
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
yield schema_data_at(result) if block_given?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def after_target_data
|
|
33
|
+
schema_data_at(@after_schema_data[@major_category])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def schema_data_grouped_by_judge_key(arr)
|
|
39
|
+
arr.each_with_object({}) do |data, result|
|
|
40
|
+
result.deep_merge!(data[@judge_key] => data)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def schema_data_at(data)
|
|
45
|
+
{
|
|
46
|
+
@major_category => data
|
|
47
|
+
}
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def to_boolean(diff)
|
|
51
|
+
if diff.present?
|
|
52
|
+
diff[@major_category].present?
|
|
53
|
+
else
|
|
54
|
+
false
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|