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,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base_object'
|
|
4
|
+
require_relative 'path_item_object'
|
|
5
|
+
|
|
6
|
+
module R2OAS
|
|
7
|
+
module Schema
|
|
8
|
+
module V3
|
|
9
|
+
module FromFiles
|
|
10
|
+
class PathsObject < BaseObject
|
|
11
|
+
def initialize(doc, opts = {})
|
|
12
|
+
super(opts)
|
|
13
|
+
@doc = doc
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_doc
|
|
17
|
+
create_doc
|
|
18
|
+
@doc
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def create_doc
|
|
24
|
+
@doc.each do |path, doc_when_path|
|
|
25
|
+
ref = { path: path }
|
|
26
|
+
@doc[path] = PathItemObject.new(doc_when_path, ref, opts).to_doc
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module R2OAS
|
|
4
|
+
module Schema
|
|
5
|
+
module V3
|
|
6
|
+
module FromFiles
|
|
7
|
+
module DeepMethods
|
|
8
|
+
def deep_replace!(data, target, &blk)
|
|
9
|
+
return unless data.is_a?(Hash)
|
|
10
|
+
|
|
11
|
+
data.each do |key, value|
|
|
12
|
+
if key.eql? target
|
|
13
|
+
# MEMO:
|
|
14
|
+
# When using the same schema, it has already been replaced by an object
|
|
15
|
+
if value.is_a?(String)
|
|
16
|
+
data[key] = block_given? ? yield(value) : value
|
|
17
|
+
end
|
|
18
|
+
else
|
|
19
|
+
deep_replace!(value, target, &blk)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'r2-oas/errors'
|
|
4
|
+
|
|
5
|
+
module R2OAS
|
|
6
|
+
module Schema
|
|
7
|
+
module V3
|
|
8
|
+
module FromFiles
|
|
9
|
+
class BaseRef
|
|
10
|
+
def pretty_print(q)
|
|
11
|
+
pp_hash(q, to_h)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
attr_reader :parent
|
|
15
|
+
|
|
16
|
+
def []=(key, value)
|
|
17
|
+
if writable_keys.include?(key)
|
|
18
|
+
send(:"#{key}=", value)
|
|
19
|
+
value
|
|
20
|
+
else
|
|
21
|
+
display_key = key.is_a?(Symbol) ? ":#{key}" : key
|
|
22
|
+
raise ::R2OAS::RefInvalidAssignment, "invalid method `[#{display_key}]=' called for #{self}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def [](key)
|
|
27
|
+
send(key)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def to_h
|
|
31
|
+
valid_keys.each_with_object({}) do |key, result|
|
|
32
|
+
result[key] = send(key)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
# MEMO:
|
|
39
|
+
# https://apidock.com/ruby/v1_9_3_392/PP/PPMethods/pp_hash
|
|
40
|
+
def pp_hash(q, obj)
|
|
41
|
+
q.group(1, '{', '}') do
|
|
42
|
+
q.seplist(obj, nil, :each_pair) do |k, v|
|
|
43
|
+
q.group do
|
|
44
|
+
q.pp k
|
|
45
|
+
q.text '=>'
|
|
46
|
+
q.group(1) do
|
|
47
|
+
q.breakable ''
|
|
48
|
+
q.pp v
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def build(ref_or_data, merge_data = {})
|
|
56
|
+
data = ref_or_data.to_h.merge(merge_data)
|
|
57
|
+
data.keys.each do |key|
|
|
58
|
+
instance_variable_set(:"@#{key}", data[key])
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
@parent = ref_or_data if ref_or_data.respond_to?(:parent)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
attr_writer :parent
|
|
65
|
+
|
|
66
|
+
def valid_keys
|
|
67
|
+
raise NoImplementError, 'Please implement in inherited class.'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def writable_keys
|
|
71
|
+
raise NoImplementError, 'Please implement in inherited class.'
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
class PathRef < BaseRef
|
|
76
|
+
VALID_KEYS = %i[type path].freeze
|
|
77
|
+
|
|
78
|
+
attr_reader(*VALID_KEYS)
|
|
79
|
+
|
|
80
|
+
def initialize(data)
|
|
81
|
+
build(data, { type: :path_item })
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
private
|
|
85
|
+
|
|
86
|
+
attr_writer(*VALID_KEYS)
|
|
87
|
+
|
|
88
|
+
def valid_keys
|
|
89
|
+
VALID_KEYS
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def writable_keys
|
|
93
|
+
[]
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
module Components
|
|
98
|
+
class SchemaRef < BaseRef
|
|
99
|
+
READONLY_KEYS = %i[type path parent_schema_name depth tag_name verb http_status from].freeze
|
|
100
|
+
WRITABLE_KEYS = [:schema_name].freeze
|
|
101
|
+
VALID_KEYS = READONLY_KEYS + WRITABLE_KEYS
|
|
102
|
+
|
|
103
|
+
attr_reader(*VALID_KEYS)
|
|
104
|
+
attr_writer(*WRITABLE_KEYS)
|
|
105
|
+
|
|
106
|
+
def initialize(ref_or_data)
|
|
107
|
+
build(ref_or_data, { type: :schema })
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
private
|
|
111
|
+
|
|
112
|
+
attr_writer(*READONLY_KEYS)
|
|
113
|
+
|
|
114
|
+
def valid_keys
|
|
115
|
+
VALID_KEYS
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def writable_keys
|
|
119
|
+
WRITABLE_KEYS
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
class RequestBodyRef < BaseRef
|
|
124
|
+
READONLY_KEYS = %i[type path parent_schema_name depth tag_name verb from].freeze
|
|
125
|
+
WRITABLE_KEYS = [:schema_name].freeze
|
|
126
|
+
VALID_KEYS = READONLY_KEYS + WRITABLE_KEYS
|
|
127
|
+
|
|
128
|
+
attr_accessor(*VALID_KEYS)
|
|
129
|
+
attr_writer(*WRITABLE_KEYS)
|
|
130
|
+
|
|
131
|
+
def initialize(ref_or_data)
|
|
132
|
+
build(ref_or_data, { type: :request_body })
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
private
|
|
136
|
+
|
|
137
|
+
attr_writer(*READONLY_KEYS)
|
|
138
|
+
|
|
139
|
+
def valid_keys
|
|
140
|
+
VALID_KEYS
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def writable_keys
|
|
144
|
+
WRITABLE_KEYS
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'forwardable'
|
|
4
|
+
require 'r2-oas/plugin/executor'
|
|
5
|
+
|
|
6
|
+
module R2OAS
|
|
7
|
+
module Schema
|
|
8
|
+
module V3
|
|
9
|
+
class BaseObject
|
|
10
|
+
extend Forwardable
|
|
11
|
+
|
|
12
|
+
def_delegators :@plugin_executor, :execute_transform_plugins
|
|
13
|
+
|
|
14
|
+
def initialize(opts = {})
|
|
15
|
+
AppConfiguration::VALID_OPTIONS_KEYS.each do |key|
|
|
16
|
+
send("#{key}=", app_configuration_options[key])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
PluggableConfiguration::VALID_OPTIONS_KEYS.each do |key|
|
|
20
|
+
instance_variable_set(:"@#{key}", pluggable_configuration_options[key])
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@opts = opts
|
|
24
|
+
@plugin_executor = ::R2OAS::Plugin::Executor.new(@plugins, opts)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def info_object_class
|
|
28
|
+
@use_object_classes[:info_object]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def paths_object_class
|
|
32
|
+
@use_object_classes[:paths_object]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def path_item_object_class
|
|
36
|
+
@use_object_classes[:path_item_object]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def external_document_object_class
|
|
40
|
+
@use_object_classes[:external_document_object]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def components_object_class
|
|
44
|
+
@use_object_classes[:components_object]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def components_schema_object_class
|
|
48
|
+
@use_object_classes[:components_schema_object]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def components_request_body_object_class
|
|
52
|
+
@use_object_classes[:components_request_body_object]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
def app_configuration_options
|
|
58
|
+
R2OAS.app_configuration_options
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def pluggable_configuration_options
|
|
62
|
+
R2OAS.pluggable_configuration_options
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Can not define attr_accessor for PluggableConfiguration::VALID_OPTIONS_KEYS.
|
|
66
|
+
# Because, PuggableConfiguration module is not loaded when this class is loaded.
|
|
67
|
+
attr_accessor *AppConfiguration::VALID_OPTIONS_KEYS
|
|
68
|
+
|
|
69
|
+
def to_doc
|
|
70
|
+
raise 'Implement Inherit Class'
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object'
|
|
4
|
+
require 'r2-oas/schema/v3/manager/file/components_file_manager'
|
|
5
|
+
|
|
6
|
+
module R2OAS
|
|
7
|
+
module Schema
|
|
8
|
+
module V3
|
|
9
|
+
module Components
|
|
10
|
+
class RequestBodyObject < R2OAS::Dynamic::Schema::V3::HookableBaseObject
|
|
11
|
+
def initialize(route_data, path, opts = {})
|
|
12
|
+
super(opts)
|
|
13
|
+
@path_comp = Routing::PathComponent.new(path)
|
|
14
|
+
@path = @path_comp.symbol_to_brace
|
|
15
|
+
@route_data = route_data
|
|
16
|
+
@verb = route_data[:verb]
|
|
17
|
+
@tag_name = route_data[:tag_name]
|
|
18
|
+
@schema_name = route_data[:schema_name]
|
|
19
|
+
# MEMO:
|
|
20
|
+
# Allow primitive types that cannot be passed by reference to be passed by reference
|
|
21
|
+
# This is Compromise
|
|
22
|
+
@ref = { schema_name: @schema_name, tag_name: @tag_name, verb: @verb }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def to_doc
|
|
26
|
+
execute_before_create(@schema_name)
|
|
27
|
+
create_doc do
|
|
28
|
+
child_file_manager = ComponentsFileManager.new("#/components/schemas/#{_components_schema_name}", :ref)
|
|
29
|
+
schema_object = components_schema_object_class.new(@route_data, @path, @opts)
|
|
30
|
+
|
|
31
|
+
unless child_file_manager.skip_save?
|
|
32
|
+
result = {
|
|
33
|
+
'components' => {
|
|
34
|
+
'schemas' => {
|
|
35
|
+
_components_schema_name => schema_object.to_doc
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
doc.deep_merge!(
|
|
40
|
+
'has_one' => {
|
|
41
|
+
'type' => 'schema',
|
|
42
|
+
'original_path' => child_file_manager.original_path,
|
|
43
|
+
'data' => result
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
execute_after_create(@schema_name)
|
|
49
|
+
doc
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# MEMO:
|
|
53
|
+
# please override in inherited class.
|
|
54
|
+
def components_schema_name(_doc, _path_component, _tag_name, _verb, schema_name)
|
|
55
|
+
schema_name
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# MEMO:
|
|
59
|
+
# please override in inherited class.
|
|
60
|
+
def components_request_body_name(_doc, _path_component, _tag_name, _verb, schema_name)
|
|
61
|
+
schema_name
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def generate?
|
|
65
|
+
file_manager = ComponentsFileManager.new("#/components/schemas/#{_components_schema_name}", :ref)
|
|
66
|
+
(@verb.in? http_methods_when_generate_request_body) && !file_manager.skip_save?
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
def create_doc
|
|
72
|
+
file_manager = ComponentsFileManager.new("#/components/schemas/#{_components_schema_name}", :ref)
|
|
73
|
+
doc.deep_merge!(
|
|
74
|
+
'content' => {
|
|
75
|
+
'application/json' => {
|
|
76
|
+
'schema' => {
|
|
77
|
+
'$ref' => file_manager.original_path
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
yield if block_given?
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def _components_schema_name
|
|
86
|
+
components_schema_name(doc, @path_comp, @tag_name, @verb, @schema_name)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def _components_request_body_name
|
|
90
|
+
components_request_body_name(doc, @path_comp, @tag_name, @verb, @schema_name)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'r2-oas/dynamic/schema/v3/object/from_routes/hookable_base_object'
|
|
4
|
+
|
|
5
|
+
module R2OAS
|
|
6
|
+
module Schema
|
|
7
|
+
module V3
|
|
8
|
+
module Components
|
|
9
|
+
class SchemaObject < R2OAS::Dynamic::Schema::V3::HookableBaseObject
|
|
10
|
+
def initialize(route_data, path, opts = {})
|
|
11
|
+
super(opts)
|
|
12
|
+
@path_comp = Routing::PathComponent.new(path)
|
|
13
|
+
@path = @path_comp.symbol_to_brace
|
|
14
|
+
@route_data = route_data
|
|
15
|
+
@verb = route_data[:verb]
|
|
16
|
+
@tag_name = route_data[:tag_name]
|
|
17
|
+
@schema_name = route_data[:schema_name]
|
|
18
|
+
# MEMO:
|
|
19
|
+
# Allow primitive types that cannot be passed by reference to be passed by reference
|
|
20
|
+
# This is Compromise
|
|
21
|
+
@ref = { schema_name: @schema_name, tag_name: @tag_name, verb: @verb }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def to_doc
|
|
25
|
+
execute_before_create(@schema_name)
|
|
26
|
+
create_doc
|
|
27
|
+
execute_after_create(@schema_name)
|
|
28
|
+
doc
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# MEMO:
|
|
32
|
+
# please override in inherited class.
|
|
33
|
+
def components_schema_name(_doc, _path_component, _tag_name, _verb, _http_status, schema_name)
|
|
34
|
+
schema_name
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def create_doc
|
|
40
|
+
result = {
|
|
41
|
+
'type' => 'object',
|
|
42
|
+
'properties' => {
|
|
43
|
+
'id' => {
|
|
44
|
+
'type' => 'integer',
|
|
45
|
+
'format' => 'int64'
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
doc.merge!(result)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def _components_schema_name(http_status)
|
|
53
|
+
components_schema_name(doc, @path_comp, @tag_name, @verb, http_status, @schema_name)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|