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