r2-oas 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ # copy from https://github.com/rails/rails/blob/master/activesupport/lib/active_support/deprecation/instance_delegator.rb
6
+ module R2OAS
7
+ class Deprecation
8
+ module InstanceDelegator
9
+ # MEMO:
10
+ # base must be singleton class
11
+ def self.included(base)
12
+ base.extend(ClassMethods)
13
+ base.singleton_class.extend(Forwardable)
14
+ base.singleton_class.prepend(OverrideDelegators)
15
+ base.public_class_method :new
16
+ end
17
+
18
+ module ClassMethods
19
+ # override Module#include
20
+ def include(included_module)
21
+ included_module.instance_methods.each { |m| method_added(m) }
22
+ super
23
+ end
24
+
25
+ def method_added(method_name)
26
+ singleton_class.def_delegators(:instance, method_name)
27
+ end
28
+ end
29
+
30
+ module OverrideDelegators
31
+ def warn(message = nil, callstack = nil)
32
+ # MEMO:
33
+ # Why update callstack
34
+ # https://github.com/rails/rails/pull/26686
35
+ callstack ||= caller_locations(2)
36
+ super
37
+ end
38
+ alias will_remove warn
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ # MEMO:
4
+ # copy from https://github.com/rails/rails/blob/master/activesupport/lib/active_support/deprecation/reporting.rb
5
+ module R2OAS
6
+ class Deprecation
7
+ module Reporting
8
+ attr_accessor :silenced, :gem_name
9
+
10
+ FILE_LINE_METHOD_REGEXP = /^(?<file>.+?):(?<line>\d+)(?::in `(?<method>.*?)')?/.freeze
11
+ R2OAS_GEM_ROOT = File.expand_path('../../../../', __dir__) + '/lib'
12
+
13
+ def warn(message = nil, callstack = nil)
14
+ return if silenced
15
+
16
+ callstack ||= caller_locations(2)
17
+ deprecation_message(callstack, message).tap do |msg|
18
+ behavior.each { |b| b.call(msg, callstack, deprecation_horizon, gem_name) }
19
+ end
20
+ end
21
+ alias will_remove warn
22
+
23
+ def silence
24
+ old_silenced = silenced
25
+ self.silenced = true
26
+ yield if block_given?
27
+ self.silenced = old_silenced
28
+ end
29
+
30
+ private
31
+
32
+ def deprecation_message(callstack, message = nil)
33
+ message ||= 'You are using deprecated behavior which will be removed from the next major or minor release.'
34
+ "DEPRECATION WARNING: #{message} #{deprecation_caller_message(callstack)}"
35
+ end
36
+
37
+ def deprecation_caller_message(callstack)
38
+ file, line, method = extract_callstack(callstack)
39
+ if file
40
+ if line && method
41
+ "(called from #{method} at #{file}:#{line})"
42
+ else
43
+ "(called from #{file}:#{line})"
44
+ end
45
+ end
46
+ end
47
+
48
+ def extract_callstack(callstack)
49
+ return _extract_callback(callstack) if callstack.first.is_a? String
50
+
51
+ offending_line = callstack.find do |frame|
52
+ frame.absolute_path && !ignored_callstack(frame.absolute_path)
53
+ end || callstack.first
54
+
55
+ [offending_line.path, offending_line.lineno, offending_line.label]
56
+ end
57
+
58
+ # e.g.)
59
+ # callback = /path/to/file.rb:274:in `require'
60
+ #
61
+ # file = /path/to/file.rb
62
+ # line = 274
63
+ # method = require
64
+ def _extract_callstack(_callback)
65
+ warn 'Please pass `caller_options` to the deprecation API' if $VERBOSE
66
+ offending_line = callstack.find { |line| !ignored_callstack(line) || callstack.first }
67
+
68
+ if offendihng_line
69
+ md = offending_line.match(FILE_LINE_METHOD_REGEXP)
70
+
71
+ if md.present?
72
+ md.captures
73
+ else
74
+ offending_line
75
+ end
76
+ end
77
+ end
78
+
79
+ # MEMO:
80
+ # see https://docs.ruby-lang.org/ja/latest/class/RbConfig.html#C_-C-O-N-F-I-G
81
+ def ignored_callstack(path)
82
+ # MEMO:
83
+ #
84
+ # e.g.)
85
+ # R2OAS_GEM_ROOT = "/Users/yukihirop/RubyProjects/r2-oas/lib"
86
+ # rubylibprefix = "/Users/yukihirop/.rbenv/versions/2.7.1/lib/ruby"
87
+ path.start_with?(R2OAS_GEM_ROOT) || path.start_with?(RbConfig::CONFIG['rubylibprefix'])
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R2OAS
4
+ class Task < ::Rails::Railtie
5
+ rake_tasks do
6
+ main_task_path = File.join(File.dirname(__FILE__), './tasks/main.rake')
7
+ tool_task_path = File.join(File.dirname(__FILE__), './tasks/tool.rake')
8
+ Dir[main_task_path, tool_task_path].each { |f| load f }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Scope Rails
4
+ module R2OAS
5
+ module TaskLogging
6
+ def task(*args, &block)
7
+ Rake::Task.define_task(*args) do |task|
8
+ if block_given?
9
+ debug_log task, "[#{task.name}] started"
10
+ begin
11
+ block.call(task)
12
+ debug_log task, "[#{task.name}] finished"
13
+ rescue StandardError => e
14
+ debug_log task, "[#{task.name}] failed"
15
+ raise e
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def start(initial = '[R2-OAS]')
24
+ logger.info "#{initial} start"
25
+ yield
26
+ logger.info "#{initial} end"
27
+ end
28
+
29
+ def logger
30
+ R2OAS.logger
31
+ end
32
+
33
+ def set_debug_level
34
+ R2OAS.logger.level = StdoutLogger::DEBUG
35
+ end
36
+
37
+ def debug_log(task, message)
38
+ R2OAS.logger.debug message.to_s unless task.name == 'routes:oas:debug'
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'r2-oas/task_logging'
4
+
5
+ namespace :routes do
6
+ namespace :oas do
7
+ extend R2OAS::TaskLogging
8
+
9
+ # private
10
+ # desc "Setup a common setting for every tasks"
11
+ task common: [:environment] do
12
+ create_dot_paths
13
+ end
14
+
15
+ # private
16
+ # desc "Switch the level of a logger to DEBUG"
17
+ task debug: [:common] do
18
+ set_debug_level
19
+ end
20
+
21
+ def create_dot_paths
22
+ R2OAS.paths_config.create_dot_paths
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'r2-oas/schema/editor'
4
+ require 'r2-oas/schema/ui'
5
+ require 'r2-oas/schema/monitor'
6
+ require 'r2-oas/task_logging'
7
+ load File.expand_path('common.rake', __dir__)
8
+
9
+ namespace :routes do
10
+ namespace :oas do
11
+ desc '[R2-OAS] Initialize'
12
+ task init: [:common] do
13
+ R2OAS.init
14
+ puts '[R2-OAS] Initialized!'
15
+ end
16
+
17
+ desc '[R2-OAS] Generate OAS documentation files'
18
+ task docs: [:common] do
19
+ start do
20
+ is_create_cache = cache_docs.eql? 'true'
21
+ options = { unit_paths_file_path: unit_paths_file_path, skip_load_dot_paths: true, is_create_cache: is_create_cache }
22
+ generator = R2OAS::Schema::Generator.new(options)
23
+ generator.generate_docs
24
+ end
25
+ end
26
+
27
+ desc '[R2-OAS] Analyze OAS documentation'
28
+ task analyze: [:common] do
29
+ start do
30
+ analyzer_options = { type: :existing, existing_schema_file_path: existing_schema_file_path }
31
+ analyzer = R2OAS::Schema::Analyzer.new({}, {}, analyzer_options)
32
+ analyzer.analyze_docs
33
+
34
+ builder_options = {}
35
+ builder = R2OAS::Schema::Builder.new(builder_options)
36
+ builder.build_docs
37
+ end
38
+ end
39
+
40
+ desc '[R2-OAS] Build OAS documentation'
41
+ task build: [:common] do
42
+ start do
43
+ output_dir_path = File.expand_path(R2OAS.output_dir_path)
44
+ FileUtils.mkdir_p(output_dir_path) unless FileTest.exists?(output_dir_path)
45
+
46
+ is_overrirde_src = override_src.eql? 'true'
47
+ builder_options = { unit_paths_file_path: unit_paths_file_path, use_plugin: true, output: true }
48
+ builder = R2OAS::Schema::Builder.new(builder_options)
49
+ builder.build_docs
50
+
51
+ if is_overrirde_src
52
+ before_schama_data = builder.pure_oas_doc
53
+ after_schema_data = builder.oas_doc
54
+ analyzer_options = { type: :edited }
55
+ analyzer = R2OAS::Schema::Analyzer.new(before_schama_data, after_schema_data, analyzer_options)
56
+ analyzer.analyze_docs
57
+ end
58
+ end
59
+ end
60
+
61
+ desc '[R2-OAS] Open Swagger Editor'
62
+ task editor: [:common] do
63
+ start do
64
+ builder_options = { unit_paths_file_path: unit_paths_file_path }
65
+ builder = R2OAS::Schema::Builder.new(builder_options)
66
+ builder.build_docs
67
+
68
+ before_schema_data = builder.oas_doc
69
+ editor_options = { unit_paths_file_path: unit_paths_file_path }
70
+ editor = R2OAS::Schema::Editor.new(before_schema_data, editor_options)
71
+ editor.start
72
+ end
73
+ end
74
+
75
+ desc '[R2-OAS] Open Swagger UI'
76
+ task ui: [:common] do
77
+ start do
78
+ builder_options = { unit_paths_file_path: unit_paths_file_path }
79
+ builder = R2OAS::Schema::Builder.new(builder_options)
80
+ builder.build_docs
81
+
82
+ ui_options = { unit_paths_file_path: unit_paths_file_path }
83
+ ui = R2OAS::Schema::UI.new(ui_options)
84
+ ui.start
85
+ end
86
+ end
87
+
88
+ desc '[R2-OAS] Monitor OAS Document'
89
+ task monitor: [:common] do
90
+ start do
91
+ builder_options = { unit_paths_file_path: unit_paths_file_path }
92
+ builder = R2OAS::Schema::Builder.new(builder_options)
93
+ builder.build_docs
94
+
95
+ before_schema_data = builder.oas_doc
96
+ monitor_options = { unit_paths_file_path: unit_paths_file_path }
97
+ monitor = R2OAS::Schema::Monitor.new(before_schema_data, monitor_options)
98
+ monitor.start
99
+ end
100
+ end
101
+
102
+ desc '[R2-OAS] Clean OAS Document'
103
+ task clean: [:common] do
104
+ start do
105
+ builder_options = { skip_load_dot_paths: true }
106
+ builder = R2OAS::Schema::Builder.new(builder_options)
107
+ builder.build_docs
108
+
109
+ cleaner = R2OAS::Schema::Cleaner.new
110
+ cleaner.clean_docs
111
+ end
112
+ end
113
+
114
+ private
115
+
116
+ def unit_paths_file_path
117
+ ENV.fetch('PATHS_FILE', '')
118
+ end
119
+
120
+ def existing_schema_file_path
121
+ ENV.fetch('OAS_FILE', '')
122
+ end
123
+
124
+ def cache_docs
125
+ ENV.fetch('CACHE_DOCS', 'false')
126
+ end
127
+
128
+ def override_src
129
+ ENV.fetch('OVERRIDE_SRC', 'false')
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'r2-oas/deploy/client'
4
+ require 'r2-oas/tool/paths/ls'
5
+ require 'r2-oas/tool/paths/stats'
6
+ require 'r2-oas/task_logging'
7
+ load File.expand_path('common.rake', __dir__)
8
+
9
+ namespace :routes do
10
+ namespace :oas do
11
+ desc '[R2-OAS] Deploy OAS Document'
12
+ task deploy: [:common] do
13
+ start do
14
+ client_options = {}
15
+ client = R2OAS::Deploy::Client.new(client_options)
16
+
17
+ download_dist_th = Thread.new do
18
+ puts 'Download swagger-api/swagger-ui/dist ... (async)'
19
+ client.download_swagger_ui_dist
20
+ end
21
+
22
+ output_dir_path = File.expand_path(R2OAS.output_dir_path)
23
+ FileUtils.mkdir_p(output_dir_path) unless FileTest.exists?(output_dir_path)
24
+
25
+ builder_options = { unit_paths_file_path: unit_paths_file_path, use_plugin: true, output: true }
26
+ builder = R2OAS::Schema::Builder.new(builder_options)
27
+ builder.build_docs
28
+
29
+ download_dist_th.join
30
+ client.deploy
31
+ end
32
+ end
33
+
34
+ desc '[R2-OAS] Display paths list'
35
+ task paths_ls: [:common] do
36
+ fd = IO.sysopen('/dev/null', 'w+')
37
+ $stdout = IO.new(fd)
38
+ logger.level = :null
39
+
40
+ start do
41
+ $stdout = StringIO.new
42
+
43
+ paths_ls_options = {}
44
+ paths_ls = R2OAS::Tool::Paths::Ls.new(paths_ls_options)
45
+ paths_ls.print
46
+ end
47
+
48
+ result = $stdout.string
49
+ $stdout = STDOUT
50
+ puts result
51
+ end
52
+
53
+ desc '[R2-OAS] Display paths stats'
54
+ task paths_stats: [:common] do
55
+ fd = IO.sysopen('/dev/null', 'w+')
56
+ $stdout = IO.new(fd)
57
+ logger.level = :null
58
+
59
+ start do
60
+ builder_options = { skip_load_dot_paths: true }
61
+ builder = R2OAS::Schema::Builder.new(builder_options)
62
+ builder.build_docs
63
+
64
+ $stdout = StringIO.new
65
+
66
+ paths_log_options = {}
67
+ paths_log = R2OAS::Tool::Paths::Stats.new(paths_log_options)
68
+ paths_log.print
69
+ end
70
+
71
+ result = $stdout.string
72
+ $stdout = STDOUT
73
+ puts result
74
+ end
75
+
76
+ private
77
+
78
+ def unit_paths_file_path
79
+ ENV.fetch('PATHS_FILE', '')
80
+ end
81
+
82
+ def existing_schema_file_path
83
+ ENV.fetch('OAS_FILE', '')
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R2OAS
4
+ module Tool
5
+ module Paths
6
+ class Ls < Base
7
+ def print
8
+ Dir.glob("#{schema_save_dir_path}/paths/**/**.yml").each do |path|
9
+ puts path.sub(%r{^#{Dir.getwd}/?}, '')
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end