dev_suite 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +1 -1
- data/README.md +53 -0
- data/dev_suite.gemspec +0 -4
- data/lib/dev_suite/cli/commands/base.rb +0 -2
- data/lib/dev_suite/cli/commands/tree.rb +3 -3
- data/lib/dev_suite/cli/commands/version.rb +1 -1
- data/lib/dev_suite/cli/main.rb +1 -1
- data/lib/dev_suite/dev_suite.rb +12 -0
- data/lib/dev_suite/directory_tree/config/config.rb +11 -0
- data/lib/dev_suite/directory_tree/config/configuration.rb +21 -0
- data/lib/dev_suite/directory_tree/config.rb +2 -36
- data/lib/dev_suite/directory_tree/directory_tree.rb +0 -1
- data/lib/dev_suite/directory_tree/renderer/base.rb +0 -6
- data/lib/dev_suite/performance/analyzer.rb +1 -1
- data/lib/dev_suite/performance/config/config.rb +11 -0
- data/lib/dev_suite/performance/config/configuration.rb +30 -0
- data/lib/dev_suite/performance/config.rb +2 -30
- data/lib/dev_suite/performance/{reportor → reporter}/base.rb +1 -1
- data/lib/dev_suite/performance/{reportor → reporter}/helpers/stat_mappings.rb +1 -1
- data/lib/dev_suite/performance/{reportor → reporter}/helpers/table_builder.rb +1 -1
- data/lib/dev_suite/performance/{reportor → reporter}/helpers.rb +1 -1
- data/lib/dev_suite/performance/{reportor → reporter}/simple.rb +1 -1
- data/lib/dev_suite/performance/reporter.rb +22 -0
- data/lib/dev_suite/performance.rb +1 -1
- data/lib/dev_suite/request_logger/adapter/adapter.rb +27 -0
- data/lib/dev_suite/request_logger/adapter/base.rb +17 -0
- data/lib/dev_suite/request_logger/adapter/net_http.rb +42 -0
- data/lib/dev_suite/request_logger/adapter.rb +9 -0
- data/lib/dev_suite/request_logger/config/config.rb +11 -0
- data/lib/dev_suite/request_logger/config/configuration.rb +24 -0
- data/lib/dev_suite/request_logger/config.rb +9 -0
- data/lib/dev_suite/request_logger/logger.rb +93 -0
- data/lib/dev_suite/request_logger/request_logger.rb +29 -0
- data/lib/dev_suite/request_logger.rb +7 -0
- data/lib/dev_suite/utils/color/color.rb +12 -0
- data/lib/dev_suite/utils/color/config/config.rb +13 -0
- data/lib/dev_suite/utils/color/config/configuration.rb +31 -0
- data/lib/dev_suite/utils/color/config.rb +2 -31
- data/lib/dev_suite/utils/color/strategy/theme.rb +6 -7
- data/lib/dev_suite/utils/color/strategy.rb +2 -4
- data/lib/dev_suite/utils/color.rb +1 -4
- data/lib/dev_suite/utils/construct/config/attribute/attribute.rb +15 -0
- data/lib/dev_suite/utils/construct/config/attribute/manager.rb +63 -0
- data/lib/dev_suite/utils/construct/config/attribute/resolver.rb +31 -0
- data/lib/dev_suite/utils/construct/config/attribute/validator.rb +55 -0
- data/lib/dev_suite/utils/construct/config/attribute.rb +13 -0
- data/lib/dev_suite/utils/construct/config/base.rb +20 -0
- data/lib/dev_suite/utils/construct/config/config.rb +24 -0
- data/lib/dev_suite/utils/construct/config/configuration.rb +13 -0
- data/lib/dev_suite/utils/construct/config/hook/hook.rb +13 -0
- data/lib/dev_suite/utils/construct/config/hook/manager.rb +36 -0
- data/lib/dev_suite/utils/construct/config/hook.rb +13 -0
- data/lib/dev_suite/utils/construct/config/initializer.rb +21 -0
- data/lib/dev_suite/utils/construct/config/manager.rb +33 -0
- data/lib/dev_suite/utils/construct/config/settings/base.rb +59 -0
- data/lib/dev_suite/utils/construct/config/settings/manager.rb +38 -0
- data/lib/dev_suite/utils/construct/config/settings/settings.rb +14 -0
- data/lib/dev_suite/utils/construct/config/settings.rb +13 -0
- data/lib/dev_suite/utils/construct/config.rb +11 -0
- data/lib/dev_suite/utils/construct/construct.rb +9 -0
- data/lib/dev_suite/utils/construct.rb +16 -0
- data/lib/dev_suite/utils/emoji.rb +71 -0
- data/lib/dev_suite/utils/error_handler.rb +24 -0
- data/lib/dev_suite/utils/file_loader/config/config.rb +13 -0
- data/lib/dev_suite/utils/file_loader/config/configuration.rb +33 -0
- data/lib/dev_suite/utils/file_loader/config.rb +11 -0
- data/lib/dev_suite/utils/file_loader/file_loader.rb +23 -0
- data/lib/dev_suite/utils/file_loader/loader/base.rb +21 -0
- data/lib/dev_suite/utils/file_loader/loader/json.rb +21 -0
- data/lib/dev_suite/utils/file_loader/loader/text.rb +21 -0
- data/lib/dev_suite/utils/file_loader/loader/yaml.rb +38 -0
- data/lib/dev_suite/utils/file_loader/loader.rb +41 -0
- data/lib/dev_suite/utils/file_loader/loader_manager.rb +34 -0
- data/lib/dev_suite/utils/file_loader/loader_registry.rb +36 -0
- data/lib/dev_suite/utils/file_loader.rb +9 -0
- data/lib/dev_suite/utils/logger.rb +58 -0
- data/lib/dev_suite/utils/path_matcher/matcher.rb +31 -0
- data/lib/dev_suite/utils/path_matcher/path_matcher.rb +17 -0
- data/lib/dev_suite/utils/path_matcher/pattern.rb +35 -0
- data/lib/dev_suite/utils/path_matcher.rb +9 -0
- data/lib/dev_suite/utils/table/config/config.rb +13 -0
- data/lib/dev_suite/utils/table/config/configuration.rb +32 -0
- data/lib/dev_suite/utils/table/config.rb +2 -23
- data/lib/dev_suite/utils/table/renderer/base.rb +0 -6
- data/lib/dev_suite/utils/table/renderer/simple.rb +9 -5
- data/lib/dev_suite/utils/table/renderer.rb +2 -2
- data/lib/dev_suite/utils/table/table.rb +6 -0
- data/lib/dev_suite/utils/table.rb +0 -6
- data/lib/dev_suite/utils/utils.rb +14 -0
- data/lib/dev_suite/utils.rb +1 -3
- data/lib/dev_suite/version.rb +1 -1
- data/lib/dev_suite.rb +1 -10
- metadata +68 -44
- data/lib/dev_suite/directory_tree/settings.rb +0 -18
- data/lib/dev_suite/emoji.rb +0 -33
- data/lib/dev_suite/error_handler.rb +0 -22
- data/lib/dev_suite/logger.rb +0 -56
- data/lib/dev_suite/performance/reportor.rb +0 -22
- data/lib/dev_suite/utils/config_tools/configuration.rb +0 -134
- data/lib/dev_suite/utils/config_tools/settings.rb +0 -67
- data/lib/dev_suite/utils/config_tools.rb +0 -10
- data/lib/dev_suite/utils/table/settings.rb +0 -34
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module RequestLogger
|
5
|
+
module Logger
|
6
|
+
class << self
|
7
|
+
def log_request(adapter, request)
|
8
|
+
log_entry(format_request_line(adapter, request), :start)
|
9
|
+
log_headers(request) if settings.get(:log_headers)
|
10
|
+
log_cookies(request) if settings.get(:log_cookies)
|
11
|
+
log_body(request.body, "Request") if settings.get(:log_body)
|
12
|
+
end
|
13
|
+
|
14
|
+
def log_response(adapter, response)
|
15
|
+
status_emoji = determine_status_emoji(response)
|
16
|
+
log_level = determine_log_level(response)
|
17
|
+
|
18
|
+
log_entry(format_response_line(adapter, response), status_emoji, log_level)
|
19
|
+
log_headers(response) if settings.get(:log_headers)
|
20
|
+
log_body(response.body, "Response") if settings.get(:log_body)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def config
|
26
|
+
Config.configuration
|
27
|
+
end
|
28
|
+
|
29
|
+
def settings
|
30
|
+
config.settings
|
31
|
+
end
|
32
|
+
|
33
|
+
def log_entry(message, emoji, level = settings.get(:log_level))
|
34
|
+
Utils::Logger.log(message, level: level, emoji: emoji)
|
35
|
+
end
|
36
|
+
|
37
|
+
def determine_status_emoji(response)
|
38
|
+
response_success?(response) ? :success : :error
|
39
|
+
end
|
40
|
+
|
41
|
+
def determine_log_level(response)
|
42
|
+
response_success?(response) ? settings.get(:log_level) : :error
|
43
|
+
end
|
44
|
+
|
45
|
+
def response_success?(response)
|
46
|
+
response.code.to_i.between?(200, 299)
|
47
|
+
end
|
48
|
+
|
49
|
+
def extract_headers(request)
|
50
|
+
request.each_header.to_h
|
51
|
+
end
|
52
|
+
|
53
|
+
def extract_cookies(request)
|
54
|
+
if request.respond_to?(:to_hash) && request.to_hash["cookie"]
|
55
|
+
request.to_hash["cookie"]
|
56
|
+
elsif request.respond_to?(:headers) && request.headers["Cookie"]
|
57
|
+
[request.headers["Cookie"]]
|
58
|
+
else
|
59
|
+
[]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def format_request_line(adapter, request)
|
64
|
+
"#{adapter.class} Request: #{request.method} #{request.uri}"
|
65
|
+
end
|
66
|
+
|
67
|
+
def format_response_line(adapter, response)
|
68
|
+
"#{adapter.class} Response: #{response.code} #{response.message}"
|
69
|
+
end
|
70
|
+
|
71
|
+
def log_headers(request)
|
72
|
+
headers = extract_headers(request)
|
73
|
+
log_entry("Headers: #{headers}", :document) unless headers.empty?
|
74
|
+
end
|
75
|
+
|
76
|
+
def log_cookies(request)
|
77
|
+
cookies = extract_cookies(request)
|
78
|
+
if cookies.any?
|
79
|
+
log_entry("Cookies: #{cookies.join("; ")}", :cookie)
|
80
|
+
else
|
81
|
+
log_entry("Cookies: None", :cookie)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def log_body(body, type)
|
86
|
+
return unless body && !body.empty?
|
87
|
+
|
88
|
+
log_entry("#{type} Body: #{body}", :code)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module RequestLogger
|
5
|
+
require_relative "config"
|
6
|
+
require_relative "adapter"
|
7
|
+
require_relative "logger"
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def with_logging(&block)
|
11
|
+
enable_adapters
|
12
|
+
block.call
|
13
|
+
ensure
|
14
|
+
# Ensure that adapters are disabled even if an exception is raised
|
15
|
+
disable_adapters
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def enable_adapters
|
21
|
+
Config.configuration.adapters.each(&:enable)
|
22
|
+
end
|
23
|
+
|
24
|
+
def disable_adapters
|
25
|
+
Config.configuration.adapters.each(&:disable)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module Utils
|
5
|
+
module Color
|
6
|
+
module Config
|
7
|
+
class Configuration < BaseConfiguration
|
8
|
+
config_attr :strategy,
|
9
|
+
default_value: :theme,
|
10
|
+
type: :symbol,
|
11
|
+
resolver: :resolve_strategy
|
12
|
+
|
13
|
+
config_attr :palette,
|
14
|
+
default_value: :default,
|
15
|
+
type: :symbol,
|
16
|
+
resolver: :resolve_palette
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def resolve_strategy(value)
|
21
|
+
Strategy.create(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def resolve_palette(value)
|
25
|
+
Palette.create(value)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -3,37 +3,8 @@
|
|
3
3
|
module DevSuite
|
4
4
|
module Utils
|
5
5
|
module Color
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def initialize(strategy: :theme, palette: :default)
|
10
|
-
@palette = Palette.create(palette)
|
11
|
-
@strategy = Strategy.create(strategy, palette: @palette)
|
12
|
-
freeze # Make the instance of this class immutable as well
|
13
|
-
end
|
14
|
-
|
15
|
-
class << self
|
16
|
-
#
|
17
|
-
# Provide global access to a single instance of Config
|
18
|
-
#
|
19
|
-
def configuration
|
20
|
-
@configuration ||= new
|
21
|
-
end
|
22
|
-
|
23
|
-
# Allow block-based configuration
|
24
|
-
def configure
|
25
|
-
yield(configuration)
|
26
|
-
rescue StandardError => e
|
27
|
-
handle_configuration_error(e)
|
28
|
-
raise
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def handle_configuration_error(error)
|
34
|
-
puts "Configuration error: #{error.message}"
|
35
|
-
end
|
36
|
-
end
|
6
|
+
module Config
|
7
|
+
require_relative "config/config"
|
37
8
|
end
|
38
9
|
end
|
39
10
|
end
|
@@ -5,17 +5,12 @@ module DevSuite
|
|
5
5
|
module Color
|
6
6
|
module Strategy
|
7
7
|
class Theme < Base
|
8
|
-
def initialize(palette)
|
9
|
-
super()
|
10
|
-
@palette = palette
|
11
|
-
end
|
12
|
-
|
13
8
|
def colorize(text, color: :default)
|
14
|
-
unless
|
9
|
+
unless palette.colors.key?(color)
|
15
10
|
raise ArgumentError, "Invalid color key"
|
16
11
|
end
|
17
12
|
|
18
|
-
color_code =
|
13
|
+
color_code = palette.colors[color]
|
19
14
|
|
20
15
|
unless valid_color_code?(color_code)
|
21
16
|
raise ArgumentError, "Invalid color code"
|
@@ -26,6 +21,10 @@ module DevSuite
|
|
26
21
|
|
27
22
|
private
|
28
23
|
|
24
|
+
def palette
|
25
|
+
Config.configuration.palette
|
26
|
+
end
|
27
|
+
|
29
28
|
def valid_color_code?(color_code)
|
30
29
|
color_code.is_a?(Integer) && color_code.between?(0, 255)
|
31
30
|
end
|
@@ -10,16 +10,14 @@ module DevSuite
|
|
10
10
|
require_relative "strategy/theme"
|
11
11
|
|
12
12
|
class << self
|
13
|
-
def create(type
|
13
|
+
def create(type)
|
14
14
|
case type
|
15
15
|
when :basic
|
16
16
|
Basic.new
|
17
17
|
when :rgb
|
18
18
|
Rgb.new
|
19
19
|
when :theme
|
20
|
-
|
21
|
-
|
22
|
-
Theme.new(palette)
|
20
|
+
Theme.new
|
23
21
|
else
|
24
22
|
raise ArgumentError, "Unknown strategy type: #{type}"
|
25
23
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module Utils
|
5
|
+
module Construct
|
6
|
+
module Config
|
7
|
+
module Attribute
|
8
|
+
module Manager
|
9
|
+
include Validator
|
10
|
+
include Resolver
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def included(base)
|
14
|
+
base.extend(ClassMethods)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module ClassMethods
|
19
|
+
def config_attr(attr, default_value: nil, type: nil, resolver: nil)
|
20
|
+
config_attrs[attr] = { default_value: default_value, type: type, resolver: resolver }
|
21
|
+
define_config_attr_methods(attr)
|
22
|
+
end
|
23
|
+
|
24
|
+
def config_attrs
|
25
|
+
@config_attrs ||= {}
|
26
|
+
end
|
27
|
+
|
28
|
+
def config_attr_present?(attr)
|
29
|
+
config_attrs.key?(attr)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def define_config_attr_methods(attr)
|
35
|
+
define_method(attr) { instance_variable_get("@#{attr}") }
|
36
|
+
define_method("#{attr}=") do |value|
|
37
|
+
validate_and_set_config_attr(attr: attr, value: value)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def initialize_config_attrs
|
45
|
+
self.class.config_attrs.each do |attr, details|
|
46
|
+
send("#{attr}=", details[:default_value]) unless instance_variable_defined?("@#{attr}")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def validate_and_set_config_attr(attr:, value:)
|
51
|
+
attr_details = self.class.config_attrs[attr]
|
52
|
+
type, resolver = attr_details.values_at(:type, :resolver)
|
53
|
+
|
54
|
+
validate_config_attr_type!(attr: attr, value: value, type: type) if type
|
55
|
+
resolved_value = resolver ? resolve_config_attr(value: value, resolver: resolver) : value
|
56
|
+
instance_variable_set("@#{attr}", resolved_value)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module Utils
|
5
|
+
module Construct
|
6
|
+
module Config
|
7
|
+
module Attribute
|
8
|
+
module Resolver
|
9
|
+
extend self
|
10
|
+
|
11
|
+
# Resolves the value of an attribute based on its resolver.
|
12
|
+
# If no resolver is provided, the value is returned as is.
|
13
|
+
#
|
14
|
+
# @param value [Object] The value to resolve.
|
15
|
+
# @param resolver [Proc] The resolver to use for the attribute.
|
16
|
+
def resolve_config_attr(value:, resolver:)
|
17
|
+
case resolver
|
18
|
+
when Proc
|
19
|
+
resolver.call(value)
|
20
|
+
when Symbol
|
21
|
+
send(resolver, value)
|
22
|
+
else
|
23
|
+
value
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module Utils
|
5
|
+
module Construct
|
6
|
+
module Config
|
7
|
+
module Attribute
|
8
|
+
module Validator
|
9
|
+
extend self
|
10
|
+
|
11
|
+
# Validates an attribute's value based on its type.
|
12
|
+
#
|
13
|
+
# @param attr [Symbol] The name of the attribute.
|
14
|
+
# @param value [Object] The value to validate.
|
15
|
+
# @param type [Symbol] The expected type of the attribute.
|
16
|
+
def validate_config_attr_type!(attr:, value:, type:)
|
17
|
+
case type
|
18
|
+
when :symbol
|
19
|
+
validate_symbol!(value)
|
20
|
+
when :hash
|
21
|
+
validate_hash!(value)
|
22
|
+
when :array
|
23
|
+
validate_array!(value)
|
24
|
+
when :class
|
25
|
+
validate_instance_of!(value, Object)
|
26
|
+
else
|
27
|
+
raise ArgumentError, "Unknown type #{type} for attribute #{attr}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Utility method to validate a Symbol.
|
32
|
+
def validate_symbol!(value)
|
33
|
+
raise ArgumentError, "Expected a Symbol, got #{value.class}" unless value.is_a?(Symbol)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Utility method to validate a Hash.
|
37
|
+
def validate_hash!(value)
|
38
|
+
raise ArgumentError, "Expected a Hash, got #{value.class}" unless value.is_a?(Hash)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Utility method to validate an Array.
|
42
|
+
def validate_array!(value)
|
43
|
+
raise ArgumentError, "Expected an Array, got #{value.class}" unless value.is_a?(Array)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Utility method to validate a class instance.
|
47
|
+
def validate_instance_of!(value, klass)
|
48
|
+
raise ArgumentError, "Expected an instance of #{klass}, got #{value.class}" unless value.is_a?(klass)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module Utils
|
5
|
+
module Construct
|
6
|
+
module Config
|
7
|
+
class Base
|
8
|
+
include Attribute::Manager
|
9
|
+
include Hook::Manager
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
run_hooks(:before_initialize)
|
13
|
+
initialize_config_attrs
|
14
|
+
run_hooks(:after_initialize)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module Utils
|
5
|
+
module Construct
|
6
|
+
module Config
|
7
|
+
require_relative "attribute"
|
8
|
+
require_relative "hook"
|
9
|
+
require_relative "base"
|
10
|
+
require_relative "settings"
|
11
|
+
require_relative "configuration"
|
12
|
+
require_relative "manager"
|
13
|
+
require_relative "initializer"
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def included(base)
|
17
|
+
base.extend(Manager)
|
18
|
+
Initializer.define_config_constants(base)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module Utils
|
5
|
+
module Construct
|
6
|
+
module Config
|
7
|
+
module Hook
|
8
|
+
module Manager
|
9
|
+
class << self
|
10
|
+
def included(base)
|
11
|
+
base.extend(ClassMethods)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
def register_hook(stage, &block)
|
17
|
+
hooks[stage] ||= []
|
18
|
+
hooks[stage] << block
|
19
|
+
end
|
20
|
+
|
21
|
+
def hooks
|
22
|
+
@hooks ||= {}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def run_hooks(stage)
|
29
|
+
self.class.hooks[stage]&.each { |hook| instance_eval(&hook) }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module Utils
|
5
|
+
module Construct
|
6
|
+
module Config
|
7
|
+
module Initializer
|
8
|
+
class << self
|
9
|
+
def define_config_constants(base)
|
10
|
+
base.const_set(:BaseConfiguration, Configuration)
|
11
|
+
|
12
|
+
unless base.const_defined?(:Configuration)
|
13
|
+
base.const_set(:Configuration, Class.new(base::BaseConfiguration))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DevSuite
|
4
|
+
module Utils
|
5
|
+
module Construct
|
6
|
+
module Config
|
7
|
+
module Manager
|
8
|
+
# Provides access to a single instance of the configuration class
|
9
|
+
# It dynamically uses the Configuration class in the including module's namespace
|
10
|
+
def configuration
|
11
|
+
@configuration ||= self::Configuration.new
|
12
|
+
end
|
13
|
+
|
14
|
+
# Allows block-based configuration
|
15
|
+
# Example usage:
|
16
|
+
# ConfigClass.configure do |config|
|
17
|
+
# config.attr_name = value
|
18
|
+
# end
|
19
|
+
def configure
|
20
|
+
yield(configuration)
|
21
|
+
rescue StandardError => e
|
22
|
+
ErrorHandler.handle_error(e)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Resets the configuration by reinitializing it with default values
|
26
|
+
def reset!
|
27
|
+
@configuration = self::Configuration.new # Reinitialize the configuration instance
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|