dev_suite 0.2.5 → 0.2.7

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -5
  3. data/.vscode/extensions.json +8 -0
  4. data/.vscode/launch.json +39 -0
  5. data/.vscode/settings.json +28 -0
  6. data/Gemfile +4 -1
  7. data/Gemfile.lock +28 -2
  8. data/README.md +39 -31
  9. data/bin/rspec +27 -0
  10. data/lib/dev_suite/directory_tree/builder/base.rb +1 -1
  11. data/lib/dev_suite/directory_tree/builder/builder.rb +13 -0
  12. data/lib/dev_suite/directory_tree/builder.rb +1 -12
  13. data/lib/dev_suite/directory_tree/config/config.rb +1 -1
  14. data/lib/dev_suite/directory_tree/config/configuration.rb +18 -5
  15. data/lib/dev_suite/directory_tree/directory_tree.rb +0 -2
  16. data/lib/dev_suite/directory_tree/node/node.rb +12 -0
  17. data/lib/dev_suite/directory_tree/node.rb +1 -4
  18. data/lib/dev_suite/directory_tree/renderer/base.rb +1 -1
  19. data/lib/dev_suite/directory_tree/renderer/renderer.rb +14 -0
  20. data/lib/dev_suite/directory_tree/renderer.rb +1 -13
  21. data/lib/dev_suite/directory_tree/visualizer/base.rb +1 -1
  22. data/lib/dev_suite/directory_tree/visualizer/visualizer.rb +16 -0
  23. data/lib/dev_suite/directory_tree/visualizer.rb +1 -15
  24. data/lib/dev_suite/performance/config/config.rb +1 -1
  25. data/lib/dev_suite/performance/config/configuration.rb +3 -3
  26. data/lib/dev_suite/performance/data/data.rb +9 -0
  27. data/lib/dev_suite/performance/data.rb +1 -1
  28. data/lib/dev_suite/performance/profiler/base.rb +1 -1
  29. data/lib/dev_suite/performance/profiler/profiler.rb +16 -0
  30. data/lib/dev_suite/performance/profiler.rb +1 -20
  31. data/lib/dev_suite/performance/profiler_manager.rb +1 -0
  32. data/lib/dev_suite/performance/reporter/base.rb +1 -1
  33. data/lib/dev_suite/performance/reporter/reporter.rb +15 -0
  34. data/lib/dev_suite/performance/reporter.rb +1 -14
  35. data/lib/dev_suite/request_logger/adapter/adapter.rb +16 -12
  36. data/lib/dev_suite/request_logger/adapter/base.rb +1 -1
  37. data/lib/dev_suite/request_logger/adapter/faraday.rb +37 -0
  38. data/lib/dev_suite/request_logger/adapter/middleware/faraday.rb +22 -0
  39. data/lib/dev_suite/request_logger/adapter/net_http.rb +1 -0
  40. data/lib/dev_suite/request_logger/adapter.rb +1 -1
  41. data/lib/dev_suite/request_logger/config/config.rb +1 -1
  42. data/lib/dev_suite/request_logger/config/configuration.rb +2 -2
  43. data/lib/dev_suite/request_logger/extractor/base.rb +17 -0
  44. data/lib/dev_suite/request_logger/extractor/extractor.rb +22 -0
  45. data/lib/dev_suite/request_logger/extractor/faraday.rb +37 -0
  46. data/lib/dev_suite/request_logger/extractor/net_http.rb +36 -0
  47. data/lib/dev_suite/request_logger/extractor.rb +9 -0
  48. data/lib/dev_suite/request_logger/logger.rb +22 -28
  49. data/lib/dev_suite/request_logger/request.rb +19 -0
  50. data/lib/dev_suite/request_logger/request_logger.rb +3 -0
  51. data/lib/dev_suite/request_logger/response.rb +28 -0
  52. data/lib/dev_suite/utils/color/config/config.rb +1 -1
  53. data/lib/dev_suite/utils/color/config/configuration.rb +3 -3
  54. data/lib/dev_suite/utils/color/palette/base.rb +1 -14
  55. data/lib/dev_suite/utils/color/palette/palette.rb +16 -0
  56. data/lib/dev_suite/utils/color/palette.rb +1 -13
  57. data/lib/dev_suite/utils/color/strategy/base.rb +1 -1
  58. data/lib/dev_suite/utils/color/strategy/strategy.rb +20 -0
  59. data/lib/dev_suite/utils/color/strategy.rb +1 -19
  60. data/lib/dev_suite/utils/construct/component/base.rb +30 -0
  61. data/lib/dev_suite/utils/construct/component/component.rb +12 -0
  62. data/lib/dev_suite/utils/construct/component/initializer.rb +28 -0
  63. data/lib/dev_suite/utils/construct/component/manager.rb +57 -0
  64. data/lib/dev_suite/utils/construct/{config/configuration.rb → component.rb} +2 -4
  65. data/lib/dev_suite/utils/construct/config/attribute/attr_definition.rb +76 -0
  66. data/lib/dev_suite/utils/construct/config/attribute/attr_initialization.rb +22 -0
  67. data/lib/dev_suite/utils/construct/config/attribute/attr_resolving.rb +80 -0
  68. data/lib/dev_suite/utils/construct/config/attribute/attribute.rb +12 -3
  69. data/lib/dev_suite/utils/construct/config/base.rb +7 -2
  70. data/lib/dev_suite/utils/construct/config/config.rb +2 -10
  71. data/lib/dev_suite/utils/construct/config/dependency_handler.rb +56 -0
  72. data/lib/dev_suite/utils/construct/config/hook/hook.rb +10 -1
  73. data/lib/dev_suite/utils/construct/config/hook/hook_registry.rb +24 -0
  74. data/lib/dev_suite/utils/construct/config/hook/hook_runner.rb +20 -0
  75. data/lib/dev_suite/utils/construct/config/manager.rb +25 -17
  76. data/lib/dev_suite/utils/construct/construct.rb +1 -0
  77. data/lib/dev_suite/utils/dependency_loader.rb +71 -0
  78. data/lib/dev_suite/utils/file_loader/config/config.rb +1 -1
  79. data/lib/dev_suite/utils/file_loader/config/configuration.rb +1 -1
  80. data/lib/dev_suite/utils/file_loader/loader/base.rb +1 -1
  81. data/lib/dev_suite/utils/file_loader/loader/loader.rb +41 -0
  82. data/lib/dev_suite/utils/file_loader/loader.rb +2 -30
  83. data/lib/dev_suite/utils/table/config/config.rb +1 -1
  84. data/lib/dev_suite/utils/table/config/configuration.rb +2 -2
  85. data/lib/dev_suite/utils/table/formatter/formatter.rb +12 -0
  86. data/lib/dev_suite/utils/table/formatter.rb +1 -2
  87. data/lib/dev_suite/utils/table/renderer/base.rb +1 -1
  88. data/lib/dev_suite/utils/table/renderer/renderer.rb +16 -0
  89. data/lib/dev_suite/utils/table/renderer.rb +1 -13
  90. data/lib/dev_suite/utils/utils.rb +1 -0
  91. data/lib/dev_suite/version.rb +3 -1
  92. metadata +39 -6
  93. data/lib/dev_suite/utils/construct/config/attribute/manager.rb +0 -63
  94. data/lib/dev_suite/utils/construct/config/attribute/resolver.rb +0 -31
  95. data/lib/dev_suite/utils/construct/config/initializer.rb +0 -21
@@ -3,26 +3,7 @@
3
3
  module DevSuite
4
4
  module Performance
5
5
  module Profiler
6
- require_relative "profiler/base"
7
- require_relative "profiler/execution_time"
8
- require_relative "profiler/memory"
9
-
10
- class << self
11
- def create(profiler)
12
- case profiler
13
- when :execution_time
14
- ExecutionTime.new
15
- when :memory
16
- Memory.new
17
- else
18
- raise ArgumentError, "Invalid profiler: #{profiler}"
19
- end
20
- end
21
-
22
- def create_multiple(profilers)
23
- profilers.map { |profiler| create(profiler) }
24
- end
25
- end
6
+ require_relative "profiler/profiler"
26
7
  end
27
8
  end
28
9
  end
@@ -5,6 +5,7 @@ module DevSuite
5
5
  class ProfilerManager
6
6
  attr_reader :results
7
7
 
8
+ # TODO: building as function in Construct::Component
8
9
  def initialize
9
10
  @results = {}
10
11
  end
@@ -3,7 +3,7 @@
3
3
  module DevSuite
4
4
  module Performance
5
5
  module Reporter
6
- class Base
6
+ class Base < Utils::Construct::Component::Base
7
7
  def generate
8
8
  raise NotImplementedError, "Subclasses must implement the generate method"
9
9
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Performance
5
+ module Reporter
6
+ include Utils::Construct::Component::Manager
7
+
8
+ require_relative "base"
9
+ require_relative "simple"
10
+ require_relative "helpers"
11
+
12
+ register_component(Simple)
13
+ end
14
+ end
15
+ end
@@ -3,20 +3,7 @@
3
3
  module DevSuite
4
4
  module Performance
5
5
  module Reporter
6
- require_relative "reporter/base"
7
- require_relative "reporter/simple"
8
- require_relative "reporter/helpers"
9
-
10
- class << self
11
- def create(reporter)
12
- case reporter
13
- when :simple
14
- Simple.new
15
- else
16
- raise ArgumentError, "Invalid reporter: #{reporter}"
17
- end
18
- end
19
- end
6
+ require_relative "reporter/reporter"
20
7
  end
21
8
  end
22
9
  end
@@ -3,24 +3,28 @@
3
3
  module DevSuite
4
4
  module RequestLogger
5
5
  module Adapter
6
- require "net/http"
6
+ include Utils::Construct::Component::Manager
7
7
 
8
8
  require_relative "base"
9
- require_relative "net_http"
10
9
 
11
10
  class << self
12
- def create(adapter)
13
- case adapter
14
- when :net_http
15
- NetHttp.new
16
- else
17
- raise ArgumentError, "Adapter not found: #{adapter}"
18
- end
11
+ def handle_missing_dependencies(missing_dependencies)
12
+ Config.configuration.delete_option_on_failure(:adapters, :faraday, *missing_dependencies)
19
13
  end
14
+ end
20
15
 
21
- def create_multiple(adapters)
22
- adapters.map { |adapter| create(adapter) }
23
- end
16
+ # Load and register `net/http` adapter
17
+ require "net/http"
18
+ require_relative "net_http"
19
+ register_component(NetHttp)
20
+
21
+ # Load and register `faraday` adapter
22
+ Utils::DependencyLoader.safe_load_dependencies(
23
+ "faraday",
24
+ on_failure: method(:handle_missing_dependencies),
25
+ ) do
26
+ require_relative "faraday"
27
+ register_component(Faraday)
24
28
  end
25
29
  end
26
30
  end
@@ -3,7 +3,7 @@
3
3
  module DevSuite
4
4
  module RequestLogger
5
5
  module Adapter
6
- class Base
6
+ class Base < Utils::Construct::Component::Base
7
7
  def enable
8
8
  raise NotImplementedError
9
9
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module RequestLogger
5
+ module Adapter
6
+ require_relative "middleware/faraday"
7
+
8
+ class Faraday < Base
9
+ def enable
10
+ ::Faraday::Connection.class_eval do
11
+ alias_method(:_original_run_request, :run_request)
12
+
13
+ def run_request(method, url, body, headers, &block)
14
+ env = ::Faraday::Env.new(method, url, body, headers)
15
+ env.request = @request
16
+ env.params = @params
17
+ env.request_body = @request_body
18
+ env.ssl = @ssl
19
+ env.response = @response
20
+
21
+ Middleware::Faraday.new(lambda do |e|
22
+ _original_run_request(e.method, e.url, e.body, e.request_headers, &block)
23
+ end).call(env)
24
+ end
25
+ end
26
+ end
27
+
28
+ def disable
29
+ ::Faraday::Connection.class_eval do
30
+ alias_method(:run_request, :_original_run_request)
31
+ remove_method(:_original_run_request)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module RequestLogger
5
+ module Adapter
6
+ module Middleware
7
+ class Faraday < ::Faraday::Middleware
8
+ def call(env)
9
+ # Log the request details
10
+ Logger.log_request(self, env)
11
+
12
+ # Perform the actual request
13
+ @app.call(env).on_complete do |response_env|
14
+ # Log the response details
15
+ Logger.log_response(self, response_env)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -34,6 +34,7 @@ module DevSuite
34
34
  # Restore the original request method by aliasing it back from _original_request
35
35
  # This effectively removes the logging functionality and returns Net::HTTP to its original state
36
36
  alias_method(:request, :_original_request)
37
+ remove_method(:_original_request)
37
38
  end
38
39
  end
39
40
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module DevSuite
4
4
  module RequestLogger
5
- module Adapter
5
+ module Adapters
6
6
  require_relative "adapter/adapter"
7
7
  end
8
8
  end
@@ -3,7 +3,7 @@
3
3
  module DevSuite
4
4
  module RequestLogger
5
5
  module Config
6
- include Utils::Construct::Config
6
+ include Utils::Construct::Config::Manager
7
7
 
8
8
  require_relative "configuration"
9
9
  end
@@ -3,7 +3,7 @@
3
3
  module DevSuite
4
4
  module RequestLogger
5
5
  module Config
6
- class Configuration < BaseConfiguration
6
+ class Configuration < Utils::Construct::Config::Base
7
7
  set_default_settings(
8
8
  log_headers: true,
9
9
  log_cookies: true,
@@ -16,7 +16,7 @@ module DevSuite
16
16
  private
17
17
 
18
18
  def resolve_adapters(value)
19
- Adapter.create_multiple(value)
19
+ Adapter.build_components(value)
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module RequestLogger
5
+ module Extractor
6
+ class Base < Utils::Construct::Component::Base
7
+ def extract_request(native_request)
8
+ raise NotImplementedError
9
+ end
10
+
11
+ def extract_response(native_response)
12
+ raise NotImplementedError
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module RequestLogger
5
+ module Extractor
6
+ include Utils::Construct::Component::Manager
7
+
8
+ require_relative "base"
9
+ require_relative "net_http"
10
+
11
+ register_component(NetHttp)
12
+
13
+ Utils::DependencyLoader.safe_load_dependencies(
14
+ "faraday",
15
+ on_failure: ->(_) {}, # Empty lambda to do nothing on failure
16
+ ) do
17
+ require_relative "faraday"
18
+ register_component(Faraday)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module RequestLogger
5
+ module Extractor
6
+ class Faraday < Base
7
+ COMPONENT_KEY = ::Faraday::Middleware
8
+
9
+ def extract_request(native_request)
10
+ Request.new(
11
+ method: native_request.method.to_s.upcase,
12
+ url: native_request.url.to_s,
13
+ headers: native_request.request_headers.to_h,
14
+ cookies: extract_cookies(native_request.request_headers),
15
+ body: native_request.body,
16
+ )
17
+ end
18
+
19
+ def extract_response(native_response)
20
+ Response.new(
21
+ status: native_response.status,
22
+ message: native_response.reason_phrase || "",
23
+ headers: native_response.response_headers.to_h,
24
+ body: native_response.body,
25
+ )
26
+ end
27
+
28
+ private
29
+
30
+ def extract_cookies(headers)
31
+ headers = headers.to_h
32
+ headers["Cookie"] ? [headers["Cookie"]] : []
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module RequestLogger
5
+ module Extractor
6
+ class NetHttp < Base
7
+ COMPONENT_KEY = ::Net::HTTP
8
+
9
+ def extract_request(native_request)
10
+ Request.new(
11
+ method: native_request.method,
12
+ url: native_request.uri.to_s,
13
+ headers: native_request.each_header.to_h,
14
+ cookies: extract_cookies(native_request),
15
+ body: native_request.body,
16
+ )
17
+ end
18
+
19
+ def extract_response(native_response)
20
+ Response.new(
21
+ status: native_response.code.to_i,
22
+ message: native_response.message,
23
+ headers: native_response.each_header.to_h,
24
+ body: native_response.body,
25
+ )
26
+ end
27
+
28
+ private
29
+
30
+ def extract_cookies(request)
31
+ request.to_hash["cookie"] || []
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module RequestLogger
5
+ module Extractor
6
+ require_relative "extractor/extractor"
7
+ end
8
+ end
9
+ end
@@ -4,18 +4,20 @@ module DevSuite
4
4
  module RequestLogger
5
5
  module Logger
6
6
  class << self
7
- def log_request(adapter, request)
8
- log_entry(format_request_line(adapter, request), :start)
7
+ def log_request(instance, request)
8
+ request = extract_request(instance, request)
9
+ log_entry(format_request_line(instance, request), :start)
9
10
  log_headers(request) if settings.get(:log_headers)
10
11
  log_cookies(request) if settings.get(:log_cookies)
11
12
  log_body(request.body, "Request") if settings.get(:log_body)
12
13
  end
13
14
 
14
- def log_response(adapter, response)
15
+ def log_response(instance, response)
16
+ response = extract_response(instance, response)
15
17
  status_emoji = determine_status_emoji(response)
16
18
  log_level = determine_log_level(response)
17
19
 
18
- log_entry(format_response_line(adapter, response), status_emoji, log_level)
20
+ log_entry(format_response_line(instance, response), status_emoji, log_level)
19
21
  log_headers(response) if settings.get(:log_headers)
20
22
  log_body(response.body, "Response") if settings.get(:log_body)
21
23
  end
@@ -30,51 +32,43 @@ module DevSuite
30
32
  config.settings
31
33
  end
32
34
 
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
35
+ def extract_request(instance, request)
36
+ extractor = Extractor.build_component_from_instance(instance)
37
+ extractor.extract_request(request)
39
38
  end
40
39
 
41
- def determine_log_level(response)
42
- response_success?(response) ? settings.get(:log_level) : :error
40
+ def extract_response(instance, response)
41
+ extractor = Extractor.build_component_from_instance(instance)
42
+ extractor.extract_response(response)
43
43
  end
44
44
 
45
- def response_success?(response)
46
- response.code.to_i.between?(200, 299)
45
+ def log_entry(message, emoji, level = settings.get(:log_level))
46
+ Utils::Logger.log(message, level: level, emoji: emoji)
47
47
  end
48
48
 
49
- def extract_headers(request)
50
- request.each_header.to_h
49
+ def determine_status_emoji(response)
50
+ response.success? ? :success : :error
51
51
  end
52
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
53
+ def determine_log_level(response)
54
+ response.success? ? settings.get(:log_level) : :error
61
55
  end
62
56
 
63
57
  def format_request_line(adapter, request)
64
- "#{adapter.class} Request: #{request.method} #{request.uri}"
58
+ "#{adapter.class} Request: #{request.method} #{request.url}"
65
59
  end
66
60
 
67
61
  def format_response_line(adapter, response)
68
- "#{adapter.class} Response: #{response.code} #{response.message}"
62
+ "#{adapter.class} Response: #{response.status} #{response.message}"
69
63
  end
70
64
 
71
65
  def log_headers(request)
72
- headers = extract_headers(request)
66
+ headers = request.headers
73
67
  log_entry("Headers: #{headers}", :document) unless headers.empty?
74
68
  end
75
69
 
76
70
  def log_cookies(request)
77
- cookies = extract_cookies(request)
71
+ cookies = request.cookies
78
72
  if cookies.any?
79
73
  log_entry("Cookies: #{cookies.join("; ")}", :cookie)
80
74
  else
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # request_logger/request.rb
4
+
5
+ module DevSuite
6
+ module RequestLogger
7
+ class Request
8
+ attr_reader :method, :url, :headers, :cookies, :body
9
+
10
+ def initialize(method:, url:, headers:, cookies:, body:)
11
+ @method = method
12
+ @url = url
13
+ @headers = headers
14
+ @cookies = cookies
15
+ @body = body
16
+ end
17
+ end
18
+ end
19
+ end
@@ -2,9 +2,12 @@
2
2
 
3
3
  module DevSuite
4
4
  module RequestLogger
5
+ require_relative "request"
6
+ require_relative "response"
5
7
  require_relative "config"
6
8
  require_relative "adapter"
7
9
  require_relative "logger"
10
+ require_relative "extractor"
8
11
 
9
12
  class << self
10
13
  def with_logging(&block)
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ # request_logger/response.rb
4
+
5
+ module DevSuite
6
+ module RequestLogger
7
+ class Response
8
+ attr_reader :status, :message, :headers, :body
9
+
10
+ def initialize(status:, message:, headers:, body:)
11
+ @status = status.to_i # Ensure status is always an integer
12
+ @message = message
13
+ @headers = headers || {} # Default to an empty hash if headers are nil
14
+ @body = body || "" # Default to an empty string if body is nil
15
+ end
16
+
17
+ # Check if the response is successful (2xx status codes)
18
+ def success?
19
+ status.between?(200, 299)
20
+ end
21
+
22
+ # Helper method to fetch specific headers in a case-insensitive way
23
+ def header(key)
24
+ headers[key.to_s.downcase] || headers[key.to_s]
25
+ end
26
+ end
27
+ end
28
+ end
@@ -4,7 +4,7 @@ module DevSuite
4
4
  module Utils
5
5
  module Color
6
6
  module Config
7
- include Construct::Config
7
+ include Construct::Config::Manager
8
8
 
9
9
  require_relative "configuration"
10
10
  end
@@ -4,7 +4,7 @@ module DevSuite
4
4
  module Utils
5
5
  module Color
6
6
  module Config
7
- class Configuration < BaseConfiguration
7
+ class Configuration < Utils::Construct::Config::Base
8
8
  config_attr :strategy,
9
9
  default_value: :theme,
10
10
  type: :symbol,
@@ -18,11 +18,11 @@ module DevSuite
18
18
  private
19
19
 
20
20
  def resolve_strategy(value)
21
- Strategy.create(value)
21
+ Strategy.build_component(value)
22
22
  end
23
23
 
24
24
  def resolve_palette(value)
25
- Palette.create(value)
25
+ Palette.build_component(value)
26
26
  end
27
27
  end
28
28
  end
@@ -4,20 +4,7 @@ module DevSuite
4
4
  module Utils
5
5
  module Color
6
6
  module Palette
7
- class Base
8
- # Define COLORS constant in subclass
9
- # Example:
10
- # COLORS = {
11
- # red: 31,
12
- # green: 32,
13
- # yellow: 33,
14
- # blue: 34,
15
- # pink: 35,
16
- # light_blue: 36,
17
- # white: 37
18
- # }
19
- #
20
-
7
+ class Base < Utils::Construct::Component::Base
21
8
  def colors
22
9
  unless self.class.const_defined?(:COLORS)
23
10
  raise NotImplementedError, "#{self.class} must define COLORS constant"
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ module Palette
7
+ include Construct::Component::Manager
8
+
9
+ require_relative "base"
10
+ require_relative "default"
11
+
12
+ register_component(Default)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -4,19 +4,7 @@ module DevSuite
4
4
  module Utils
5
5
  module Color
6
6
  module Palette
7
- require_relative "palette/base"
8
- require_relative "palette/default"
9
-
10
- class << self
11
- def create(type)
12
- case type
13
- when :default
14
- Default.new
15
- else
16
- raise ArgumentError, "Unknown palette type: #{type}"
17
- end
18
- end
19
- end
7
+ require_relative "palette/palette"
20
8
  end
21
9
  end
22
10
  end
@@ -4,7 +4,7 @@ module DevSuite
4
4
  module Utils
5
5
  module Color
6
6
  module Strategy
7
- class Base
7
+ class Base < Utils::Construct::Component::Base
8
8
  def colorize(text, **kwargs)
9
9
  raise NotImplementedError
10
10
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ module Strategy
7
+ include Construct::Component::Manager
8
+
9
+ require_relative "base"
10
+ require_relative "basic"
11
+ require_relative "rgb"
12
+ require_relative "theme"
13
+
14
+ register_component(Basic)
15
+ register_component(Rgb)
16
+ register_component(Theme)
17
+ end
18
+ end
19
+ end
20
+ end