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