dev_suite 0.2.4 → 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.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -5
- data/.vscode/extensions.json +8 -0
- data/.vscode/launch.json +39 -0
- data/.vscode/settings.json +28 -0
- data/Gemfile +6 -1
- data/Gemfile.lock +28 -2
- data/README.md +69 -8
- data/bin/rspec +27 -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/builder/base.rb +1 -1
- data/lib/dev_suite/directory_tree/builder/builder.rb +13 -0
- data/lib/dev_suite/directory_tree/builder.rb +1 -12
- data/lib/dev_suite/directory_tree/config/config.rb +11 -0
- data/lib/dev_suite/directory_tree/config/configuration.rb +34 -0
- data/lib/dev_suite/directory_tree/config.rb +2 -36
- data/lib/dev_suite/directory_tree/directory_tree.rb +0 -3
- data/lib/dev_suite/directory_tree/node/node.rb +12 -0
- data/lib/dev_suite/directory_tree/node.rb +1 -4
- data/lib/dev_suite/directory_tree/renderer/base.rb +1 -7
- data/lib/dev_suite/directory_tree/renderer/renderer.rb +14 -0
- data/lib/dev_suite/directory_tree/renderer.rb +1 -13
- data/lib/dev_suite/directory_tree/visualizer/base.rb +1 -1
- data/lib/dev_suite/directory_tree/visualizer/visualizer.rb +16 -0
- data/lib/dev_suite/directory_tree/visualizer.rb +1 -15
- 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/data/data.rb +9 -0
- data/lib/dev_suite/performance/data.rb +1 -1
- data/lib/dev_suite/performance/profiler/base.rb +1 -1
- data/lib/dev_suite/performance/profiler/profiler.rb +16 -0
- data/lib/dev_suite/performance/profiler.rb +1 -20
- data/lib/dev_suite/performance/profiler_manager.rb +1 -0
- data/lib/dev_suite/performance/{reportor → reporter}/base.rb +2 -2
- 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/reporter/reporter.rb +15 -0
- data/lib/dev_suite/performance/{reportor → reporter}/simple.rb +1 -1
- data/lib/dev_suite/performance/reporter.rb +9 -0
- data/lib/dev_suite/performance.rb +1 -1
- data/lib/dev_suite/request_logger/adapter/adapter.rb +31 -0
- data/lib/dev_suite/request_logger/adapter/base.rb +17 -0
- data/lib/dev_suite/request_logger/adapter/faraday.rb +37 -0
- data/lib/dev_suite/request_logger/adapter/middleware/faraday.rb +22 -0
- data/lib/dev_suite/request_logger/adapter/net_http.rb +43 -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/extractor/base.rb +17 -0
- data/lib/dev_suite/request_logger/extractor/extractor.rb +22 -0
- data/lib/dev_suite/request_logger/extractor/faraday.rb +37 -0
- data/lib/dev_suite/request_logger/extractor/net_http.rb +36 -0
- data/lib/dev_suite/request_logger/extractor.rb +9 -0
- data/lib/dev_suite/request_logger/logger.rb +87 -0
- data/lib/dev_suite/request_logger/request.rb +19 -0
- data/lib/dev_suite/request_logger/request_logger.rb +32 -0
- data/lib/dev_suite/request_logger/response.rb +28 -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/palette/base.rb +1 -14
- data/lib/dev_suite/utils/color/palette/palette.rb +16 -0
- data/lib/dev_suite/utils/color/palette.rb +1 -13
- data/lib/dev_suite/utils/color/strategy/base.rb +1 -1
- data/lib/dev_suite/utils/color/strategy/strategy.rb +20 -0
- data/lib/dev_suite/utils/color/strategy/theme.rb +6 -7
- data/lib/dev_suite/utils/color/strategy.rb +1 -21
- data/lib/dev_suite/utils/color.rb +1 -4
- data/lib/dev_suite/utils/construct/component/base.rb +30 -0
- data/lib/dev_suite/utils/construct/component/component.rb +12 -0
- data/lib/dev_suite/utils/construct/component/initializer.rb +28 -0
- data/lib/dev_suite/utils/construct/component/manager.rb +57 -0
- data/lib/dev_suite/utils/construct/component.rb +11 -0
- data/lib/dev_suite/utils/construct/config/attribute/attr_definition.rb +76 -0
- data/lib/dev_suite/utils/construct/config/attribute/attr_initialization.rb +22 -0
- data/lib/dev_suite/utils/construct/config/attribute/attr_resolving.rb +80 -0
- data/lib/dev_suite/utils/construct/config/attribute/attribute.rb +24 -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 +25 -0
- data/lib/dev_suite/utils/construct/config/config.rb +16 -0
- data/lib/dev_suite/utils/construct/config/dependency_handler.rb +56 -0
- data/lib/dev_suite/utils/construct/config/hook/hook.rb +22 -0
- data/lib/dev_suite/utils/construct/config/hook/hook_registry.rb +24 -0
- data/lib/dev_suite/utils/construct/config/hook/hook_runner.rb +20 -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/manager.rb +41 -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 +10 -0
- data/lib/dev_suite/utils/construct.rb +16 -0
- data/lib/dev_suite/utils/dependency_loader.rb +71 -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/loader.rb +41 -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 +13 -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/formatter/formatter.rb +12 -0
- data/lib/dev_suite/utils/table/formatter.rb +1 -2
- data/lib/dev_suite/utils/table/renderer/base.rb +1 -7
- data/lib/dev_suite/utils/table/renderer/renderer.rb +16 -0
- data/lib/dev_suite/utils/table/renderer/simple.rb +9 -5
- data/lib/dev_suite/utils/table/renderer.rb +1 -13
- 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 +15 -0
- data/lib/dev_suite/utils.rb +1 -3
- data/lib/dev_suite/version.rb +3 -1
- data/lib/dev_suite.rb +1 -10
- metadata +101 -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,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module Emoji
|
|
6
|
+
# Status-related emojis
|
|
7
|
+
STATUS = {
|
|
8
|
+
start: "🚀",
|
|
9
|
+
success: "✅",
|
|
10
|
+
error: "🚨❌",
|
|
11
|
+
retry: "💥",
|
|
12
|
+
warning: "⚠️", # For warnings
|
|
13
|
+
caution: "🟡", # For caution or proceed with care
|
|
14
|
+
}.freeze
|
|
15
|
+
|
|
16
|
+
# Action-related emojis
|
|
17
|
+
ACTIONS = {
|
|
18
|
+
update: "🔄", # For updates or changes
|
|
19
|
+
fix: "🔧", # For fixes or repairs
|
|
20
|
+
bug: "🐞", # For bugs or issues
|
|
21
|
+
code: "💻", # For code or technical content
|
|
22
|
+
}.freeze
|
|
23
|
+
|
|
24
|
+
# Notification-related emojis
|
|
25
|
+
NOTIFICATIONS = {
|
|
26
|
+
info: "ℹ️",
|
|
27
|
+
important: "❗",
|
|
28
|
+
note: "📝", # For notes or annotations
|
|
29
|
+
tip: "💡", # For tips or helpful hints
|
|
30
|
+
}.freeze
|
|
31
|
+
|
|
32
|
+
# Resource-related emojis
|
|
33
|
+
RESOURCES = {
|
|
34
|
+
document: "📄", # For representing documents or files
|
|
35
|
+
network: "🌐", # For network-related logs
|
|
36
|
+
database: "💾", # For database-related logs
|
|
37
|
+
cache: "🗄️", # For cache-related logs
|
|
38
|
+
file: "📁", # For file-related logs
|
|
39
|
+
cookie: "🍪", # For cookie-related logs
|
|
40
|
+
header: "📑", # For header-related logs
|
|
41
|
+
request: "📤", # For request-related logs
|
|
42
|
+
response: "📥", # For response-related logs
|
|
43
|
+
}.freeze
|
|
44
|
+
|
|
45
|
+
DEFAULT_EMOJI = "❓"
|
|
46
|
+
|
|
47
|
+
EMOJIS = STATUS.merge(ACTIONS).merge(NOTIFICATIONS).merge(RESOURCES).freeze
|
|
48
|
+
|
|
49
|
+
class << self
|
|
50
|
+
# Returns the emoji corresponding to the given key.
|
|
51
|
+
# @param key [Symbol] the key to look up the emoji
|
|
52
|
+
# @param default [String] the default emoji if the key is not found
|
|
53
|
+
# @return [String] the corresponding emoji or the default emoji
|
|
54
|
+
def get(key, default: DEFAULT_EMOJI)
|
|
55
|
+
EMOJIS[key] || default
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Returns all emojis categorized by their purpose.
|
|
59
|
+
# @return [Hash] a hash containing all emojis organized by categories.
|
|
60
|
+
def all
|
|
61
|
+
{
|
|
62
|
+
status: STATUS,
|
|
63
|
+
actions: ACTIONS,
|
|
64
|
+
notifications: NOTIFICATIONS,
|
|
65
|
+
resources: RESOURCES,
|
|
66
|
+
}
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module ErrorHandler
|
|
6
|
+
extend self # This makes all instance methods behave like class methods
|
|
7
|
+
|
|
8
|
+
def handle_error(error)
|
|
9
|
+
Utils::Logger.log(
|
|
10
|
+
"Oops! An error occurred: #{error.message}",
|
|
11
|
+
level: :error,
|
|
12
|
+
emoji: :error,
|
|
13
|
+
)
|
|
14
|
+
Utils::Logger.log(
|
|
15
|
+
"For more information, please refer to the README: " \
|
|
16
|
+
"https://github.com/patrick204nqh/dev_suite",
|
|
17
|
+
level: :error,
|
|
18
|
+
emoji: :document,
|
|
19
|
+
)
|
|
20
|
+
# exit(1)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module FileLoader
|
|
6
|
+
module Config
|
|
7
|
+
class Configuration < Utils::Construct::Config::Base
|
|
8
|
+
config_attr :loaders, default_value: [:text, :json, :yaml], type: :array
|
|
9
|
+
|
|
10
|
+
register_hook :after_initialize do
|
|
11
|
+
setup_registry
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Expose the registry as a read-only attribute
|
|
15
|
+
attr_reader :registry
|
|
16
|
+
|
|
17
|
+
# Setup the registry based on the current loaders
|
|
18
|
+
def setup_registry
|
|
19
|
+
@registry = LoaderRegistry.new
|
|
20
|
+
update_registry(loaders)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Update the registry with the provided loaders
|
|
24
|
+
def update_registry(loaders)
|
|
25
|
+
@registry ||= LoaderRegistry.new
|
|
26
|
+
@registry.clear # Clear the existing registry
|
|
27
|
+
Loader.registry_loaders(@registry, loaders)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module FileLoader
|
|
6
|
+
require "pathname"
|
|
7
|
+
require "json"
|
|
8
|
+
require "yaml"
|
|
9
|
+
|
|
10
|
+
require_relative "loader"
|
|
11
|
+
require_relative "loader_registry"
|
|
12
|
+
require_relative "loader_manager"
|
|
13
|
+
require_relative "config"
|
|
14
|
+
|
|
15
|
+
class << self
|
|
16
|
+
def load(path)
|
|
17
|
+
loader = LoaderManager.new
|
|
18
|
+
loader.load(path)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module FileLoader
|
|
6
|
+
module Loader
|
|
7
|
+
class Base < Utils::Construct::Component::Base
|
|
8
|
+
class << self
|
|
9
|
+
def extensions
|
|
10
|
+
raise NotImplementedError, "You must implement the extensions method"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def load(_path)
|
|
15
|
+
raise NotImplementedError, "You must implement the load method"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module FileLoader
|
|
6
|
+
module Loader
|
|
7
|
+
class Json < Base
|
|
8
|
+
class << self
|
|
9
|
+
def extensions
|
|
10
|
+
["json"]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def load(path)
|
|
15
|
+
::JSON.parse(::File.read(path))
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module FileLoader
|
|
6
|
+
module Loader
|
|
7
|
+
require_relative "base"
|
|
8
|
+
require_relative "text"
|
|
9
|
+
require_relative "json"
|
|
10
|
+
require_relative "yaml"
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
def registry_loaders(registry, loader_symbols)
|
|
14
|
+
loader_classes = map_loaders(loader_symbols)
|
|
15
|
+
loader_classes.each do |loader|
|
|
16
|
+
registry.register(loader)
|
|
17
|
+
end
|
|
18
|
+
registry
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def map_loaders(loader_symbols)
|
|
24
|
+
loader_symbols.map do |symbol|
|
|
25
|
+
case symbol
|
|
26
|
+
when :json
|
|
27
|
+
Loader::Json
|
|
28
|
+
when :text
|
|
29
|
+
Loader::Text
|
|
30
|
+
when :yaml
|
|
31
|
+
Loader::Yaml
|
|
32
|
+
else
|
|
33
|
+
raise "Unknown loader: #{symbol}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module FileLoader
|
|
6
|
+
module Loader
|
|
7
|
+
class Text < Base
|
|
8
|
+
class << self
|
|
9
|
+
def extensions
|
|
10
|
+
["txt"]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def load(path)
|
|
15
|
+
::File.read(path)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module FileLoader
|
|
6
|
+
module Loader
|
|
7
|
+
class Yaml < Base
|
|
8
|
+
class << self
|
|
9
|
+
def extensions
|
|
10
|
+
["yml", "yaml"]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def load(path, safe: true)
|
|
15
|
+
validate_file_existence!(path)
|
|
16
|
+
parse_yaml_file(path, safe)
|
|
17
|
+
rescue ::Psych::SyntaxError => e
|
|
18
|
+
handle_yaml_parsing_error(path, e)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def validate_file_existence!(path)
|
|
24
|
+
raise "File not found: #{path}" unless ::File.exist?(path)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def parse_yaml_file(path, safe)
|
|
28
|
+
safe ? ::YAML.safe_load_file(path) : ::YAML.load_file(path)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def handle_yaml_parsing_error(path, error)
|
|
32
|
+
raise "YAML parsing error in file #{path}: #{error.message}"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module FileLoader
|
|
6
|
+
class LoaderManager
|
|
7
|
+
def load(path)
|
|
8
|
+
loader = find_loader_for(path)
|
|
9
|
+
loader.load(path)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def find_loader_for(path)
|
|
15
|
+
extension = extract_extension(path)
|
|
16
|
+
loader = registry.find_loader(extension)
|
|
17
|
+
raise LoaderNotFoundError, "No loader registered for #{extension}" unless loader
|
|
18
|
+
|
|
19
|
+
loader
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def extract_extension(path)
|
|
23
|
+
::File.extname(path).delete_prefix(".")
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def registry
|
|
27
|
+
Config.configuration.registry
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class LoaderNotFoundError < StandardError; end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module FileLoader
|
|
6
|
+
class LoaderRegistry
|
|
7
|
+
def initialize
|
|
8
|
+
@registry = {}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def register(loader_class)
|
|
12
|
+
loader = loader_class.new
|
|
13
|
+
loader_class.extensions.each do |ext|
|
|
14
|
+
@registry[ext] = loader
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def clear
|
|
19
|
+
@registry.clear
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def find_loader(extension)
|
|
23
|
+
@registry[extension]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def registered_extensions
|
|
27
|
+
@registry.keys
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def registered_loaders
|
|
31
|
+
@registry.values.uniq
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module Logger
|
|
6
|
+
LOG_DETAILS = {
|
|
7
|
+
info: { prefix: "[INFO]", color: :green },
|
|
8
|
+
warn: { prefix: "[WARNING]", color: :yellow },
|
|
9
|
+
error: { prefix: "[ERROR]", color: :red },
|
|
10
|
+
debug: { prefix: "[DEBUG]", color: :blue },
|
|
11
|
+
}.freeze
|
|
12
|
+
|
|
13
|
+
class << self
|
|
14
|
+
# Logs a message with an optional emoji and specified log level.
|
|
15
|
+
#
|
|
16
|
+
# @param message [String] The message to log.
|
|
17
|
+
# @param level [Symbol] The log level (:info, :warn, :error, :debug).
|
|
18
|
+
# @param emoji [String, Symbol] Optional emoji to prepend to the message.
|
|
19
|
+
def log(message, level: :info, emoji: nil)
|
|
20
|
+
emoji_icon = resolve_emoji(emoji)
|
|
21
|
+
formatted_message = format_message("#{emoji_icon} #{message}", level)
|
|
22
|
+
output_log(formatted_message)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
# Resolves the emoji, either from a symbol or directly as a string.
|
|
28
|
+
#
|
|
29
|
+
# @param emoji [String, Symbol, nil] The emoji or its symbol key.
|
|
30
|
+
# @return [String] The resolved emoji or an empty string if none is provided.
|
|
31
|
+
def resolve_emoji(emoji)
|
|
32
|
+
return "" unless emoji
|
|
33
|
+
|
|
34
|
+
emoji.is_a?(Symbol) ? Emoji.get(emoji) : emoji
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Formats the log message with the appropriate prefix and color.
|
|
38
|
+
#
|
|
39
|
+
# @param message [String] The message to format.
|
|
40
|
+
# @param level [Symbol] The log level (:info, :warn, :error, :debug).
|
|
41
|
+
# @return [String] The formatted log message.
|
|
42
|
+
def format_message(message, level)
|
|
43
|
+
details = LOG_DETAILS[level]
|
|
44
|
+
raise ArgumentError, "Invalid log level: #{level}" unless details
|
|
45
|
+
|
|
46
|
+
Utils::Color.colorize("#{details[:prefix]} #{message}", color: details[:color])
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Outputs the formatted log message to the console.
|
|
50
|
+
#
|
|
51
|
+
# @param formatted_message [String] The message to output.
|
|
52
|
+
def output_log(formatted_message)
|
|
53
|
+
puts formatted_message if formatted_message
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module PathMatcher
|
|
6
|
+
class Matcher
|
|
7
|
+
def initialize(includes: [], excludes: [])
|
|
8
|
+
@include_patterns = includes.map { |pattern| Pattern.new(pattern) }
|
|
9
|
+
@exclude_patterns = excludes.map { |pattern| Pattern.new(pattern) }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def match?(path)
|
|
13
|
+
return false if excluded?(path)
|
|
14
|
+
return true if included?(path)
|
|
15
|
+
|
|
16
|
+
false
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def included?(path)
|
|
22
|
+
@include_patterns.empty? || @include_patterns.any? { |pattern| pattern.match?(path) }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def excluded?(path)
|
|
26
|
+
@exclude_patterns.any? { |pattern| pattern.match?(path) }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module PathMatcher
|
|
6
|
+
require_relative "pattern"
|
|
7
|
+
require_relative "matcher"
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
def match?(path, includes: [], excludes: [])
|
|
11
|
+
matcher = Matcher.new(includes: includes, excludes: excludes)
|
|
12
|
+
matcher.match?(path)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module PathMatcher
|
|
6
|
+
class Pattern
|
|
7
|
+
def initialize(pattern)
|
|
8
|
+
@regex = convert_to_regex(pattern)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def match?(path)
|
|
12
|
+
!!(@regex =~ path)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def convert_to_regex(pattern)
|
|
18
|
+
# Escape all regex special characters except '*'
|
|
19
|
+
pattern = Regexp.escape(pattern).gsub('\*', "*")
|
|
20
|
+
|
|
21
|
+
# Convert glob patterns to regex:
|
|
22
|
+
# - '**/' matches any directory level
|
|
23
|
+
# - '*.txt' matches any .txt file in any directory
|
|
24
|
+
pattern = pattern.gsub("**", ".*") # ** -> .*
|
|
25
|
+
pattern = pattern.gsub("*", "[^/]*") # * -> [^/]*
|
|
26
|
+
|
|
27
|
+
# Allow '*.txt' to match any .txt file in any directory by prefixing with '.*'
|
|
28
|
+
pattern = ".*#{pattern}" unless pattern.start_with?(".*")
|
|
29
|
+
|
|
30
|
+
Regexp.new("^#{pattern}$")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module Table
|
|
6
|
+
module Config
|
|
7
|
+
class Configuration < Utils::Construct::Config::Base
|
|
8
|
+
set_default_settings(
|
|
9
|
+
colors: {
|
|
10
|
+
title: :cyan,
|
|
11
|
+
column: :yellow,
|
|
12
|
+
row: :default,
|
|
13
|
+
border: :blue,
|
|
14
|
+
},
|
|
15
|
+
# alignments: {
|
|
16
|
+
# column: :left,
|
|
17
|
+
# row: :left,
|
|
18
|
+
# },
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
config_attr :renderer, default_value: :simple, type: :symbol, resolver: :resolve_renderer
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def resolve_renderer(value)
|
|
26
|
+
Renderer.build_component(value)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -3,29 +3,8 @@
|
|
|
3
3
|
module DevSuite
|
|
4
4
|
module Utils
|
|
5
5
|
module Table
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
DEFAULT_SETTING = {
|
|
10
|
-
colors: {
|
|
11
|
-
title: :cyan,
|
|
12
|
-
column: :yellow,
|
|
13
|
-
row: :default,
|
|
14
|
-
border: :blue,
|
|
15
|
-
},
|
|
16
|
-
alignments: {
|
|
17
|
-
column: :left,
|
|
18
|
-
row: :left,
|
|
19
|
-
},
|
|
20
|
-
}.freeze
|
|
21
|
-
|
|
22
|
-
attr_reader :settings, :renderer
|
|
23
|
-
|
|
24
|
-
def initialize(settings: {}, renderer: :simple)
|
|
25
|
-
@settings = Settings.new(settings)
|
|
26
|
-
@renderer = Renderer.create(renderer, settings: @settings)
|
|
27
|
-
freeze
|
|
28
|
-
end
|
|
6
|
+
module Config
|
|
7
|
+
require_relative "config/config"
|
|
29
8
|
end
|
|
30
9
|
end
|
|
31
10
|
end
|