r2-oas 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'easy_diff'
|
4
|
+
require 'r2-oas/schema/v3/base'
|
5
|
+
|
6
|
+
module R2OAS
|
7
|
+
module Schema
|
8
|
+
module V3
|
9
|
+
class BaseDiffManager < Base
|
10
|
+
include Sortable
|
11
|
+
|
12
|
+
def initialize(before_schema_data, after_schema_data)
|
13
|
+
@before_schema_data = before_schema_data
|
14
|
+
@after_schema_data = after_schema_data
|
15
|
+
end
|
16
|
+
|
17
|
+
def process_by_using_diff_data
|
18
|
+
raise NoImplementError, 'Please implement in inherited class.'
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def ensure_presence_or_blank(data)
|
24
|
+
data.present? ? data : {}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_diff_manager'
|
4
|
+
|
5
|
+
module R2OAS
|
6
|
+
module Schema
|
7
|
+
module V3
|
8
|
+
class BaseHashDiffManager < BaseDiffManager
|
9
|
+
include Sortable
|
10
|
+
|
11
|
+
def initialize(before_schema_data, after_schema_data)
|
12
|
+
super
|
13
|
+
@major_category = 'base'
|
14
|
+
@middle_category = 'middle'
|
15
|
+
end
|
16
|
+
|
17
|
+
def process_by_using_diff_data
|
18
|
+
before_target_data = sorted_target_data(@before_schema_data)
|
19
|
+
before_target_data_names = before_target_data.keys.uniq
|
20
|
+
after_target_data = sorted_target_data(@after_schema_data)
|
21
|
+
after_target_data_names = after_target_data.keys.uniq
|
22
|
+
target_names = (before_target_data_names + after_target_data_names).uniq
|
23
|
+
|
24
|
+
target_names.each do |target_name|
|
25
|
+
before_schema_data = schema_data_at(before_target_data, target_name)
|
26
|
+
after_schema_data = schema_data_at(after_target_data, target_name)
|
27
|
+
|
28
|
+
removed, added = before_schema_data.easy_diff(after_schema_data)
|
29
|
+
leftovers, = before_schema_data.easy_diff(removed)
|
30
|
+
|
31
|
+
is_removed = to_boolean(removed, target_name)
|
32
|
+
is_added = to_boolean(added, target_name)
|
33
|
+
is_leftovers = to_boolean(leftovers, target_name)
|
34
|
+
|
35
|
+
yield(target_name, is_removed, is_added, is_leftovers, after_schema_data) if block_given?
|
36
|
+
end
|
37
|
+
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def normalized(data)
|
44
|
+
if data.present?
|
45
|
+
data
|
46
|
+
elsif @middle_category.present?
|
47
|
+
{ @major_category => { @middle_category => {} } }
|
48
|
+
else
|
49
|
+
{ @major_category => {} }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def schema_data_at(data, key)
|
54
|
+
if @middle_category.present?
|
55
|
+
{
|
56
|
+
@major_category => {
|
57
|
+
@middle_category => {
|
58
|
+
key => data.fetch(key, nil)
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
else
|
63
|
+
{
|
64
|
+
@major_category => {
|
65
|
+
key => data.fetch(key, nil)
|
66
|
+
}
|
67
|
+
}
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def sorted_target_data(data)
|
72
|
+
data = ensure_presence_or_blank(data)
|
73
|
+
|
74
|
+
if @middle_category.present?
|
75
|
+
sorted_data = deep_sort(data[@major_category], @middle_category)
|
76
|
+
result = ensure_presence_or_blank(sorted_data[@middle_category])
|
77
|
+
else
|
78
|
+
sorted_data = deep_sort(data, @major_category)
|
79
|
+
result = ensure_presence_or_blank(sorted_data[@major_category])
|
80
|
+
end
|
81
|
+
|
82
|
+
result
|
83
|
+
end
|
84
|
+
|
85
|
+
def to_boolean(diff, target_name)
|
86
|
+
if diff.present?
|
87
|
+
diff.fetch(@major_category, nil)&.fetch(@middle_category, nil)&.fetch(target_name, nil).present?
|
88
|
+
else
|
89
|
+
false
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_hash_diff_manager'
|
4
|
+
|
5
|
+
module R2OAS
|
6
|
+
module Schema
|
7
|
+
module V3
|
8
|
+
class ComponentsDiffManager < BaseHashDiffManager
|
9
|
+
def initialize(before_schema_data, after_schema_data, options = {})
|
10
|
+
super(before_schema_data, after_schema_data)
|
11
|
+
@major_category = 'components'
|
12
|
+
@middle_category = options[:middle_category]
|
13
|
+
@before_schema_data = normalized(before_schema_data)
|
14
|
+
@after_schema_data = normalized(after_schema_data)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_array_diff_manager'
|
4
|
+
|
5
|
+
module R2OAS
|
6
|
+
module Schema
|
7
|
+
module V3
|
8
|
+
class TagDiffManager < BaseArrayDiffManager
|
9
|
+
def initialize(before_schema_data, after_schema_data)
|
10
|
+
super
|
11
|
+
@major_category = 'tags'
|
12
|
+
@judge_key = 'name'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../pathname_manager'
|
4
|
+
require 'r2-oas/schema/v3/base'
|
5
|
+
|
6
|
+
module R2OAS
|
7
|
+
module Schema
|
8
|
+
module V3
|
9
|
+
class BaseFileManager < Base
|
10
|
+
attr_accessor :original_path
|
11
|
+
|
12
|
+
# e.x.) openapi_path = "#/components/schemas/Account"
|
13
|
+
def initialize(path, path_type = :full)
|
14
|
+
super()
|
15
|
+
@ext_name = :yml
|
16
|
+
@path_type = path_type
|
17
|
+
@original_path = path
|
18
|
+
@relative_save_file_path = PathnameManager.new(path, path_type).relative_save_file_path
|
19
|
+
end
|
20
|
+
|
21
|
+
def delete
|
22
|
+
File.delete(save_file_path) if FileTest.exists?(save_file_path)
|
23
|
+
end
|
24
|
+
|
25
|
+
def save(data)
|
26
|
+
abs_dir = File.dirname(save_file_path)
|
27
|
+
FileUtils.mkdir_p(abs_dir) unless FileTest.exists?(abs_dir)
|
28
|
+
File.write(save_file_path, data)
|
29
|
+
end
|
30
|
+
|
31
|
+
def save_after_deep_merge(data)
|
32
|
+
result = load_data.deep_merge(data)
|
33
|
+
save(result.to_yaml)
|
34
|
+
end
|
35
|
+
|
36
|
+
def save_file_path(type: :full)
|
37
|
+
file_path = File.expand_path(@relative_save_file_path)
|
38
|
+
|
39
|
+
case type
|
40
|
+
when :relative
|
41
|
+
file_path.sub(%r{^#{Dir.getwd}/?}, '')
|
42
|
+
else
|
43
|
+
file_path
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def load_data
|
48
|
+
case @ext_name
|
49
|
+
when :yml
|
50
|
+
if FileTest.exists?(save_file_path)
|
51
|
+
YAML.load_file(save_file_path)
|
52
|
+
else
|
53
|
+
{}
|
54
|
+
end
|
55
|
+
else
|
56
|
+
raise NoSupportError, "Do not support @ext_name: #{@ext_name}"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def descendants_paths
|
61
|
+
[]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'include_ref_base_file_manager'
|
4
|
+
|
5
|
+
module R2OAS
|
6
|
+
module Schema
|
7
|
+
module V3
|
8
|
+
class ComponentsFileManager < IncludeRefBaseFileManager
|
9
|
+
def initialize(path, path_type = :ref)
|
10
|
+
super
|
11
|
+
@path_type = path_type
|
12
|
+
@original_path = path
|
13
|
+
@recursive_search_class = self.class
|
14
|
+
end
|
15
|
+
|
16
|
+
def skip_save?
|
17
|
+
save_file_path.in? paths_config.many_components_file_paths
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_file_manager'
|
4
|
+
require_relative '../pathname_manager'
|
5
|
+
|
6
|
+
module R2OAS
|
7
|
+
module Schema
|
8
|
+
module V3
|
9
|
+
class IncludeRefBaseFileManager < BaseFileManager
|
10
|
+
REF = '$ref'
|
11
|
+
|
12
|
+
def initialize(path, path_type = :ref)
|
13
|
+
super
|
14
|
+
@convert_underscore_to_slash = true
|
15
|
+
@parent_save_file_paths = []
|
16
|
+
@recursive_search_class = self.class
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
alias build new
|
21
|
+
end
|
22
|
+
|
23
|
+
def descendants_paths
|
24
|
+
results = []
|
25
|
+
|
26
|
+
deep_search_ref_recursive(load_data) do |relative_paths|
|
27
|
+
results.push(*relative_paths)
|
28
|
+
end
|
29
|
+
|
30
|
+
results.uniq
|
31
|
+
end
|
32
|
+
alias descendants_ref_paths descendants_paths
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_accessor :parent_save_file_paths, :recursive_search_class
|
37
|
+
|
38
|
+
def deep_search_ref_recursive(yaml, &block)
|
39
|
+
case yaml
|
40
|
+
when Hash
|
41
|
+
yaml.each do |key, value|
|
42
|
+
process_deep_search_ref_recursive(key, value, &block)
|
43
|
+
end
|
44
|
+
# Support allOf/oneOf/anyOf
|
45
|
+
when Array
|
46
|
+
yaml.each do |el|
|
47
|
+
next unless el.is_a?(Hash)
|
48
|
+
|
49
|
+
el.each do |key, value|
|
50
|
+
process_deep_search_ref_recursive(key, value, &block)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def process_deep_search_ref_recursive(ref_key_or_not, ref_value_or_not, &block)
|
57
|
+
# Don't pick up JSON Schema $ref
|
58
|
+
# e.x.)
|
59
|
+
# $ref: { "type" => "string" }
|
60
|
+
if (ref_key_or_not.eql? REF) && ref_value_or_not.to_s.start_with?('#/')
|
61
|
+
|
62
|
+
# Avoid $ ref circular references
|
63
|
+
pm = PathnameManager.new(ref_value_or_not, :ref)
|
64
|
+
relative_save_file_path = pm.relative_save_file_path
|
65
|
+
|
66
|
+
if @parent_save_file_paths.include?(relative_save_file_path)
|
67
|
+
return
|
68
|
+
else
|
69
|
+
@parent_save_file_paths.push(relative_save_file_path)
|
70
|
+
end
|
71
|
+
|
72
|
+
child_file_manager = @recursive_search_class.build(ref_value_or_not, :ref)
|
73
|
+
child_load_data = child_file_manager.load_data
|
74
|
+
|
75
|
+
children_paths = []
|
76
|
+
deep_search_ref_recursive(child_load_data) do |children_path|
|
77
|
+
children_paths.push(*children_path)
|
78
|
+
end
|
79
|
+
|
80
|
+
results = [child_file_manager.save_file_path] + children_paths
|
81
|
+
yield results if block_given?
|
82
|
+
else
|
83
|
+
deep_search_ref_recursive(ref_value_or_not, &block)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'include_ref_base_file_manager'
|
4
|
+
require_relative 'components_file_manager'
|
5
|
+
require_relative '../pathname_manager'
|
6
|
+
|
7
|
+
module R2OAS
|
8
|
+
module Schema
|
9
|
+
module V3
|
10
|
+
class PathItemFileManager < IncludeRefBaseFileManager
|
11
|
+
def initialize(path, path_type = :ref)
|
12
|
+
super
|
13
|
+
@recursive_search_class = ComponentsFileManager
|
14
|
+
end
|
15
|
+
|
16
|
+
def skip_save?
|
17
|
+
save_file_path.in? paths_config.many_paths_file_paths
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'r2-oas/schema/v3/base'
|
4
|
+
|
5
|
+
module R2OAS
|
6
|
+
module Schema
|
7
|
+
module V3
|
8
|
+
class PathnameManager < Base
|
9
|
+
# e.x.) path = "#/components/schemas/Account" (when path_type = :ref)
|
10
|
+
def initialize(path, path_type = :full)
|
11
|
+
super()
|
12
|
+
@ext_name = :yml
|
13
|
+
@path_type = path_type
|
14
|
+
@path = path
|
15
|
+
end
|
16
|
+
|
17
|
+
def object_type
|
18
|
+
case @path
|
19
|
+
when /schemas/
|
20
|
+
'schemas'
|
21
|
+
when /requestBodies/
|
22
|
+
'requestBodies'
|
23
|
+
when /securitySchemes/
|
24
|
+
'securitySchemes'
|
25
|
+
when /parameters/
|
26
|
+
'parameters'
|
27
|
+
when /responses/
|
28
|
+
'responses'
|
29
|
+
when /examples/
|
30
|
+
'examples'
|
31
|
+
when /headers/
|
32
|
+
'headers'
|
33
|
+
when /links/
|
34
|
+
'links'
|
35
|
+
when /callbacks/
|
36
|
+
'callbacks'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def relative_save_file_path
|
41
|
+
result = normalized_about_path_type
|
42
|
+
if (@path_type.in? %i[ref relative]) && support_components_objects.include?(object_type)
|
43
|
+
dirname = File.dirname(result)
|
44
|
+
basename = File.basename(result, '.yml')
|
45
|
+
basename = basename.gsub(ns_div, '/').underscore
|
46
|
+
"#{schema_save_dir_path}/#{dirname}/#{basename}.yml"
|
47
|
+
elsif @path_type.eql?(:relative) && !support_components_objects.include?(object_type)
|
48
|
+
"#{schema_save_dir_path}/#{result.underscore}"
|
49
|
+
elsif @path_type.eql?(:full)
|
50
|
+
result
|
51
|
+
else
|
52
|
+
"#{schema_save_dir_path}/#{result}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def normalized_about_path_type
|
59
|
+
case @path_type
|
60
|
+
when :ref
|
61
|
+
"#{@path.gsub('#/', '')}.#{@ext_name}"
|
62
|
+
when :relative
|
63
|
+
ext_name = File.extname(@path)
|
64
|
+
if ext_name.empty?
|
65
|
+
"#{@path}.#{@ext_name}"
|
66
|
+
else
|
67
|
+
@path
|
68
|
+
end
|
69
|
+
when :full
|
70
|
+
@path
|
71
|
+
else
|
72
|
+
raise NoSupportError, "Do not support path_type: #{@path_type}"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|