dev_suite 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/README.md +2 -2
  4. data/lib/dev_suite/directory_tree/config.rb +39 -0
  5. data/lib/dev_suite/directory_tree/node/directory.rb +0 -2
  6. data/lib/dev_suite/directory_tree/node/file.rb +0 -2
  7. data/lib/dev_suite/directory_tree/node/permission_denied.rb +0 -2
  8. data/lib/dev_suite/directory_tree/node.rb +1 -0
  9. data/lib/dev_suite/directory_tree/renderer/base.rb +12 -5
  10. data/lib/dev_suite/directory_tree/renderer/simple.rb +45 -32
  11. data/lib/dev_suite/directory_tree/renderer.rb +12 -0
  12. data/lib/dev_suite/directory_tree/visualizer.rb +13 -11
  13. data/lib/dev_suite/directory_tree.rb +3 -0
  14. data/lib/dev_suite/performance/analyzer.rb +9 -15
  15. data/lib/dev_suite/performance/profiler/benchmark.rb +0 -1
  16. data/lib/dev_suite/performance/profiler/memory.rb +0 -3
  17. data/lib/dev_suite/performance/profiler.rb +1 -0
  18. data/lib/dev_suite/performance/reportor/simple.rb +0 -3
  19. data/lib/dev_suite/performance/reportor.rb +1 -0
  20. data/lib/dev_suite/performance.rb +3 -0
  21. data/lib/dev_suite/utils/color/colorizer.rb +28 -0
  22. data/lib/dev_suite/utils/color/config.rb +40 -0
  23. data/lib/dev_suite/utils/color/palette/base.rb +32 -0
  24. data/lib/dev_suite/utils/color/palette/default.rb +22 -0
  25. data/lib/dev_suite/utils/color/palette.rb +23 -0
  26. data/lib/dev_suite/utils/color/strategy/base.rb +15 -0
  27. data/lib/dev_suite/utils/color/strategy/basic.rb +25 -0
  28. data/lib/dev_suite/utils/color/strategy/rgb.rb +27 -0
  29. data/lib/dev_suite/utils/color/strategy/theme.rb +36 -0
  30. data/lib/dev_suite/utils/color/strategy.rb +31 -0
  31. data/lib/dev_suite/utils/color.rb +12 -0
  32. data/lib/dev_suite/utils/table/column.rb +6 -2
  33. data/lib/dev_suite/utils/table/config.rb +26 -2
  34. data/lib/dev_suite/utils/table/formatter.rb +12 -0
  35. data/lib/dev_suite/utils/table/renderer/simple.rb +1 -6
  36. data/lib/dev_suite/utils/table/row.rb +6 -2
  37. data/lib/dev_suite/utils/table/table.rb +0 -5
  38. data/lib/dev_suite/utils/table.rb +14 -0
  39. data/lib/dev_suite/utils.rb +2 -3
  40. data/lib/dev_suite/version.rb +1 -1
  41. data/lib/dev_suite.rb +1 -0
  42. metadata +15 -4
  43. data/lib/dev_suite/utils/table/column/column.rb +0 -15
  44. data/lib/dev_suite/utils/table/formatter/colorizer.rb +0 -33
  45. data/lib/dev_suite/utils/table/row/row.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b962be05b7f06443a5620effcba37759712b4a930654f28782280bdcfb975698
4
- data.tar.gz: 3d3987ce785c0211d279a382fcd0dace11ce3e66861629b613e1857ddf9064c5
3
+ metadata.gz: 76f0e8870b8fe2bb1c8af41e541bd09f792662f49c1a869d5ddcf5fd4ae94584
4
+ data.tar.gz: 17a921feedc29e07133ce357fbb3b37ecd15800cd30f4fd3087d62f4a810970d
5
5
  SHA512:
6
- metadata.gz: f5cc89b151a1224cd7fa29c65c05a0d873e400585ad949e5f5b6278bb23aacfda90367036372f659f5596e948217b63cc00a71c71cfcc1a20fe4c72076227257
7
- data.tar.gz: 13998cef95d7658837462bb319f5af0664302eeeb54168fc1fe0c9049f3f287df8887665d27eaf69009789cac71541b3d0e457d3f456ce2af35557d2832b2248
6
+ metadata.gz: a32bb7865ee17f49b639d687950cfafeecc51df0dc9e2e7a7ef62018ea185fd522081f8c7b70c0346d0b77ec4d119030c7e9464cf38f4928dad11ee756baa01a
7
+ data.tar.gz: 668586bdbd2339888ef486a5e2fb424aa0f3532d8fa80e27f92f569e59506b2237852683725560e55109eb93c5af63d51e6333aceea5dcb018604574733be5ef
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dev_suite (0.1.2)
4
+ dev_suite (0.2.0)
5
5
  benchmark (~> 0.1)
6
6
  get_process_mem (~> 0.2)
7
7
 
data/README.md CHANGED
@@ -51,7 +51,7 @@ DevSuite::SomeUtility.do_something
51
51
  ```ruby
52
52
  require 'dev_suite'
53
53
 
54
- DevSuite::Performance::Analyzer.analyze(description: "My Code Block") do
54
+ DevSuite::Performance.analyze(description: "My Code Block") do
55
55
  sum = 0
56
56
  1_000_000.times do |i|
57
57
  sum += i
@@ -93,7 +93,7 @@ DevSuite::SomeUtility.do_something
93
93
  base_path = "/path/to/your/directory"
94
94
 
95
95
  # Perform the visualization
96
- DevSuite::DirectoryTree::Visualizer.visualize(base_path)
96
+ DevSuite::DirectoryTree.visualize(base_path)
97
97
  ```
98
98
 
99
99
  **Example output**
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module DirectoryTree
5
+ class Config
6
+ attr_reader :renderer
7
+
8
+ def initialize(renderer: :simple)
9
+ @renderer = Renderer.create(renderer)
10
+ freeze # Make the instance of this class immutable as well
11
+ end
12
+
13
+ class << self
14
+ #
15
+ # Provide global access to a single instance of Config
16
+ #
17
+ def configuration
18
+ @configuration ||= new
19
+ end
20
+
21
+ #
22
+ # Allow block-based configuration
23
+ #
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
37
+ end
38
+ end
39
+ end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "base"
4
-
5
3
  module DevSuite
6
4
  module DirectoryTree
7
5
  module Node
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "base"
4
-
5
3
  module DevSuite
6
4
  module DirectoryTree
7
5
  module Node
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "base"
4
-
5
3
  module DevSuite
6
4
  module DirectoryTree
7
5
  module Node
@@ -3,6 +3,7 @@
3
3
  module DevSuite
4
4
  module DirectoryTree
5
5
  module Node
6
+ require_relative "node/base"
6
7
  require_relative "node/file"
7
8
  require_relative "node/directory"
8
9
  require_relative "node/permission_denied"
@@ -6,17 +6,24 @@ module DevSuite
6
6
  module DirectoryTree
7
7
  module Renderer
8
8
  class Base
9
- def initialize(base_path)
10
- @base_path = Pathname.new(base_path)
11
- end
9
+ def render(path)
10
+ raise ArgumentError, "Invalid path" unless valid_path?(path)
12
11
 
13
- def render
14
- root = build_tree(@base_path)
12
+ root = build_tree(Pathname.new(path))
15
13
  render_node(root, "", true)
16
14
  end
17
15
 
18
16
  private
19
17
 
18
+ def valid_path?(path)
19
+ [
20
+ path.is_a?(String),
21
+ ::File.exist?(path),
22
+ ::File.directory?(path),
23
+ ::File.readable?(path),
24
+ ].all?
25
+ end
26
+
20
27
  # Builds the tree structure
21
28
  # @param path [Pathname] The path to build the tree from
22
29
  # @return [Node::Base] The root node of the tree
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "base"
4
- require_relative "../node"
5
-
6
3
  module DevSuite
7
4
  module DirectoryTree
8
5
  module Renderer
@@ -10,51 +7,67 @@ module DevSuite
10
7
  private
11
8
 
12
9
  def build_tree(path)
13
- return Node::PermissionDenied.new(path.basename.to_s, path.directory?) unless path.readable?
10
+ return permission_denied_node(path) unless path.readable?
14
11
 
15
- if path.directory?
16
- dir = Node::Directory.new(path.basename.to_s)
17
- children = path.children.sort_by { |child| child.basename.to_s.downcase }
18
- children.each do |child|
19
- dir.add_child(build_tree(child))
20
- end
21
- dir
22
- else
23
- Node::File.new(path.basename.to_s)
24
- end
12
+ path.directory? ? directory_node(path) : file_node(path)
25
13
  rescue Errno::EACCES
26
- Node::PermissionDenied.new(path.basename.to_s, path.directory?)
14
+ permission_denied_node(path)
27
15
  end
28
16
 
29
17
  def render_node(node, prefix = "", is_last = true)
30
- # Determine if this is the root node based on the prefix content
31
18
  is_root = prefix.empty?
19
+ connector = determine_connector(is_root, is_last)
20
+ new_prefix = update_prefix(prefix, is_last)
32
21
 
33
- # Prepare the connector appropriately, omitting it for the root
34
- connector = if is_root
35
- ""
36
- else
37
- (is_last ? "└── " : "├── ")
38
- end
39
-
40
- # Compute the new prefix for children
41
- new_prefix = "#{prefix}#{is_last ? " " : "| "}"
42
-
43
- # Construct the output for the current node, avoiding the connector for the root
44
- output = "#{prefix}#{connector}#{node.name}"
45
- output += "/\n" if node.directory?
22
+ output = construct_output(node, prefix, connector)
23
+ output += node_suffix(node)
46
24
 
47
- # Recursively render children if it's a directory
48
25
  if node.directory? && node.children.any?
49
26
  node.children.each_with_index do |child, index|
50
27
  output += render_node(child, new_prefix, index == node.children.size - 1)
51
28
  end
52
- elsif !node.directory?
53
- output += "\n"
54
29
  end
55
30
 
56
31
  output
57
32
  end
33
+
34
+ def determine_connector(is_root, is_last)
35
+ return "" if is_root
36
+
37
+ is_last ? "└── " : "├── "
38
+ end
39
+
40
+ def update_prefix(prefix, is_last)
41
+ "#{prefix}#{is_last ? " " : "| "}"
42
+ end
43
+
44
+ def construct_output(node, prefix, connector)
45
+ "#{prefix}#{connector}#{node.name}"
46
+ end
47
+
48
+ def node_suffix(node)
49
+ node.directory? ? "/\n" : "\n"
50
+ end
51
+
52
+ def directory_node(path)
53
+ dir = Node::Directory.new(path.basename.to_s)
54
+ sorted_children(path).each do |child|
55
+ dir.add_child(build_tree(child))
56
+ end
57
+ dir
58
+ end
59
+
60
+ def file_node(path)
61
+ Node::File.new(path.basename.to_s)
62
+ end
63
+
64
+ def permission_denied_node(path)
65
+ Node::PermissionDenied.new(path.basename.to_s, path.directory?)
66
+ end
67
+
68
+ def sorted_children(path)
69
+ path.children.sort_by { |child| child.basename.to_s.downcase }
70
+ end
58
71
  end
59
72
  end
60
73
  end
@@ -3,7 +3,19 @@
3
3
  module DevSuite
4
4
  module DirectoryTree
5
5
  module Renderer
6
+ require_relative "renderer/base"
6
7
  require_relative "renderer/simple"
8
+
9
+ class << self
10
+ def create(type)
11
+ case type
12
+ when :simple
13
+ Simple.new
14
+ else
15
+ raise ArgumentError, "Unknown renderer type: #{type}"
16
+ end
17
+ end
18
+ end
7
19
  end
8
20
  end
9
21
  end
@@ -1,25 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "pathname"
4
- require_relative "renderer"
5
4
 
6
5
  module DevSuite
7
6
  module DirectoryTree
8
7
  class Visualizer
9
- class << self
10
- # Visualizes the directory tree
11
- # @param base_path [String] The base path of the directory
12
- def visualize(base_path)
13
- new(base_path).visualize
14
- end
8
+ attr_reader :config
9
+
10
+ def initialize(config = Config.configuration)
11
+ @config = config
15
12
  end
16
13
 
17
- def initialize(base_path, renderer: Renderer::Simple.new(base_path))
18
- @renderer = renderer
14
+ # Visualizes the directory tree
15
+ # @param path [String] The base path of the directory
16
+ def visualize(path)
17
+ puts @config.renderer.render(path)
19
18
  end
19
+ end
20
20
 
21
- def visualize
22
- puts @renderer.render
21
+ class << self
22
+ def visualize(path)
23
+ visualizer = Visualizer.new
24
+ visualizer.visualize(path)
23
25
  end
24
26
  end
25
27
  end
@@ -2,6 +2,9 @@
2
2
 
3
3
  module DevSuite
4
4
  module DirectoryTree
5
+ require_relative "directory_tree/node"
6
+ require_relative "directory_tree/renderer"
5
7
  require_relative "directory_tree/visualizer"
8
+ require_relative "directory_tree/config"
6
9
  end
7
10
  end
@@ -1,23 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "reportor"
4
- require_relative "profiler"
5
-
6
3
  module DevSuite
7
4
  module Performance
8
5
  class Analyzer
9
- class << self
10
- # Generates a performance report
11
- # @param benchmark_result [Benchmark::Tms] The benchmark result
12
- # @param memory_stats [Hash] The memory statistics
13
- def analyze(description: "Block", &block)
14
- raise ArgumentError, "No block given" unless block_given?
15
-
16
- analyzer = new(description: description)
17
- analyzer.analyze(&block)
18
- end
19
- end
20
-
21
6
  def initialize(description: "Block")
22
7
  @description = description
23
8
  @benchmark_profiler = Profiler::Benchmark.new
@@ -29,6 +14,8 @@ module DevSuite
29
14
  # @param block [Proc] The block to be analyzed
30
15
  # @raise [ArgumentError] If no block is given
31
16
  def analyze(&block)
17
+ raise ArgumentError, "No block given" unless block_given?
18
+
32
19
  memory_before = @memory_usage.current
33
20
  benchmark_result = profile_benchmark(&block)
34
21
  memory_after = @memory_usage.current
@@ -61,5 +48,12 @@ module DevSuite
61
48
  reportor.generate
62
49
  end
63
50
  end
51
+
52
+ class << self
53
+ def analyze(description: "Block", &block)
54
+ analyzer = Analyzer.new(description: description)
55
+ analyzer.analyze(&block)
56
+ end
57
+ end
64
58
  end
65
59
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "benchmark"
4
- require_relative "base"
5
4
 
6
5
  module DevSuite
7
6
  module Performance
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "base"
4
- require_relative "../data/memory_usage"
5
-
6
3
  module DevSuite
7
4
  module Performance
8
5
  module Profiler
@@ -3,6 +3,7 @@
3
3
  module DevSuite
4
4
  module Performance
5
5
  module Profiler
6
+ require_relative "profiler/base"
6
7
  require_relative "profiler/benchmark"
7
8
  require_relative "profiler/memory"
8
9
  end
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "base"
4
- require_relative "../../utils"
5
-
6
3
  module DevSuite
7
4
  module Performance
8
5
  module Reportor
@@ -3,6 +3,7 @@
3
3
  module DevSuite
4
4
  module Performance
5
5
  module Reporting
6
+ require_relative "reportor/base"
6
7
  require_relative "reportor/simple"
7
8
  end
8
9
  end
@@ -2,6 +2,9 @@
2
2
 
3
3
  module DevSuite
4
4
  module Performance
5
+ require_relative "performance/data"
6
+ require_relative "performance/profiler"
7
+ require_relative "performance/reportor"
5
8
  require_relative "performance/analyzer"
6
9
  end
7
10
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ class Colorizer
7
+ attr_reader :config
8
+
9
+ def initialize(config = Config.configuration)
10
+ @config = config
11
+ end
12
+
13
+ def colorize(text, **kargs)
14
+ puts @config.strategy.colorize(text, **kargs)
15
+ end
16
+ end
17
+
18
+ class << self
19
+ def colorize(text, **kargs)
20
+ raise ArgumentError, "Text to colorize must be a string" unless text.is_a?(String)
21
+
22
+ colorizer = Colorizer.new
23
+ colorizer.colorize(text, **kargs)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ class Config
7
+ attr_accessor :strategy, :palette
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
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
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
+
21
+ def colors
22
+ unless self.class.const_defined?(:COLORS)
23
+ raise NotImplementedError, "#{self.class} must define COLORS constant"
24
+ end
25
+
26
+ self.class::COLORS
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ module Palette
7
+ class Default < Base
8
+ COLORS = {
9
+ red: 31,
10
+ green: 32,
11
+ yellow: 33,
12
+ blue: 34,
13
+ magenta: 35,
14
+ cyan: 36,
15
+ white: 37,
16
+ default: 39,
17
+ }.freeze
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
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
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ module Strategy
7
+ class Base
8
+ def colorize(text, **kwargs)
9
+ raise NotImplementedError
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ module Strategy
7
+ class Basic < Base
8
+ def colorize(text, color: :default)
9
+ unless valid_color_code?(color)
10
+ raise ArgumentError, "Invalid color code"
11
+ end
12
+
13
+ "\e[#{color}m#{text}\e[0m"
14
+ end
15
+
16
+ private
17
+
18
+ def valid_color_code?(color_code)
19
+ color_code.is_a?(Integer) && color_code.between?(0, 255)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ module Strategy
7
+ class Rgb < Base
8
+ def colorize(text, **kwargs)
9
+ r, g, b = kwargs.values_at(:r, :g, :b)
10
+
11
+ unless valid_rgb?(r, g, b)
12
+ raise ArgumentError, "RGB values must be integers between 0 and 255"
13
+ end
14
+
15
+ "\e[38;2;#{r};#{g};#{b}m#{text}\e[0m"
16
+ end
17
+
18
+ private
19
+
20
+ def valid_rgb?(r, g, b)
21
+ [r, g, b].all? { |value| value.is_a?(Integer) && value.between?(0, 255) }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ module Strategy
7
+ class Theme < Base
8
+ def initialize(palette)
9
+ super()
10
+ @palette = palette
11
+ end
12
+
13
+ def colorize(text, color: :default)
14
+ unless @palette.colors.key?(color)
15
+ raise ArgumentError, "Invalid color key"
16
+ end
17
+
18
+ color_code = @palette.colors[color]
19
+
20
+ unless valid_color_code?(color_code)
21
+ raise ArgumentError, "Invalid color code"
22
+ end
23
+
24
+ "\e[#{color_code}m#{text}\e[0m"
25
+ end
26
+
27
+ private
28
+
29
+ def valid_color_code?(color_code)
30
+ color_code.is_a?(Integer) && color_code.between?(0, 255)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ module Strategy
7
+ require_relative "strategy/base"
8
+ require_relative "strategy/basic"
9
+ require_relative "strategy/rgb"
10
+ require_relative "strategy/theme"
11
+
12
+ class << self
13
+ def create(type, palette: nil)
14
+ case type
15
+ when :basic
16
+ Basic.new
17
+ when :rgb
18
+ Rgb.new
19
+ when :theme
20
+ raise ArgumentError, "Palette is required for theme strategy" unless palette
21
+
22
+ Theme.new(palette)
23
+ else
24
+ raise ArgumentError, "Unknown strategy type: #{type}"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Color
6
+ require_relative "color/colorizer"
7
+ require_relative "color/palette"
8
+ require_relative "color/strategy"
9
+ require_relative "color/config"
10
+ end
11
+ end
12
+ end
@@ -3,8 +3,12 @@
3
3
  module DevSuite
4
4
  module Utils
5
5
  module Table
6
- module Column
7
- require_relative "column/column"
6
+ class Column
7
+ attr_reader :name
8
+
9
+ def initialize(name)
10
+ @name = name
11
+ end
8
12
  end
9
13
  end
10
14
  end
@@ -17,8 +17,32 @@ module DevSuite
17
17
  },
18
18
  }.freeze
19
19
 
20
- def initialize(custom_settings = {})
21
- @settings = deep_merge(DEFAULTS, custom_settings)
20
+ attr_reader :settings
21
+
22
+ def initialize(settings = {})
23
+ @settings = deep_merge(DEFAULTS, settings)
24
+ end
25
+
26
+ class << self
27
+ #
28
+ # Provide global access to a single instance of Config
29
+ #
30
+ def configuration
31
+ @configuration ||= new
32
+ end
33
+
34
+ # Allow block-based configuration
35
+ def configure
36
+ yield(configuration)
37
+ rescue StandardError => e
38
+ handle_configuration_error(e)
39
+ end
40
+
41
+ private
42
+
43
+ def handle_configuration_error(error)
44
+ puts "Configuration error: #{error.message}"
45
+ end
22
46
  end
23
47
 
24
48
  def color_for(key)
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Table
6
+ module Formatter
7
+ require_relative "formatter/column_width_calculator"
8
+ require_relative "formatter/text_aligner"
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,10 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "base"
4
- require_relative "../formatter/text_aligner"
5
- require_relative "../formatter/column_width_calculator"
6
- require_relative "../formatter/colorizer"
7
-
8
3
  module DevSuite
9
4
  module Utils
10
5
  module Table
@@ -35,7 +30,7 @@ module DevSuite
35
30
  # Colorizes the given string with the specified color
36
31
  #
37
32
  def colorize(str, color)
38
- Formatter::Colorizer.colorize(str, color)
33
+ Utils::Color.colorize(str, color: color)
39
34
  end
40
35
 
41
36
  #
@@ -3,8 +3,12 @@
3
3
  module DevSuite
4
4
  module Utils
5
5
  module Table
6
- module Row
7
- require_relative "row/row"
6
+ class Row
7
+ attr_reader :data
8
+
9
+ def initialize(data)
10
+ @data = data
11
+ end
8
12
  end
9
13
  end
10
14
  end
@@ -1,10 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "column/column"
4
- require_relative "row/row"
5
- require_relative "renderer"
6
- require_relative "config"
7
-
8
3
  module DevSuite
9
4
  module Utils
10
5
  module Table
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevSuite
4
+ module Utils
5
+ module Table
6
+ require_relative "table/table"
7
+ require_relative "table/column"
8
+ require_relative "table/row"
9
+ require_relative "table/config"
10
+ require_relative "table/formatter"
11
+ require_relative "table/renderer"
12
+ end
13
+ end
14
+ end
@@ -2,8 +2,7 @@
2
2
 
3
3
  module DevSuite
4
4
  module Utils
5
- require_relative "utils/table/table"
6
- require_relative "utils/table/config"
7
- require_relative "utils/table/renderer/simple"
5
+ require_relative "utils/color"
6
+ require_relative "utils/table"
8
7
  end
9
8
  end
@@ -1,3 +1,3 @@
1
1
  module DevSuite
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/dev_suite.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "dev_suite/version"
4
+ require "dev_suite/utils"
4
5
  require "dev_suite/performance"
5
6
  require "dev_suite/directory_tree"
6
7
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dev_suite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Huy Nguyen
@@ -62,6 +62,7 @@ files:
62
62
  - dev_suite.gemspec
63
63
  - lib/dev_suite.rb
64
64
  - lib/dev_suite/directory_tree.rb
65
+ - lib/dev_suite/directory_tree/config.rb
65
66
  - lib/dev_suite/directory_tree/node.rb
66
67
  - lib/dev_suite/directory_tree/node/base.rb
67
68
  - lib/dev_suite/directory_tree/node/directory.rb
@@ -83,17 +84,27 @@ files:
83
84
  - lib/dev_suite/performance/reportor/base.rb
84
85
  - lib/dev_suite/performance/reportor/simple.rb
85
86
  - lib/dev_suite/utils.rb
87
+ - lib/dev_suite/utils/color.rb
88
+ - lib/dev_suite/utils/color/colorizer.rb
89
+ - lib/dev_suite/utils/color/config.rb
90
+ - lib/dev_suite/utils/color/palette.rb
91
+ - lib/dev_suite/utils/color/palette/base.rb
92
+ - lib/dev_suite/utils/color/palette/default.rb
93
+ - lib/dev_suite/utils/color/strategy.rb
94
+ - lib/dev_suite/utils/color/strategy/base.rb
95
+ - lib/dev_suite/utils/color/strategy/basic.rb
96
+ - lib/dev_suite/utils/color/strategy/rgb.rb
97
+ - lib/dev_suite/utils/color/strategy/theme.rb
98
+ - lib/dev_suite/utils/table.rb
86
99
  - lib/dev_suite/utils/table/column.rb
87
- - lib/dev_suite/utils/table/column/column.rb
88
100
  - lib/dev_suite/utils/table/config.rb
89
- - lib/dev_suite/utils/table/formatter/colorizer.rb
101
+ - lib/dev_suite/utils/table/formatter.rb
90
102
  - lib/dev_suite/utils/table/formatter/column_width_calculator.rb
91
103
  - lib/dev_suite/utils/table/formatter/text_aligner.rb
92
104
  - lib/dev_suite/utils/table/renderer.rb
93
105
  - lib/dev_suite/utils/table/renderer/base.rb
94
106
  - lib/dev_suite/utils/table/renderer/simple.rb
95
107
  - lib/dev_suite/utils/table/row.rb
96
- - lib/dev_suite/utils/table/row/row.rb
97
108
  - lib/dev_suite/utils/table/table.rb
98
109
  - lib/dev_suite/version.rb
99
110
  homepage: https://patrick204nqh.github.io
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DevSuite
4
- module Utils
5
- module Table
6
- class Column
7
- attr_reader :name
8
-
9
- def initialize(name)
10
- @name = name
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DevSuite
4
- module Utils
5
- module Table
6
- module Formatter
7
- class Colorizer
8
- COLORS = {
9
- red: 31,
10
- green: 32,
11
- yellow: 33,
12
- blue: 34,
13
- magenta: 35,
14
- cyan: 36,
15
- white: 37,
16
- default: 39,
17
- }.freeze
18
-
19
- class << self
20
- def code_for(color)
21
- COLORS[color] || COLORS[:default]
22
- end
23
-
24
- def colorize(text, color = :default)
25
- color_code = code_for(color)
26
- "\e[#{color_code}m#{text}\e[0m"
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DevSuite
4
- module Utils
5
- module Table
6
- class Row
7
- attr_reader :data
8
-
9
- def initialize(data)
10
- @data = data
11
- end
12
- end
13
- end
14
- end
15
- end