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,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_analyzer'
4
+ require 'r2-oas/schema/v3/manager/file_manager'
5
+ require 'r2-oas/schema/v3/manager/diff/tag_diff_manager'
6
+
7
+ # Scope Rails
8
+ module R2OAS
9
+ module Schema
10
+ module V3
11
+ class TagAnalyzer < BaseAnalyzer
12
+ def initialize(after_schema_data, options = {})
13
+ super({}, after_schema_data, options)
14
+ @file_manager = FileManager.new('tags', :relative)
15
+ before_schema_data = @file_manager.load_data
16
+ @diff_manager = TagDiffManager.new(before_schema_data, after_schema_data)
17
+ end
18
+
19
+ def analyze_docs
20
+ save_file_path = @file_manager.save_file_path(type: :relative)
21
+ case @type
22
+ when :edited
23
+ @diff_manager.process_by_using_diff_data do |after_edited_data|
24
+ @file_manager.save(after_edited_data.to_yaml)
25
+ logger.info " Write schema file: \t#{save_file_path}"
26
+ end
27
+ when :existing
28
+ result = @diff_manager.after_target_data
29
+ @file_manager.save(result.to_yaml)
30
+ logger.info " Write schema file: \t#{save_file_path}"
31
+ else
32
+ raise NoImplementError
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../base'
4
+
5
+ # Scope Rails
6
+ module R2OAS
7
+ module Schema
8
+ module V3
9
+ class Base < ::R2OAS::Schema::Base
10
+ SUPPORT_COMPONENTS_OBJECTS = %w[
11
+ schemas
12
+ requestBodies
13
+ securitySchemes
14
+ parameters
15
+ responses
16
+ examples
17
+ headers
18
+ links
19
+ callbacks
20
+ ].freeze
21
+
22
+ def support_components_objects
23
+ SUPPORT_COMPONENTS_OBJECTS
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require 'forwardable'
5
+ require 'r2-oas/routing/parser'
6
+ require_relative 'builder/doc_builder'
7
+ require_relative 'builder/base_builder'
8
+
9
+ module R2OAS
10
+ module Schema
11
+ module V3
12
+ class Builder < BaseBuilder
13
+ extend Forwardable
14
+
15
+ def_delegators :@doc_builder, :oas_doc, :pure_oas_doc
16
+
17
+ def initialize(options = {})
18
+ super
19
+ @doc_builder = DocBuilder.new(options)
20
+ end
21
+
22
+ def build_docs
23
+ @doc_builder.build_docs
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'r2-oas/schema/v3/base'
4
+ require 'r2-oas/routing/parser'
5
+ require 'r2-oas/schema/v3/object/from_routes/openapi_object'
6
+ require 'r2-oas/schema/v3/manager/file/path_item_file_manager'
7
+
8
+ module R2OAS
9
+ module Schema
10
+ module V3
11
+ class BaseBuilder < Base
12
+ include Sortable
13
+
14
+ def initialize(opts = {})
15
+ super
16
+
17
+ opts.keys.each do |key|
18
+ send("#{key}=", opts[key])
19
+ end
20
+
21
+ @opts = opts
22
+ @glob_schema_paths = create_glob_schema_paths
23
+ end
24
+
25
+ private
26
+
27
+ attr_accessor :unit_paths_file_path
28
+ attr_accessor :skip_load_dot_paths
29
+ attr_accessor :opts
30
+ attr_accessor :use_plugin
31
+ attr_accessor :output
32
+
33
+ alias use_plugin? use_plugin
34
+ alias output? output
35
+
36
+ def schema_file_do_not_exists?
37
+ schema_files_paths.count == 0
38
+ end
39
+
40
+ def create_glob_schema_paths
41
+ exclude_paths_regexp_paths = ["#{schema_save_dir_path}/**.yml"]
42
+ components_security_schemes_regexp_paths = ["#{schema_save_dir_path}/components/securitySchemes/**/**.yml"]
43
+
44
+ # components/securitySchemes is not referenced in $ ref.
45
+ exclude_paths_regexp_paths + many_paths_file_paths + many_components_file_paths + components_security_schemes_regexp_paths
46
+ end
47
+
48
+ def schema_files_paths
49
+ Dir.glob(@glob_schema_paths)
50
+ end
51
+
52
+ def many_paths_file_paths
53
+ if unit_paths_file_path.present? && !skip_load_dot_paths
54
+ [unit_paths_file_path]
55
+ elsif !unit_paths_file_path.present? && !skip_load_dot_paths && paths_config.all_load_paths?
56
+ paths_config.many_paths_file_paths
57
+ else
58
+ Dir.glob("#{schema_save_dir_path}/paths/**/**.yml")
59
+ end
60
+ end
61
+
62
+ def many_components_file_paths
63
+ @many_components_file_paths ||= many_paths_file_paths.each_with_object([]) do |unit_paths_path, result|
64
+ file_manager = PathItemFileManager.new(unit_paths_path, :full)
65
+ components_file_paths_at_path = file_manager.descendants_ref_paths
66
+ result.push(*components_file_paths_at_path)
67
+ end.uniq
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require 'fileutils'
5
+ require 'r2-oas/schema/v3/object/from_files/openapi_object'
6
+ require_relative 'base_builder'
7
+
8
+ module R2OAS
9
+ module Schema
10
+ module V3
11
+ class DocBuilder < BaseBuilder
12
+ attr_accessor :oas_doc, :pure_oas_doc
13
+
14
+ def initialize(opts = {})
15
+ super
16
+ end
17
+
18
+ def build_docs
19
+ logger.info '[Build OAS schema files] start'
20
+ logger.info '[Build OAS docs from schema files] start'
21
+ build_docs_from_schema_files
22
+ logger.info '[Build OAS docs from schema files] end'
23
+ logger.info '[Build OAS schema files] end'
24
+ end
25
+
26
+ private
27
+
28
+ def build_docs_from_schema_files
29
+ result_before_squeeze = schema_files_paths.each_with_object({}) do |path, data|
30
+ file_manager = FileManager.new(path)
31
+ yaml = YAML.load_file(path)
32
+ data.deep_merge!(yaml)
33
+ logger.info " Use schema file: \t#{file_manager.save_file_path(type: :relative)}"
34
+ end
35
+
36
+ result = if many_paths_file_paths.present?
37
+ Squeezer.new(result_before_squeeze, many_paths_file_paths: many_paths_file_paths).squeeze_docs
38
+ else
39
+ result_before_squeeze
40
+ end
41
+
42
+ @pure_oas_doc = result.dup
43
+ rsult = FromFiles::OpenapiObject.new(result, opts).to_doc if use_plugin?
44
+ @oas_doc = result
45
+
46
+ File.write(output? ? output_path : doc_save_file_path, result.to_yaml)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'cleaner/base_cleaner'
4
+ require_relative 'cleaner/components_cleaner'
5
+
6
+ module R2OAS
7
+ module Schema
8
+ module V3
9
+ class Cleaner < BaseCleaner
10
+ def clean_docs
11
+ logger.info '[Clean OAS file] start'
12
+ components_cleaner = ComponentsCleaner.new(@options)
13
+ components_cleaner.clean_docs
14
+ logger.info '[Clean OAS file] end'
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'r2-oas/schema/v3/base'
4
+ require 'r2-oas/schema/v3/manager/file_manager'
5
+
6
+ module R2OAS
7
+ module Schema
8
+ module V3
9
+ class BaseCleaner < Base
10
+ def clean_docs
11
+ clean_target_files.each do |file_path|
12
+ file_manager = FileManager.new(file_path, :full)
13
+ file_manager.delete
14
+ yield file_manager.save_file_path(type: :relative) if block_given?
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def many_paths_file_paths
21
+ Dir.glob("#{schema_save_dir_path}/paths/**/**.yml")
22
+ end
23
+
24
+ def clean_target_files
25
+ raise 'Please implement in inherited class.'
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_cleaner'
4
+ require 'r2-oas/schema/v3/manager/file/path_item_file_manager'
5
+
6
+ module R2OAS
7
+ module Schema
8
+ module V3
9
+ class ComponentsCleaner < BaseCleaner
10
+ def initialize(options = {})
11
+ super
12
+ @components_file_paths = Dir.glob("#{schema_save_dir_path}/components/**/**.yml")
13
+ @security_schemes_paths = Dir.glob("#{schema_save_dir_path}/components/securitySchemes/**/**.yml")
14
+ end
15
+
16
+ def clean_docs
17
+ logger.info '[Clean OAS file (components)] start'
18
+ super do |file_path|
19
+ logger.info " Delete schema file: \t#{file_path}"
20
+ end
21
+ logger.info '[Clean OAS file (components)] end'
22
+ end
23
+
24
+ private
25
+
26
+ def clean_target_files
27
+ used_file_paths = many_paths_file_paths.each_with_object([]) do |unit_paths_path, result|
28
+ file_manager = PathItemFileManager.new(unit_paths_path, :full)
29
+ components_file_paths_at_path = file_manager.descendants_ref_paths
30
+ result.push(*components_file_paths_at_path)
31
+ end.uniq
32
+
33
+ all_file_paths - used_file_paths
34
+ end
35
+
36
+ def all_file_paths
37
+ (@components_file_paths - @security_schemes_paths).uniq
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require 'forwardable'
5
+ require 'r2-oas/routing/parser'
6
+ require_relative 'generator/doc_generator'
7
+ require_relative 'generator/base_generator'
8
+
9
+ module R2OAS
10
+ module Schema
11
+ module V3
12
+ class Generator < BaseGenerator
13
+ extend Forwardable
14
+
15
+ def_delegators :@doc_generator, :generate_docs
16
+
17
+ def initialize(options = {})
18
+ super
19
+ @doc_generator = DocGenerator.new(options)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'r2-oas/schema/v3/base'
4
+ require 'r2-oas/routing/parser'
5
+ require 'r2-oas/schema/v3/object/from_routes/openapi_object'
6
+ require 'r2-oas/schema/v3/manager/file/path_item_file_manager'
7
+ require 'r2-oas/store'
8
+
9
+ module R2OAS
10
+ module Schema
11
+ module V3
12
+ class BaseGenerator < Base
13
+ include Sortable
14
+
15
+ def initialize(options = {})
16
+ super
17
+
18
+ options.keys.each do |key|
19
+ send("#{key}=", options[key])
20
+ end
21
+
22
+ @store = ::R2OAS::Store.create(:schema)
23
+ @glob_schema_paths = create_glob_schema_paths
24
+ end
25
+
26
+ private
27
+
28
+ attr_accessor :unit_paths_file_path
29
+ attr_accessor :skip_load_dot_paths
30
+ attr_accessor :is_create_cache
31
+ attr_accessor :store
32
+
33
+ # Scope Rails
34
+ def create_docs
35
+ all_routes = create_all_routes
36
+ parser = Routing::Parser.new(all_routes)
37
+
38
+ routes_data = parser.routes_data
39
+ tags_data = parser.tags_data
40
+ schemas_data = parser.schemas_data
41
+
42
+ Schema::V3::OpenapiObject.new(routes_data, tags_data, schemas_data).to_doc
43
+ end
44
+
45
+ def create_all_routes
46
+ ::Rails.application.reload_routes!
47
+ ::Rails.application.routes.routes
48
+ end
49
+
50
+ def schema_file_do_not_exists?
51
+ schema_files_paths.count == 0
52
+ end
53
+
54
+ def create_glob_schema_paths
55
+ exclude_paths_regexp_paths = ["#{schema_save_dir_path}/**.yml"]
56
+ paths_regexp_paths = ["#{schema_save_dir_path}/paths/**/**.yml"]
57
+ components_schemas_regexp_paths = ["#{schema_save_dir_path}/components/**/**.yml"]
58
+ components_security_schemes_regexp_paths = ["#{schema_save_dir_path}/components/securitySchemes/**/**.yml"]
59
+
60
+ if exists_paths_files?
61
+ # components/securitySchemes is not referenced in $ ref.
62
+ exclude_paths_regexp_paths + many_paths_file_paths + many_components_file_paths + components_security_schemes_regexp_paths
63
+ else
64
+ exclude_paths_regexp_paths + paths_regexp_paths + components_schemas_regexp_paths
65
+ end
66
+ end
67
+
68
+ def schema_files_paths
69
+ Dir.glob(@glob_schema_paths)
70
+ end
71
+
72
+ def many_paths_file_paths
73
+ if unit_paths_file_path.present? && !skip_load_dot_paths
74
+ [unit_paths_file_path]
75
+ elsif !unit_paths_file_path.present? && !skip_load_dot_paths && paths_config.all_load_paths?
76
+ paths_config.many_paths_file_paths
77
+ else
78
+ Dir.glob("#{schema_save_dir_path}/paths/**/**.yml")
79
+ end
80
+ end
81
+
82
+ def many_components_file_paths
83
+ @many_components_file_paths ||= many_paths_file_paths.each_with_object([]) do |unit_paths_path, result|
84
+ file_manager = PathItemFileManager.new(unit_paths_path, :full)
85
+ components_file_paths_at_path = file_manager.descendants_ref_paths
86
+ result.push(*components_file_paths_at_path)
87
+ end.uniq
88
+ end
89
+
90
+ def exists_paths_files?
91
+ Dir.glob("#{schema_save_dir_path}/paths/**/**.yml").present?
92
+ end
93
+
94
+ def cache_docs
95
+ if exists_cache?
96
+ result = IO.binread(abs_cache_docs_path)
97
+ inflate = Zlib::Inflate.inflate(result)
98
+ @cache_docs ||= Marshal.load(inflate)
99
+ else
100
+ @cache_docs ||= {}
101
+ end
102
+ end
103
+
104
+ def exists_cache?
105
+ FileTest.exists?(abs_cache_docs_path)
106
+ end
107
+
108
+ def abs_cache_docs_path
109
+ File.expand_path(relative_cahe_docs_path)
110
+ end
111
+
112
+ def relative_cahe_docs_path
113
+ "#{@root_dir_path}/.docs"
114
+ end
115
+
116
+ def unknown_paths_path
117
+ "#{@root_dir_path}/src/paths/unknown.yml"
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end