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,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'r2-oas/version'
4
+ require 'r2-oas/public'
5
+
6
+ module R2OAS
7
+ if !defined?(::Rails)
8
+ raise NoImplementError, 'Can not load Rails'
9
+ # support Rails version
10
+ elsif ::Rails::VERSION::STRING >= '4.2.5.1'
11
+ extend Configuration
12
+ require 'r2-oas/task'
13
+ require 'r2-oas/plugin/public'
14
+ require 'r2-oas/lib/core_ext/hash/deep_merge'
15
+ require 'r2-oas/lib/core_ext/object/blank'
16
+
17
+ autoload :Base, 'r2-oas/base'
18
+ autoload :NoImplementError, 'r2-oas/errors'
19
+ autoload :NoFileExistsError, 'r2-oas/errors'
20
+ autoload :NoSupportError, 'r2-oas/errors'
21
+ autoload :Sortable, 'r2-oas/shared/all'
22
+ autoload :Deprecation, 'r2-oas/support/deprecation'
23
+
24
+ module Schema
25
+ autoload :Base, 'r2-oas/schema/base'
26
+ autoload :Generator, 'r2-oas/schema/generator'
27
+ autoload :Builder, 'r2-oas/schema/builder'
28
+ autoload :Analyzer, 'r2-oas/schema/analyzer'
29
+ autoload :Squeezer, 'r2-oas/schema/squeezer'
30
+ autoload :Cleaner, 'r2-oas/schema/cleaner'
31
+ end
32
+ else
33
+ raise NoImplementError, "Do not support Rails Version: #{::Rails::VERSION::STRING}"
34
+ end
35
+ end
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'app_configuration/server'
4
+ require_relative 'app_configuration/swagger'
5
+ require_relative 'app_configuration/tool'
6
+ require_relative 'app_configuration/deprecation'
7
+
8
+ module R2OAS
9
+ module AppConfiguration
10
+ DEFAULT_VERSION = :v3
11
+ DEFAULT_ROOT_DIR_PATH = './oas_docs'
12
+ DEFAULT_SCHEMA_SAVE_DIR_NAME = 'src'
13
+ DEFAULT_DOC_SAVE_FILE_NAME = 'oas_doc.yml'
14
+ DEFAULT_FORCE_UPDATE_SCHEMA = false
15
+ DEFAULT_USE_TAG_NAMESPACE = true
16
+ DEFAULT_USE_SCHEMA_NAMESPACE = true
17
+ DEFAULT_SERVER = Server.new
18
+ DEFAULT_INTERVAL_TO_SAVE_EDITED_TMP_SCHEMA = 15
19
+ DEFAULT_SWAGGER = Swagger.new
20
+ # rubocop:disable Style/MutableConstant
21
+ DEFAULT_HTTP_STATUSES_WHEN_HTTP_METHOD = {
22
+ get: {
23
+ default: %w[200 422],
24
+ path_parameter: %w[200 404 422]
25
+ },
26
+ post: {
27
+ default: %w[201 422],
28
+ path_parameter: %w[201 404 422]
29
+ },
30
+ patch: {
31
+ default: %w[204 422],
32
+ path_parameter: %w[204 404 422]
33
+ },
34
+ put: {
35
+ default: %w[204 422],
36
+ path_parameter: %w[204 404 422]
37
+ },
38
+ delete: {
39
+ default: %w[200 422],
40
+ path_parameter: %w[200 404 422]
41
+ }
42
+ }
43
+ DEFAULT_HTTP_METHODS_WHEN_GENERATE_REQUEST_BODY = %w[post patch put]
44
+ DEFAULT_IGNORED_HTTP_STATUSES_WHEN_GENERATE_COMPONENT_SCHEMA = %w[204 404]
45
+ # rubocop:enable Style/MutableConstant
46
+ DEFAULT_TOOL = Tool.new
47
+ # :dot or :underbar
48
+ DEFAULT_NAMESPACE_TYPE = :dot
49
+ DEFAULT_DEPLOY_DIR_PATH = './deploy_docs'
50
+ EDFAULT_PLUGINS = [].freeze
51
+ DEFAULT_LOCAL_PLUGINS_DIR_NAME = 'plugins'
52
+ DEFAULT_LOCAL_TASKS_DIR_NAME = 'tasks'
53
+ DEFAULT_OUTPUT_PATH = './oas_docs/dist/oas_doc.yml'
54
+ DEFAULT_DEPRECATION = Deprecation.new
55
+
56
+ PUBLIC_VALID_OPTIONS_KEYS = %i[
57
+ version
58
+ root_dir_path
59
+ schema_save_dir_name
60
+ doc_save_file_name
61
+ force_update_schema
62
+ use_tag_namespace
63
+ use_schema_namespace
64
+ server
65
+ interval_to_save_edited_tmp_schema
66
+ swagger
67
+ http_statuses_when_http_method
68
+ http_methods_when_generate_request_body
69
+ ignored_http_statuses_when_generate_component_schema
70
+ tool
71
+ namespace_type
72
+ deploy_dir_path
73
+ plugins
74
+ local_plugins_dir_name
75
+ local_tasks_dir_name
76
+ output_path
77
+ deprecation
78
+ ].freeze
79
+
80
+ UNPUBLIC_VALID_OPTIONS_KEYS = %i[
81
+ paths_config
82
+ logger
83
+ ].freeze
84
+
85
+ VALID_OPTIONS_KEYS = PUBLIC_VALID_OPTIONS_KEYS + UNPUBLIC_VALID_OPTIONS_KEYS
86
+
87
+ attr_accessor *PUBLIC_VALID_OPTIONS_KEYS
88
+
89
+ def options
90
+ VALID_OPTIONS_KEYS.inject({}) do |option, key|
91
+ option.merge!(key => send(key))
92
+ end
93
+ end
94
+
95
+ private
96
+
97
+ module_function def set_default(target)
98
+ target.version = DEFAULT_VERSION
99
+ target.root_dir_path = DEFAULT_ROOT_DIR_PATH
100
+ target.schema_save_dir_name = DEFAULT_SCHEMA_SAVE_DIR_NAME
101
+ target.doc_save_file_name = DEFAULT_DOC_SAVE_FILE_NAME
102
+ target.force_update_schema = DEFAULT_FORCE_UPDATE_SCHEMA
103
+ target.use_tag_namespace = DEFAULT_USE_TAG_NAMESPACE
104
+ target.use_schema_namespace = DEFAULT_USE_SCHEMA_NAMESPACE
105
+ target.server = DEFAULT_SERVER
106
+ target.interval_to_save_edited_tmp_schema = DEFAULT_INTERVAL_TO_SAVE_EDITED_TMP_SCHEMA
107
+ target.swagger = DEFAULT_SWAGGER
108
+ target.http_statuses_when_http_method = DEFAULT_HTTP_STATUSES_WHEN_HTTP_METHOD
109
+ target.tool = DEFAULT_TOOL
110
+ target.http_methods_when_generate_request_body = DEFAULT_HTTP_METHODS_WHEN_GENERATE_REQUEST_BODY
111
+ target.ignored_http_statuses_when_generate_component_schema = DEFAULT_IGNORED_HTTP_STATUSES_WHEN_GENERATE_COMPONENT_SCHEMA
112
+ target.namespace_type = DEFAULT_NAMESPACE_TYPE
113
+ target.deploy_dir_path = DEFAULT_DEPLOY_DIR_PATH
114
+ target.plugins = EDFAULT_PLUGINS
115
+ target.local_plugins_dir_name = DEFAULT_LOCAL_PLUGINS_DIR_NAME
116
+ target.local_tasks_dir_name = DEFAULT_LOCAL_TASKS_DIR_NAME
117
+ target.output_path = DEFAULT_OUTPUT_PATH
118
+ target.deprecation = DEFAULT_DEPRECATION
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'r2-oas/support/deprecation'
4
+
5
+ module R2OAS
6
+ module AppConfiguration
7
+ class Deprecation
8
+ DEFAULT_SILENCED = ::R2OAS::Deprecation.silenced
9
+
10
+ attr_reader :silenced
11
+
12
+ def silenced=(value)
13
+ @silenced = !!value
14
+ ::R2OAS::Deprecation.silenced = !!value
15
+ end
16
+
17
+ def initialize
18
+ set_default
19
+ end
20
+
21
+ private
22
+
23
+ def set_default
24
+ self.silenced = DEFAULT_SILENCED
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R2OAS
4
+ module AppConfiguration
5
+ class Server
6
+ DEFAULT_URL = 'http://localhost:3000'
7
+ DEFAULT_DESCRIPTION = 'localhost'
8
+
9
+ VALID_OPTIONS_KEYS = [
10
+ :data
11
+ ].freeze
12
+
13
+ attr_accessor *VALID_OPTIONS_KEYS
14
+
15
+ def initialize
16
+ set_default
17
+ end
18
+
19
+ def configure
20
+ yield self
21
+ end
22
+
23
+ private
24
+
25
+ def set_default
26
+ self.data = [
27
+ {
28
+ url: DEFAULT_URL,
29
+ description: DEFAULT_DESCRIPTION
30
+ }
31
+ ]
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'swagger/ui'
4
+ require_relative 'swagger/editor'
5
+
6
+ module R2OAS
7
+ module AppConfiguration
8
+ class Swagger
9
+ DEFAULT_EDITOR = Editor.new
10
+ DEFAULT_UI = UI.new
11
+
12
+ VALID_OPTIONS_KEYS = %i[
13
+ editor
14
+ ui
15
+ ].freeze
16
+
17
+ attr_accessor *VALID_OPTIONS_KEYS
18
+
19
+ def initialize
20
+ set_default
21
+ end
22
+
23
+ def configure
24
+ yield self
25
+ end
26
+
27
+ private
28
+
29
+ def set_default
30
+ self.editor = DEFAULT_EDITOR
31
+ self.ui = DEFAULT_UI
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R2OAS
4
+ module AppConfiguration
5
+ class Swagger
6
+ class Editor
7
+ DEFAULT_IMAGE = 'swaggerapi/swagger-editor'
8
+ DEFAULT_PORT = '81'
9
+ DEFAULT_EXPOSED_PORT = '8080/tcp'
10
+ DEFAULT_STORAGE_KEY = 'swagger-editor-content' # Fixed
11
+ DEFAULT_HOST = 'http://localhost' # Fixed
12
+
13
+ VALID_OPTIONS_KEYS = %i[
14
+ image
15
+ port
16
+ exposed_port
17
+ ].freeze
18
+
19
+ attr_accessor *VALID_OPTIONS_KEYS
20
+
21
+ def initialize
22
+ set_default
23
+ end
24
+
25
+ def configure
26
+ yield self
27
+ end
28
+
29
+ def url
30
+ "#{DEFAULT_HOST}:#{port}"
31
+ end
32
+
33
+ def storage_key
34
+ DEFAULT_STORAGE_KEY
35
+ end
36
+
37
+ private
38
+
39
+ def set_default
40
+ self.image = DEFAULT_IMAGE
41
+ self.port = DEFAULT_PORT
42
+ self.exposed_port = DEFAULT_EXPOSED_PORT
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R2OAS
4
+ module AppConfiguration
5
+ class Swagger
6
+ class UI
7
+ DEFAULT_IMAGE = 'swaggerapi/swagger-ui'
8
+ DEFAULT_PORT = '8080'
9
+ DEFAULT_EXPOSED_PORT = '8080/tcp'
10
+ DEFAULT_VOLUME = '/app/swagger.json'
11
+ DEFAULT_HOST = 'http://localhost' # Fixed
12
+
13
+ VALID_OPTIONS_KEYS = %i[
14
+ image
15
+ port
16
+ exposed_port
17
+ volume
18
+ ].freeze
19
+
20
+ attr_accessor *VALID_OPTIONS_KEYS
21
+
22
+ def initialize
23
+ set_default
24
+ end
25
+
26
+ def configure
27
+ yield self
28
+ end
29
+
30
+ def url
31
+ "#{DEFAULT_HOST}:#{port}"
32
+ end
33
+
34
+ private
35
+
36
+ def set_default
37
+ self.image = DEFAULT_IMAGE
38
+ self.port = DEFAULT_PORT
39
+ self.exposed_port = DEFAULT_EXPOSED_PORT
40
+ self.volume = DEFAULT_VOLUME
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'tool/paths/stats'
4
+
5
+ module R2OAS
6
+ module AppConfiguration
7
+ class Tool
8
+ DEFAULT_PATHS_STATS = PathsStats.new
9
+
10
+ VALID_OPTIONS_KEYS = [
11
+ :paths_stats
12
+ ].freeze
13
+
14
+ attr_accessor *VALID_OPTIONS_KEYS
15
+
16
+ def initialize
17
+ set_default
18
+ end
19
+
20
+ def configure
21
+ yield self
22
+ end
23
+
24
+ private
25
+
26
+ def set_default
27
+ self.paths_stats = DEFAULT_PATHS_STATS
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R2OAS
4
+ module AppConfiguration
5
+ class Tool
6
+ class PathsStats
7
+ DEFAULT_MONTH_TO_TURN_TO_WARNING_COLOR = 3
8
+ DEFAULT_WARNING_COLOR = :red
9
+ DEFAULT_TABLE_TITLE_COLOR = :yellow
10
+ DEFAULT_HEADING_COLOR = :yellow
11
+ DEFAULT_HIGHLIGHT_COLOR = :magenta
12
+
13
+ VALID_OPTIONS_KEYS = %i[
14
+ month_to_turn_to_warning_color
15
+ warning_color
16
+ table_title_color
17
+ heading_color
18
+ highlight_color
19
+ ].freeze
20
+
21
+ attr_accessor *VALID_OPTIONS_KEYS
22
+
23
+ def initialize
24
+ set_default
25
+ end
26
+
27
+ def configure
28
+ yield self
29
+ end
30
+
31
+ private
32
+
33
+ def set_default
34
+ self.month_to_turn_to_warning_color = DEFAULT_MONTH_TO_TURN_TO_WARNING_COLOR
35
+ self.warning_color = DEFAULT_WARNING_COLOR
36
+ self.table_title_color = DEFAULT_TABLE_TITLE_COLOR
37
+ self.heading_color = DEFAULT_HEADING_COLOR
38
+ self.highlight_color = DEFAULT_HIGHLIGHT_COLOR
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module R2OAS
4
+ class Base
5
+ def initialize(options = {})
6
+ @options = options
7
+
8
+ (AppConfiguration::VALID_OPTIONS_KEYS + options.keys).each do |key|
9
+ send("#{key}=", merged_options[key])
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ attr_accessor *AppConfiguration::VALID_OPTIONS_KEYS
16
+
17
+ def merged_options
18
+ if @options.present?
19
+ R2OAS.options.merge(@options)
20
+ else
21
+ R2OAS.options
22
+ end
23
+ end
24
+
25
+ def logger
26
+ R2OAS.logger
27
+ end
28
+
29
+ def schema_save_dir_path
30
+ File.expand_path("#{root_dir_path}/#{schema_save_dir_name}")
31
+ end
32
+
33
+ def doc_save_file_path
34
+ File.expand_path("#{root_dir_path}/#{doc_save_file_name}")
35
+ end
36
+
37
+ def ns_div
38
+ case namespace_type
39
+ when :dot
40
+ '.'
41
+ when :underbar
42
+ '_'
43
+ else
44
+ raise "Do not support #{namespace_type}"
45
+ end
46
+ end
47
+ end
48
+ end