dev_suite 0.2.3 → 0.2.5
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/.github/workflows/ci.yml +37 -0
- data/Gemfile +13 -6
- data/Gemfile.lock +9 -1
- data/README.md +66 -2
- data/dev_suite.gemspec +1 -0
- data/lib/dev_suite/cli/commands/base.rb +0 -30
- data/lib/dev_suite/cli/commands/tree.rb +29 -8
- data/lib/dev_suite/cli/commands/version.rb +1 -1
- data/lib/dev_suite/cli/main.rb +12 -9
- 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 -11
- data/lib/dev_suite/directory_tree/directory_tree.rb +20 -0
- data/lib/dev_suite/directory_tree/renderer/base.rb +0 -6
- data/lib/dev_suite/directory_tree/renderer/simple.rb +3 -3
- data/lib/dev_suite/directory_tree/visualizer/base.rb +13 -0
- data/lib/dev_suite/directory_tree/visualizer/tree.rb +50 -0
- data/lib/dev_suite/directory_tree/visualizer.rb +14 -13
- data/lib/dev_suite/directory_tree.rb +1 -8
- 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 -10
- 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 -8
- metadata +72 -13
- data/lib/dev_suite/directory_tree/settings.rb +0 -29
- data/lib/dev_suite/performance/reportor.rb +0 -22
- data/lib/dev_suite/utils/config_tools/configuration.rb +0 -41
- data/lib/dev_suite/utils/config_tools/settings.rb +0 -75
- data/lib/dev_suite/utils/config_tools.rb +0 -10
- data/lib/dev_suite/utils/table/settings.rb +0 -34
|
@@ -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
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module Construct
|
|
6
|
+
module Config
|
|
7
|
+
module Settings
|
|
8
|
+
class Base
|
|
9
|
+
def initialize(settings = {})
|
|
10
|
+
@default_settings = settings
|
|
11
|
+
@settings = merge_settings(@default_settings, settings)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def set(*keys, value)
|
|
15
|
+
key_path = normalize_keys(keys)
|
|
16
|
+
last_key = key_path.pop
|
|
17
|
+
target = key_path.each_with_object(@settings) do |key, nested|
|
|
18
|
+
nested[key] ||= {}
|
|
19
|
+
end
|
|
20
|
+
target[last_key] = value
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def get(*keys)
|
|
24
|
+
key_path = normalize_keys(keys)
|
|
25
|
+
key_path.reduce(@settings) do |nested, key|
|
|
26
|
+
nested.is_a?(Hash) ? nested[key] : nil
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def reset!
|
|
31
|
+
@settings = @default_settings
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def normalize_keys(keys)
|
|
37
|
+
key_path = keys.flatten
|
|
38
|
+
if key_path.size == 1 && key_path.first.is_a?(String)
|
|
39
|
+
key_path.first.to_s.split(".").map(&:to_sym)
|
|
40
|
+
else
|
|
41
|
+
key_path.map(&:to_sym)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def merge_settings(defaults, overrides)
|
|
46
|
+
defaults.merge(overrides) do |_key, oldval, newval|
|
|
47
|
+
if oldval.is_a?(Hash) && newval.is_a?(Hash)
|
|
48
|
+
merge_settings(oldval, newval)
|
|
49
|
+
else
|
|
50
|
+
newval
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module Construct
|
|
6
|
+
module Config
|
|
7
|
+
module Settings
|
|
8
|
+
module Manager
|
|
9
|
+
class << self
|
|
10
|
+
def included(base)
|
|
11
|
+
base.extend(ClassMethods)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module ClassMethods
|
|
16
|
+
# Ensure that default configuration attributes are applied to subclasses.
|
|
17
|
+
def inherited(subclass)
|
|
18
|
+
subclass.set_default_settings
|
|
19
|
+
super
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Define default settings for the class.
|
|
23
|
+
def set_default_settings(settings = {})
|
|
24
|
+
config_attr(:settings, default_value: settings, type: :hash, resolver: :resolve_settings)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def resolve_settings(value)
|
|
31
|
+
Base.new(value)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DevSuite
|
|
4
|
+
module Utils
|
|
5
|
+
module Construct
|
|
6
|
+
# The Construct module serves as a namespace for reusable constructs that
|
|
7
|
+
# provide foundational utilities, such as configuration management, which
|
|
8
|
+
# can be included in other modules throughout the DevSuite framework.
|
|
9
|
+
#
|
|
10
|
+
# This module centralizes shared functionality to promote code reuse,
|
|
11
|
+
# maintainability, and consistency across different modules.
|
|
12
|
+
|
|
13
|
+
require_relative "construct/construct"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -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 < BaseConfiguration
|
|
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
|
|
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,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
|