dev_suite 0.1.2 → 0.1.3
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/Gemfile.lock +1 -1
 - data/lib/dev_suite/directory_tree/renderer/simple.rb +45 -29
 - data/lib/dev_suite/performance/reportor/simple.rb +0 -1
 - data/lib/dev_suite/utils/color/colorizer.rb +25 -0
 - data/lib/dev_suite/utils/color/config.rb +40 -0
 - data/lib/dev_suite/utils/color/palette/base.rb +32 -0
 - data/lib/dev_suite/utils/color/palette/default.rb +22 -0
 - data/lib/dev_suite/utils/color/palette.rb +23 -0
 - data/lib/dev_suite/utils/color/strategy/base.rb +15 -0
 - data/lib/dev_suite/utils/color/strategy/basic.rb +25 -0
 - data/lib/dev_suite/utils/color/strategy/rgb.rb +27 -0
 - data/lib/dev_suite/utils/color/strategy/theme.rb +36 -0
 - data/lib/dev_suite/utils/color/strategy.rb +31 -0
 - data/lib/dev_suite/utils/color.rb +12 -0
 - data/lib/dev_suite/utils/table/column.rb +6 -2
 - data/lib/dev_suite/utils/table/config.rb +26 -2
 - data/lib/dev_suite/utils/table/formatter.rb +12 -0
 - data/lib/dev_suite/utils/table/renderer/simple.rb +1 -6
 - data/lib/dev_suite/utils/table/row.rb +6 -2
 - data/lib/dev_suite/utils/table/table.rb +0 -5
 - data/lib/dev_suite/utils/table.rb +14 -0
 - data/lib/dev_suite/utils.rb +2 -3
 - data/lib/dev_suite/version.rb +1 -1
 - data/lib/dev_suite.rb +1 -0
 - metadata +14 -4
 - data/lib/dev_suite/utils/table/column/column.rb +0 -15
 - data/lib/dev_suite/utils/table/formatter/colorizer.rb +0 -33
 - 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:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 92f5e3450bc8b204f0be7e25db8a863ebd49d4d5a6990cfad7c6d336ccaf7e5e
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 368e6bd01867d4fc92856b8bc4825e1e5bdc2b3b978e3afa0966139f59216f28
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 973f1f20d18eab20229c5df12a304c1370ccbfc56175795c9e55fc6bc2680c0a3a3adae63472bcd3dc15ed964ba4413a5847a55d8fefc28312a119af9b0b91d5
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: f31d767559b8cd4fbfa961cafef17a5cbbcda42a78ee5e012147a96a2652fd8b3417e1184a1e5a60925032aa21b6d256902753c799c322aa48e5240016b6f901
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    
| 
         @@ -10,51 +10,67 @@ module DevSuite 
     | 
|
| 
       10 
10 
     | 
    
         
             
                    private
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                    def build_tree(path)
         
     | 
| 
       13 
     | 
    
         
            -
                      return  
     | 
| 
      
 13 
     | 
    
         
            +
                      return permission_denied_node(path) unless path.readable?
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                       
     | 
| 
       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
         
     | 
| 
      
 15 
     | 
    
         
            +
                      path.directory? ? directory_node(path) : file_node(path)
         
     | 
| 
       25 
16 
     | 
    
         
             
                    rescue Errno::EACCES
         
     | 
| 
       26 
     | 
    
         
            -
                       
     | 
| 
      
 17 
     | 
    
         
            +
                      permission_denied_node(path)
         
     | 
| 
       27 
18 
     | 
    
         
             
                    end
         
     | 
| 
       28 
19 
     | 
    
         | 
| 
       29 
20 
     | 
    
         
             
                    def render_node(node, prefix = "", is_last = true)
         
     | 
| 
       30 
     | 
    
         
            -
                      # Determine if this is the root node based on the prefix content
         
     | 
| 
       31 
21 
     | 
    
         
             
                      is_root = prefix.empty?
         
     | 
| 
      
 22 
     | 
    
         
            +
                      connector = determine_connector(is_root, is_last)
         
     | 
| 
      
 23 
     | 
    
         
            +
                      new_prefix = update_prefix(prefix, is_last)
         
     | 
| 
       32 
24 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                       
     | 
| 
       34 
     | 
    
         
            -
                       
     | 
| 
       35 
     | 
    
         
            -
                        ""
         
     | 
| 
       36 
     | 
    
         
            -
                      else
         
     | 
| 
       37 
     | 
    
         
            -
                        (is_last ? "└── " : "├── ")
         
     | 
| 
       38 
     | 
    
         
            -
                      end
         
     | 
| 
      
 25 
     | 
    
         
            +
                      output = construct_output(node, prefix, connector)
         
     | 
| 
      
 26 
     | 
    
         
            +
                      output += node_suffix(node)
         
     | 
| 
       39 
27 
     | 
    
         | 
| 
       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?
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                      # Recursively render children if it's a directory
         
     | 
| 
       48 
28 
     | 
    
         
             
                      if node.directory? && node.children.any?
         
     | 
| 
       49 
29 
     | 
    
         
             
                        node.children.each_with_index do |child, index|
         
     | 
| 
       50 
30 
     | 
    
         
             
                          output += render_node(child, new_prefix, index == node.children.size - 1)
         
     | 
| 
       51 
31 
     | 
    
         
             
                        end
         
     | 
| 
       52 
     | 
    
         
            -
                      elsif !node.directory?
         
     | 
| 
       53 
     | 
    
         
            -
                        output += "\n"
         
     | 
| 
       54 
32 
     | 
    
         
             
                      end
         
     | 
| 
       55 
33 
     | 
    
         | 
| 
       56 
34 
     | 
    
         
             
                      output
         
     | 
| 
       57 
35 
     | 
    
         
             
                    end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                    def determine_connector(is_root, is_last)
         
     | 
| 
      
 38 
     | 
    
         
            +
                      return "" if is_root
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                      is_last ? "└── " : "├── "
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    def update_prefix(prefix, is_last)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      "#{prefix}#{is_last ? "    " : "|   "}"
         
     | 
| 
      
 45 
     | 
    
         
            +
                    end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    def construct_output(node, prefix, connector)
         
     | 
| 
      
 48 
     | 
    
         
            +
                      "#{prefix}#{connector}#{node.name}"
         
     | 
| 
      
 49 
     | 
    
         
            +
                    end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                    def node_suffix(node)
         
     | 
| 
      
 52 
     | 
    
         
            +
                      node.directory? ? "/\n" : "\n"
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    def directory_node(path)
         
     | 
| 
      
 56 
     | 
    
         
            +
                      dir = Node::Directory.new(path.basename.to_s)
         
     | 
| 
      
 57 
     | 
    
         
            +
                      sorted_children(path).each do |child|
         
     | 
| 
      
 58 
     | 
    
         
            +
                        dir.add_child(build_tree(child))
         
     | 
| 
      
 59 
     | 
    
         
            +
                      end
         
     | 
| 
      
 60 
     | 
    
         
            +
                      dir
         
     | 
| 
      
 61 
     | 
    
         
            +
                    end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                    def file_node(path)
         
     | 
| 
      
 64 
     | 
    
         
            +
                      Node::File.new(path.basename.to_s)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                    def permission_denied_node(path)
         
     | 
| 
      
 68 
     | 
    
         
            +
                      Node::PermissionDenied.new(path.basename.to_s, path.directory?)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                    def sorted_children(path)
         
     | 
| 
      
 72 
     | 
    
         
            +
                      path.children.sort_by { |child| child.basename.to_s.downcase }
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
       58 
74 
     | 
    
         
             
                  end
         
     | 
| 
       59 
75 
     | 
    
         
             
                end
         
     | 
| 
       60 
76 
     | 
    
         
             
              end
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module DevSuite
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Utils
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Color
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class << self
         
     | 
| 
      
 7 
     | 
    
         
            +
                    def colorize(text, **kargs)
         
     | 
| 
      
 8 
     | 
    
         
            +
                      Colorizer.new(Config.configuration).colorize(text, **kargs)
         
     | 
| 
      
 9 
     | 
    
         
            +
                    end
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  class Colorizer
         
     | 
| 
      
 13 
     | 
    
         
            +
                    attr_reader :config
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    def initialize(config = Config.configuration)
         
     | 
| 
      
 16 
     | 
    
         
            +
                      @config = config
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    def colorize(text, **kargs)
         
     | 
| 
      
 20 
     | 
    
         
            +
                      puts @config.strategy.colorize(text, **kargs)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            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,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
         
     | 
| 
         @@ -17,8 +17,32 @@ module DevSuite 
     | 
|
| 
       17 
17 
     | 
    
         
             
                      },
         
     | 
| 
       18 
18 
     | 
    
         
             
                    }.freeze
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                     
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 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)
         
     | 
| 
         @@ -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 
     | 
    
         
            -
                         
     | 
| 
      
 33 
     | 
    
         
            +
                        Utils::Color.colorize(str, color: color)
         
     | 
| 
       39 
34 
     | 
    
         
             
                      end
         
     | 
| 
       40 
35 
     | 
    
         | 
| 
       41 
36 
     | 
    
         
             
                      #
         
     | 
| 
         @@ -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
         
     | 
    
        data/lib/dev_suite/utils.rb
    CHANGED
    
    
    
        data/lib/dev_suite/version.rb
    CHANGED
    
    
    
        data/lib/dev_suite.rb
    CHANGED
    
    
    
        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. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Huy Nguyen
         
     | 
| 
         @@ -83,17 +83,27 @@ files: 
     | 
|
| 
       83 
83 
     | 
    
         
             
            - lib/dev_suite/performance/reportor/base.rb
         
     | 
| 
       84 
84 
     | 
    
         
             
            - lib/dev_suite/performance/reportor/simple.rb
         
     | 
| 
       85 
85 
     | 
    
         
             
            - lib/dev_suite/utils.rb
         
     | 
| 
      
 86 
     | 
    
         
            +
            - lib/dev_suite/utils/color.rb
         
     | 
| 
      
 87 
     | 
    
         
            +
            - lib/dev_suite/utils/color/colorizer.rb
         
     | 
| 
      
 88 
     | 
    
         
            +
            - lib/dev_suite/utils/color/config.rb
         
     | 
| 
      
 89 
     | 
    
         
            +
            - lib/dev_suite/utils/color/palette.rb
         
     | 
| 
      
 90 
     | 
    
         
            +
            - lib/dev_suite/utils/color/palette/base.rb
         
     | 
| 
      
 91 
     | 
    
         
            +
            - lib/dev_suite/utils/color/palette/default.rb
         
     | 
| 
      
 92 
     | 
    
         
            +
            - lib/dev_suite/utils/color/strategy.rb
         
     | 
| 
      
 93 
     | 
    
         
            +
            - lib/dev_suite/utils/color/strategy/base.rb
         
     | 
| 
      
 94 
     | 
    
         
            +
            - lib/dev_suite/utils/color/strategy/basic.rb
         
     | 
| 
      
 95 
     | 
    
         
            +
            - lib/dev_suite/utils/color/strategy/rgb.rb
         
     | 
| 
      
 96 
     | 
    
         
            +
            - lib/dev_suite/utils/color/strategy/theme.rb
         
     | 
| 
      
 97 
     | 
    
         
            +
            - lib/dev_suite/utils/table.rb
         
     | 
| 
       86 
98 
     | 
    
         
             
            - lib/dev_suite/utils/table/column.rb
         
     | 
| 
       87 
     | 
    
         
            -
            - lib/dev_suite/utils/table/column/column.rb
         
     | 
| 
       88 
99 
     | 
    
         
             
            - lib/dev_suite/utils/table/config.rb
         
     | 
| 
       89 
     | 
    
         
            -
            - lib/dev_suite/utils/table/formatter 
     | 
| 
      
 100 
     | 
    
         
            +
            - lib/dev_suite/utils/table/formatter.rb
         
     | 
| 
       90 
101 
     | 
    
         
             
            - lib/dev_suite/utils/table/formatter/column_width_calculator.rb
         
     | 
| 
       91 
102 
     | 
    
         
             
            - lib/dev_suite/utils/table/formatter/text_aligner.rb
         
     | 
| 
       92 
103 
     | 
    
         
             
            - lib/dev_suite/utils/table/renderer.rb
         
     | 
| 
       93 
104 
     | 
    
         
             
            - lib/dev_suite/utils/table/renderer/base.rb
         
     | 
| 
       94 
105 
     | 
    
         
             
            - lib/dev_suite/utils/table/renderer/simple.rb
         
     | 
| 
       95 
106 
     | 
    
         
             
            - lib/dev_suite/utils/table/row.rb
         
     | 
| 
       96 
     | 
    
         
            -
            - lib/dev_suite/utils/table/row/row.rb
         
     | 
| 
       97 
107 
     | 
    
         
             
            - lib/dev_suite/utils/table/table.rb
         
     | 
| 
       98 
108 
     | 
    
         
             
            - lib/dev_suite/version.rb
         
     | 
| 
       99 
109 
     | 
    
         
             
            homepage: https://patrick204nqh.github.io
         
     | 
| 
         @@ -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
         
     |