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.
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,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