tty-progressbar 0.14.0 → 0.18.0
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 +5 -5
 - data/CHANGELOG.md +98 -21
 - data/LICENSE.txt +1 -1
 - data/README.md +511 -119
 - data/lib/tty-progressbar.rb +2 -2
 - data/lib/tty/progressbar.rb +216 -87
 - data/lib/tty/progressbar/configuration.rb +124 -16
 - data/lib/tty/progressbar/converter.rb +16 -19
 - data/lib/tty/progressbar/formats.rb +120 -0
 - data/lib/tty/progressbar/formatter.rb +33 -38
 - data/lib/tty/progressbar/formatter/bar.rb +87 -29
 - data/lib/tty/progressbar/formatter/byte_rate.rb +6 -20
 - data/lib/tty/progressbar/formatter/current.rb +4 -19
 - data/lib/tty/progressbar/formatter/current_byte.rb +9 -17
 - data/lib/tty/progressbar/formatter/elapsed.rb +9 -18
 - data/lib/tty/progressbar/formatter/estimated.rb +14 -18
 - data/lib/tty/progressbar/formatter/estimated_time.rb +37 -0
 - data/lib/tty/progressbar/formatter/mean_byte.rb +6 -20
 - data/lib/tty/progressbar/formatter/mean_rate.rb +6 -20
 - data/lib/tty/progressbar/formatter/percent.rb +10 -16
 - data/lib/tty/progressbar/formatter/rate.rb +5 -19
 - data/lib/tty/progressbar/formatter/total.rb +10 -16
 - data/lib/tty/progressbar/formatter/total_byte.rb +14 -18
 - data/lib/tty/progressbar/formatters.rb +53 -0
 - data/lib/tty/progressbar/meter.rb +2 -2
 - data/lib/tty/progressbar/multi.rb +69 -23
 - data/lib/tty/progressbar/pipeline.rb +13 -6
 - data/lib/tty/progressbar/timer.rb +89 -0
 - data/lib/tty/progressbar/version.rb +3 -1
 - metadata +65 -151
 - data/.codeclimate.yml +0 -11
 - data/.gitignore +0 -14
 - data/.rspec +0 -3
 - data/.travis.yml +0 -25
 - data/CODE_OF_CONDUCT.md +0 -74
 - data/Gemfile +0 -14
 - data/Rakefile +0 -8
 - data/appveyor.yml +0 -21
 - data/examples/color.rb +0 -18
 - data/examples/failure.rb +0 -12
 - data/examples/iterator.rb +0 -5
 - data/examples/lazy.rb +0 -6
 - data/examples/multi/main_bar.rb +0 -13
 - data/examples/multi/simple.rb +0 -13
 - data/examples/simple.rb +0 -7
 - data/examples/slow_process.rb +0 -29
 - data/examples/speed.rb +0 -11
 - data/examples/threaded.rb +0 -14
 - data/examples/tokens.rb +0 -12
 - data/spec/spec_helper.rb +0 -50
 - data/spec/unit/advance_spec.rb +0 -25
 - data/spec/unit/clear_spec.rb +0 -17
 - data/spec/unit/complete_spec.rb +0 -16
 - data/spec/unit/converter/to_bytes_spec.rb +0 -47
 - data/spec/unit/converter/to_seconds_spec.rb +0 -15
 - data/spec/unit/converter/to_time_spec.rb +0 -19
 - data/spec/unit/custom_formatter_spec.rb +0 -26
 - data/spec/unit/custom_token_spec.rb +0 -14
 - data/spec/unit/events_spec.rb +0 -33
 - data/spec/unit/finish_spec.rb +0 -15
 - data/spec/unit/formatter/bar_spec.rb +0 -16
 - data/spec/unit/formatter/byte_rate_spec.rb +0 -32
 - data/spec/unit/formatter/current_byte_spec.rb +0 -16
 - data/spec/unit/formatter/current_spec.rb +0 -14
 - data/spec/unit/formatter/elapsed_spec.rb +0 -58
 - data/spec/unit/formatter/estimated_spec.rb +0 -27
 - data/spec/unit/formatter/mean_byte_spec.rb +0 -32
 - data/spec/unit/formatter/mean_rate_spec.rb +0 -31
 - data/spec/unit/formatter/percent_spec.rb +0 -16
 - data/spec/unit/formatter/rate_spec.rb +0 -31
 - data/spec/unit/formatter/total_byte_spec.rb +0 -16
 - data/spec/unit/formatter/total_spec.rb +0 -16
 - data/spec/unit/frequency_spec.rb +0 -27
 - data/spec/unit/head_spec.rb +0 -32
 - data/spec/unit/hide_cursor_spec.rb +0 -27
 - data/spec/unit/inspect_spec.rb +0 -11
 - data/spec/unit/iterate_spec.rb +0 -79
 - data/spec/unit/log_spec.rb +0 -29
 - data/spec/unit/meter_spec.rb +0 -70
 - data/spec/unit/multi/advance_spec.rb +0 -123
 - data/spec/unit/multi/events_spec.rb +0 -115
 - data/spec/unit/multi/finish_spec.rb +0 -41
 - data/spec/unit/multi/line_inset_spec.rb +0 -65
 - data/spec/unit/multi/register_spec.rb +0 -35
 - data/spec/unit/multi/stop_spec.rb +0 -15
 - data/spec/unit/new_spec.rb +0 -66
 - data/spec/unit/pipeline_spec.rb +0 -19
 - data/spec/unit/ratio_spec.rb +0 -31
 - data/spec/unit/reset_spec.rb +0 -31
 - data/spec/unit/resize_spec.rb +0 -35
 - data/spec/unit/set_current_spec.rb +0 -43
 - data/spec/unit/start_spec.rb +0 -14
 - data/spec/unit/stop_spec.rb +0 -19
 - data/spec/unit/update_spec.rb +0 -22
 - data/spec/unit/width_spec.rb +0 -21
 - data/tasks/console.rake +0 -9
 - data/tasks/coverage.rake +0 -9
 - data/tasks/spec.rake +0 -27
 - data/tty-progressbar.gemspec +0 -30
 
| 
         @@ -1,31 +1,25 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require_relative "../formatter"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            module TTY
         
     | 
| 
       4 
6 
     | 
    
         
             
              class ProgressBar
         
     | 
| 
       5 
7 
     | 
    
         
             
                # Used by {Pipeline} to format :percent token
         
     | 
| 
       6 
8 
     | 
    
         
             
                #
         
     | 
| 
       7 
9 
     | 
    
         
             
                # @api private
         
     | 
| 
       8 
10 
     | 
    
         
             
                class PercentFormatter
         
     | 
| 
       9 
     | 
    
         
            -
                   
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  def initialize(progress, *args, &block)
         
     | 
| 
       12 
     | 
    
         
            -
                    @progress = progress
         
     | 
| 
       13 
     | 
    
         
            -
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                  include TTY::ProgressBar::Formatter[/:percent\b/.freeze]
         
     | 
| 
       14 
12 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                  #  
     | 
| 
      
 13 
     | 
    
         
            +
                  # Format :percent token
         
     | 
| 
       16 
14 
     | 
    
         
             
                  #
         
     | 
| 
       17 
     | 
    
         
            -
                  # @param [ 
     | 
| 
      
 15 
     | 
    
         
            +
                  # @param [String] value
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #  the value to format
         
     | 
| 
       18 
17 
     | 
    
         
             
                  #
         
     | 
| 
       19 
     | 
    
         
            -
                  # @ 
     | 
| 
       20 
     | 
    
         
            -
                   
     | 
| 
       21 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       22 
     | 
    
         
            -
                  def matches?(value)
         
     | 
| 
       23 
     | 
    
         
            -
                    !!(value.to_s =~ MATCHER)
         
     | 
| 
       24 
     | 
    
         
            -
                  end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                  def format(value)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 19 
     | 
    
         
            +
                  def call(value)
         
     | 
| 
       27 
20 
     | 
    
         
             
                    percent = @progress.width == 0 ? 100 : (@progress.ratio * 100).to_i
         
     | 
| 
       28 
     | 
    
         
            -
                     
     | 
| 
      
 21 
     | 
    
         
            +
                    display = @progress.indeterminate? ? "-" : percent.to_s
         
     | 
| 
      
 22 
     | 
    
         
            +
                    value.gsub(matcher, "#{display}%")
         
     | 
| 
       29 
23 
     | 
    
         
             
                  end
         
     | 
| 
       30 
24 
     | 
    
         
             
                end # PercentFormatter
         
     | 
| 
       31 
25 
     | 
    
         
             
              end # ProgressBar
         
     | 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            require_relative  
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative "../converter"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative "../formatter"
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            module TTY
         
     | 
| 
       6 
7 
     | 
    
         
             
              class ProgressBar
         
     | 
| 
         @@ -8,22 +9,7 @@ module TTY 
     | 
|
| 
       8 
9 
     | 
    
         
             
                #
         
     | 
| 
       9 
10 
     | 
    
         
             
                # @api private
         
     | 
| 
       10 
11 
     | 
    
         
             
                class RateFormatter
         
     | 
| 
       11 
     | 
    
         
            -
                   
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  def initialize(progress)
         
     | 
| 
       14 
     | 
    
         
            -
                    @progress  = progress
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  # Determines whether this formatter is applied or not.
         
     | 
| 
       18 
     | 
    
         
            -
                  #
         
     | 
| 
       19 
     | 
    
         
            -
                  # @param [Object] value
         
     | 
| 
       20 
     | 
    
         
            -
                  #
         
     | 
| 
       21 
     | 
    
         
            -
                  # @return [Boolean]
         
     | 
| 
       22 
     | 
    
         
            -
                  #
         
     | 
| 
       23 
     | 
    
         
            -
                  # @api private
         
     | 
| 
       24 
     | 
    
         
            -
                  def matches?(value)
         
     | 
| 
       25 
     | 
    
         
            -
                    !!(value.to_s =~ MATCHER)
         
     | 
| 
       26 
     | 
    
         
            -
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
                  include TTY::ProgressBar::Formatter[/:rate/i.freeze]
         
     | 
| 
       27 
13 
     | 
    
         | 
| 
       28 
14 
     | 
    
         
             
                  # Format :rate token
         
     | 
| 
       29 
15 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -31,9 +17,9 @@ module TTY 
     | 
|
| 
       31 
17 
     | 
    
         
             
                  #  the value being formatted
         
     | 
| 
       32 
18 
     | 
    
         
             
                  #
         
     | 
| 
       33 
19 
     | 
    
         
             
                  # @api public
         
     | 
| 
       34 
     | 
    
         
            -
                  def  
     | 
| 
      
 20 
     | 
    
         
            +
                  def call(value)
         
     | 
| 
       35 
21 
     | 
    
         
             
                    formatted = Converter.to_seconds(@progress.rate)
         
     | 
| 
       36 
     | 
    
         
            -
                    value.gsub( 
     | 
| 
      
 22 
     | 
    
         
            +
                    value.gsub(matcher, formatted)
         
     | 
| 
       37 
23 
     | 
    
         
             
                  end
         
     | 
| 
       38 
24 
     | 
    
         
             
                end # RateFormatter
         
     | 
| 
       39 
25 
     | 
    
         
             
              end # ProgressBar
         
     | 
| 
         @@ -1,30 +1,24 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require_relative "../formatter"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            module TTY
         
     | 
| 
       4 
6 
     | 
    
         
             
              class ProgressBar
         
     | 
| 
       5 
7 
     | 
    
         
             
                # Used by {Pipeline} to format :total token
         
     | 
| 
       6 
8 
     | 
    
         
             
                #
         
     | 
| 
       7 
9 
     | 
    
         
             
                # @api private
         
     | 
| 
       8 
10 
     | 
    
         
             
                class TotalFormatter
         
     | 
| 
       9 
     | 
    
         
            -
                   
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  def initialize(progress, *args, &block)
         
     | 
| 
       12 
     | 
    
         
            -
                    @progress = progress
         
     | 
| 
       13 
     | 
    
         
            -
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                  include TTY::ProgressBar::Formatter[/:total\b/i.freeze]
         
     | 
| 
       14 
12 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                  #  
     | 
| 
      
 13 
     | 
    
         
            +
                  # Format :total token
         
     | 
| 
       16 
14 
     | 
    
         
             
                  #
         
     | 
| 
       17 
     | 
    
         
            -
                  # @param [ 
     | 
| 
      
 15 
     | 
    
         
            +
                  # @param [String] value
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #  the value to format
         
     | 
| 
       18 
17 
     | 
    
         
             
                  #
         
     | 
| 
       19 
     | 
    
         
            -
                  # @ 
     | 
| 
       20 
     | 
    
         
            -
                   
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                    !!(value.to_s =~ MATCHER)
         
     | 
| 
       24 
     | 
    
         
            -
                  end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                  def format(value)
         
     | 
| 
       27 
     | 
    
         
            -
                    value.gsub(MATCHER, @progress.total.to_s)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 19 
     | 
    
         
            +
                  def call(value)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    display = @progress.indeterminate? ? "-" : @progress.total.to_s
         
     | 
| 
      
 21 
     | 
    
         
            +
                    value.gsub(matcher, display)
         
     | 
| 
       28 
22 
     | 
    
         
             
                  end
         
     | 
| 
       29 
23 
     | 
    
         
             
                end # TotalFormatter
         
     | 
| 
       30 
24 
     | 
    
         
             
              end # ProgressBar
         
     | 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            require_relative  
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative "../converter"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative "../formatter"
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            module TTY
         
     | 
| 
       6 
7 
     | 
    
         
             
              class ProgressBar
         
     | 
| 
         @@ -8,26 +9,21 @@ module TTY 
     | 
|
| 
       8 
9 
     | 
    
         
             
                #
         
     | 
| 
       9 
10 
     | 
    
         
             
                # @api private
         
     | 
| 
       10 
11 
     | 
    
         
             
                class TotalByteFormatter
         
     | 
| 
       11 
     | 
    
         
            -
                   
     | 
| 
      
 12 
     | 
    
         
            +
                  include TTY::ProgressBar::Formatter[/:total_byte/i.freeze]
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                   
     | 
| 
       14 
     | 
    
         
            -
                    @progress = progress
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  # Determines whether this formatter is applied or not.
         
     | 
| 
       18 
     | 
    
         
            -
                  #
         
     | 
| 
       19 
     | 
    
         
            -
                  # @param [Object] value
         
     | 
| 
      
 14 
     | 
    
         
            +
                  # Format :total_byte token
         
     | 
| 
       20 
15 
     | 
    
         
             
                  #
         
     | 
| 
       21 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 16 
     | 
    
         
            +
                  # @param [String] value
         
     | 
| 
      
 17 
     | 
    
         
            +
                  #  the value to format
         
     | 
| 
       22 
18 
     | 
    
         
             
                  #
         
     | 
| 
       23 
     | 
    
         
            -
                  # @api  
     | 
| 
       24 
     | 
    
         
            -
                  def  
     | 
| 
       25 
     | 
    
         
            -
                     
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                    value.gsub( 
     | 
| 
      
 19 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 20 
     | 
    
         
            +
                  def call(value)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    bytes = if @progress.indeterminate?
         
     | 
| 
      
 22 
     | 
    
         
            +
                              "-B"
         
     | 
| 
      
 23 
     | 
    
         
            +
                            else
         
     | 
| 
      
 24 
     | 
    
         
            +
                              Converter.to_bytes(@progress.total)
         
     | 
| 
      
 25 
     | 
    
         
            +
                            end
         
     | 
| 
      
 26 
     | 
    
         
            +
                    value.gsub(matcher, bytes)
         
     | 
| 
       31 
27 
     | 
    
         
             
                  end
         
     | 
| 
       32 
28 
     | 
    
         
             
                end # TotalByteFormatter
         
     | 
| 
       33 
29 
     | 
    
         
             
              end # ProgressBar
         
     | 
| 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "forwardable"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative "pipeline"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative "formatter/bar"
         
     | 
| 
      
 8 
     | 
    
         
            +
            require_relative "formatter/current"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_relative "formatter/current_byte"
         
     | 
| 
      
 10 
     | 
    
         
            +
            require_relative "formatter/elapsed"
         
     | 
| 
      
 11 
     | 
    
         
            +
            require_relative "formatter/estimated"
         
     | 
| 
      
 12 
     | 
    
         
            +
            require_relative "formatter/estimated_time"
         
     | 
| 
      
 13 
     | 
    
         
            +
            require_relative "formatter/percent"
         
     | 
| 
      
 14 
     | 
    
         
            +
            require_relative "formatter/rate"
         
     | 
| 
      
 15 
     | 
    
         
            +
            require_relative "formatter/byte_rate"
         
     | 
| 
      
 16 
     | 
    
         
            +
            require_relative "formatter/mean_rate"
         
     | 
| 
      
 17 
     | 
    
         
            +
            require_relative "formatter/mean_byte"
         
     | 
| 
      
 18 
     | 
    
         
            +
            require_relative "formatter/total"
         
     | 
| 
      
 19 
     | 
    
         
            +
            require_relative "formatter/total_byte"
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            module TTY
         
     | 
| 
      
 22 
     | 
    
         
            +
              class ProgressBar
         
     | 
| 
      
 23 
     | 
    
         
            +
                class Formatters
         
     | 
| 
      
 24 
     | 
    
         
            +
                  extend Forwardable
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  def_delegators :@pipeline, :decorate, :use
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  # @api private
         
     | 
| 
      
 29 
     | 
    
         
            +
                  def initialize(pipeline = nil)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    @pipeline = pipeline || TTY::ProgressBar::Pipeline.new
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  # Prepare default pipeline formatters
         
     | 
| 
      
 34 
     | 
    
         
            +
                  #
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # @api private
         
     | 
| 
      
 36 
     | 
    
         
            +
                  def load(progress)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::CurrentFormatter.new(progress)
         
     | 
| 
      
 38 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::TotalFormatter.new(progress)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::TotalByteFormatter.new(progress)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::ElapsedFormatter.new(progress)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::EstimatedTimeFormatter.new(progress)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::EstimatedFormatter.new(progress)
         
     | 
| 
      
 43 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::PercentFormatter.new(progress)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::ByteFormatter.new(progress)
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::ByteRateFormatter.new(progress)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::RateFormatter.new(progress)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::MeanRateFormatter.new(progress)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::MeanByteFormatter.new(progress)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    @pipeline.use TTY::ProgressBar::BarFormatter.new(progress)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end # Formatters
         
     | 
| 
      
 52 
     | 
    
         
            +
              end # ProgressBar
         
     | 
| 
      
 53 
     | 
    
         
            +
            end # TTY
         
     | 
| 
         @@ -5,7 +5,7 @@ module TTY 
     | 
|
| 
       5 
5 
     | 
    
         
             
                # Used by {ProgressBar} to measure progress rate per interval
         
     | 
| 
       6 
6 
     | 
    
         
             
                # by default 1s
         
     | 
| 
       7 
7 
     | 
    
         
             
                #
         
     | 
| 
       8 
     | 
    
         
            -
                # @api  
     | 
| 
      
 8 
     | 
    
         
            +
                # @api private
         
     | 
| 
       9 
9 
     | 
    
         
             
                class Meter
         
     | 
| 
       10 
10 
     | 
    
         
             
                  # Create Meter
         
     | 
| 
       11 
11 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -103,7 +103,7 @@ module TTY 
     | 
|
| 
       103 
103 
     | 
    
         
             
                      last_value / (last_at - @start_time)
         
     | 
| 
       104 
104 
     | 
    
         
             
                    end
         
     | 
| 
       105 
105 
     | 
    
         
             
                  end
         
     | 
| 
       106 
     | 
    
         
            -
                   
     | 
| 
      
 106 
     | 
    
         
            +
                  alias avg_rate mean_rate
         
     | 
| 
       107 
107 
     | 
    
         | 
| 
       108 
108 
     | 
    
         
             
                  # Reset the meter by clearing out it's metrics
         
     | 
| 
       109 
109 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -1,9 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            require  
     | 
| 
       4 
     | 
    
         
            -
            require  
     | 
| 
      
 3 
     | 
    
         
            +
            require "forwardable"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "monitor"
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            require_relative  
     | 
| 
      
 6 
     | 
    
         
            +
            require_relative "../progressbar"
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            module TTY
         
     | 
| 
       9 
9 
     | 
    
         
             
              class ProgressBar
         
     | 
| 
         @@ -18,10 +18,12 @@ module TTY 
     | 
|
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                  def_delegators :@bars, :each, :empty?, :length, :[]
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
                  def_delegators :@top_bar, :width, :width=
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
       21 
23 
     | 
    
         
             
                  DEFAULT_INSET = {
         
     | 
| 
       22 
     | 
    
         
            -
                    top:    Gem.win_platform? ?  
     | 
| 
       23 
     | 
    
         
            -
                    middle: Gem.win_platform? ?  
     | 
| 
       24 
     | 
    
         
            -
                    bottom: Gem.win_platform? ?  
     | 
| 
      
 24 
     | 
    
         
            +
                    top:    Gem.win_platform? ? "+ "   : "\u250c ",
         
     | 
| 
      
 25 
     | 
    
         
            +
                    middle: Gem.win_platform? ? "|-- " : "\u251c\u2500\u2500 ",
         
     | 
| 
      
 26 
     | 
    
         
            +
                    bottom: Gem.win_platform? ? "|__ " : "\u2514\u2500\u2500 "
         
     | 
| 
       25 
27 
     | 
    
         
             
                  }.freeze
         
     | 
| 
       26 
28 
     | 
    
         | 
| 
       27 
29 
     | 
    
         
             
                  # Number of currently occupied rows in terminal display
         
     | 
| 
         @@ -51,10 +53,14 @@ module TTY 
     | 
|
| 
       51 
53 
     | 
    
         
             
                    @top_bar = nil
         
     | 
| 
       52 
54 
     | 
    
         
             
                    @top_bar = register(format, observable: false) if format
         
     | 
| 
       53 
55 
     | 
    
         | 
| 
      
 56 
     | 
    
         
            +
                    @width = @options[:width]
         
     | 
| 
      
 57 
     | 
    
         
            +
                    @top_bar.update(width: @width) if @top_bar && @width
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
       54 
59 
     | 
    
         
             
                    @callbacks = {
         
     | 
| 
       55 
60 
     | 
    
         
             
                      progress: [],
         
     | 
| 
       56 
     | 
    
         
            -
                      stopped: 
     | 
| 
       57 
     | 
    
         
            -
                       
     | 
| 
      
 61 
     | 
    
         
            +
                      stopped: [],
         
     | 
| 
      
 62 
     | 
    
         
            +
                      paused: [],
         
     | 
| 
      
 63 
     | 
    
         
            +
                      done: []
         
     | 
| 
       58 
64 
     | 
    
         
             
                    }
         
     | 
| 
       59 
65 
     | 
    
         
             
                  end
         
     | 
| 
       60 
66 
     | 
    
         | 
| 
         @@ -73,7 +79,9 @@ module TTY 
     | 
|
| 
       73 
79 
     | 
    
         
             
                      @bars << bar
         
     | 
| 
       74 
80 
     | 
    
         
             
                      observe(bar) if observable
         
     | 
| 
       75 
81 
     | 
    
         
             
                      if @top_bar
         
     | 
| 
       76 
     | 
    
         
            -
                        @top_bar.update(total: total 
     | 
| 
      
 82 
     | 
    
         
            +
                        @top_bar.update(total: total)
         
     | 
| 
      
 83 
     | 
    
         
            +
                        @top_bar.resume if @top_bar.done?
         
     | 
| 
      
 84 
     | 
    
         
            +
                        @top_bar.update(width: total) unless @width
         
     | 
| 
       77 
85 
     | 
    
         
             
                      end
         
     | 
| 
       78 
86 
     | 
    
         
             
                    end
         
     | 
| 
       79 
87 
     | 
    
         | 
| 
         @@ -98,16 +106,17 @@ module TTY 
     | 
|
| 
       98 
106 
     | 
    
         
             
                  def observe(bar)
         
     | 
| 
       99 
107 
     | 
    
         
             
                    bar.on(:progress, &progress_handler)
         
     | 
| 
       100 
108 
     | 
    
         
             
                       .on(:done) { emit(:done) if complete? }
         
     | 
| 
       101 
     | 
    
         
            -
                       .on(:stopped) 
     | 
| 
      
 109 
     | 
    
         
            +
                       .on(:stopped) { emit(:stopped) if stopped? }
         
     | 
| 
      
 110 
     | 
    
         
            +
                       .on(:paused) { emit(:paused) if paused? }
         
     | 
| 
       102 
111 
     | 
    
         
             
                  end
         
     | 
| 
       103 
112 
     | 
    
         | 
| 
       104 
113 
     | 
    
         
             
                  # Handle the progress event
         
     | 
| 
       105 
114 
     | 
    
         
             
                  #
         
     | 
| 
       106 
115 
     | 
    
         
             
                  # @api private
         
     | 
| 
       107 
116 
     | 
    
         
             
                  def progress_handler
         
     | 
| 
       108 
     | 
    
         
            -
                     
     | 
| 
       109 
     | 
    
         
            -
                      @top_bar.advance if @top_bar
         
     | 
| 
       110 
     | 
    
         
            -
                      emit(:progress)
         
     | 
| 
      
 117 
     | 
    
         
            +
                    ->(progress) do
         
     | 
| 
      
 118 
     | 
    
         
            +
                      @top_bar.advance(progress) if @top_bar
         
     | 
| 
      
 119 
     | 
    
         
            +
                      emit(:progress, progress)
         
     | 
| 
       111 
120 
     | 
    
         
             
                    end
         
     | 
| 
       112 
121 
     | 
    
         
             
                  end
         
     | 
| 
       113 
122 
     | 
    
         | 
| 
         @@ -133,7 +142,7 @@ module TTY 
     | 
|
| 
       133 
142 
     | 
    
         
             
                  # @api public
         
     | 
| 
       134 
143 
     | 
    
         
             
                  def total
         
     | 
| 
       135 
144 
     | 
    
         
             
                    synchronize do
         
     | 
| 
       136 
     | 
    
         
            -
                      (@bars - [@top_bar]). 
     | 
| 
      
 145 
     | 
    
         
            +
                      (@bars - [@top_bar]).map(&:total).reduce(&:+)
         
     | 
| 
       137 
146 
     | 
    
         
             
                    end
         
     | 
| 
       138 
147 
     | 
    
         
             
                  end
         
     | 
| 
       139 
148 
     | 
    
         | 
| 
         @@ -144,7 +153,7 @@ module TTY 
     | 
|
| 
       144 
153 
     | 
    
         
             
                  # @api public
         
     | 
| 
       145 
154 
     | 
    
         
             
                  def current
         
     | 
| 
       146 
155 
     | 
    
         
             
                    synchronize do
         
     | 
| 
       147 
     | 
    
         
            -
                      (@bars - [@top_bar]). 
     | 
| 
      
 156 
     | 
    
         
            +
                      (@bars - [@top_bar]).map(&:current).reduce(&:+)
         
     | 
| 
       148 
157 
     | 
    
         
             
                    end
         
     | 
| 
       149 
158 
     | 
    
         
             
                  end
         
     | 
| 
       150 
159 
     | 
    
         | 
| 
         @@ -155,18 +164,40 @@ module TTY 
     | 
|
| 
       155 
164 
     | 
    
         
             
                  # @api public
         
     | 
| 
       156 
165 
     | 
    
         
             
                  def complete?
         
     | 
| 
       157 
166 
     | 
    
         
             
                    synchronize do
         
     | 
| 
       158 
     | 
    
         
            -
                      (@bars - [@top_bar]). 
     | 
| 
      
 167 
     | 
    
         
            +
                      (@bars - [@top_bar]).all?(&:complete?)
         
     | 
| 
       159 
168 
     | 
    
         
             
                    end
         
     | 
| 
       160 
169 
     | 
    
         
             
                  end
         
     | 
| 
       161 
170 
     | 
    
         | 
| 
       162 
     | 
    
         
            -
                  # Check if  
     | 
| 
      
 171 
     | 
    
         
            +
                  # Check if all of the registered progress bars is stopped
         
     | 
| 
       163 
172 
     | 
    
         
             
                  #
         
     | 
| 
       164 
173 
     | 
    
         
             
                  # @return [Boolean]
         
     | 
| 
       165 
174 
     | 
    
         
             
                  #
         
     | 
| 
       166 
175 
     | 
    
         
             
                  # @api public
         
     | 
| 
       167 
176 
     | 
    
         
             
                  def stopped?
         
     | 
| 
       168 
177 
     | 
    
         
             
                    synchronize do
         
     | 
| 
       169 
     | 
    
         
            -
                      (@bars - [@top_bar]). 
     | 
| 
      
 178 
     | 
    
         
            +
                      (@bars - [@top_bar]).all?(&:stopped?)
         
     | 
| 
      
 179 
     | 
    
         
            +
                    end
         
     | 
| 
      
 180 
     | 
    
         
            +
                  end
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
                  # Check if all bars are stopped or finished
         
     | 
| 
      
 183 
     | 
    
         
            +
                  #
         
     | 
| 
      
 184 
     | 
    
         
            +
                  # @return [Boolean]
         
     | 
| 
      
 185 
     | 
    
         
            +
                  #
         
     | 
| 
      
 186 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 187 
     | 
    
         
            +
                  def done?
         
     | 
| 
      
 188 
     | 
    
         
            +
                    synchronize do
         
     | 
| 
      
 189 
     | 
    
         
            +
                      (@bars - [@top_bar]).all?(&:done?)
         
     | 
| 
      
 190 
     | 
    
         
            +
                    end
         
     | 
| 
      
 191 
     | 
    
         
            +
                  end
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
      
 193 
     | 
    
         
            +
                  # Check if all bars are paused
         
     | 
| 
      
 194 
     | 
    
         
            +
                  #
         
     | 
| 
      
 195 
     | 
    
         
            +
                  # @return [Boolean]
         
     | 
| 
      
 196 
     | 
    
         
            +
                  #
         
     | 
| 
      
 197 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 198 
     | 
    
         
            +
                  def paused?
         
     | 
| 
      
 199 
     | 
    
         
            +
                    synchronize do
         
     | 
| 
      
 200 
     | 
    
         
            +
                      (@bars - [@top_bar]).all?(&:paused?)
         
     | 
| 
       170 
201 
     | 
    
         
             
                    end
         
     | 
| 
       171 
202 
     | 
    
         
             
                  end
         
     | 
| 
       172 
203 
     | 
    
         | 
| 
         @@ -174,14 +205,28 @@ module TTY 
     | 
|
| 
       174 
205 
     | 
    
         
             
                  #
         
     | 
| 
       175 
206 
     | 
    
         
             
                  # @api public
         
     | 
| 
       176 
207 
     | 
    
         
             
                  def stop
         
     | 
| 
       177 
     | 
    
         
            -
                    @bars. 
     | 
| 
      
 208 
     | 
    
         
            +
                    @bars.each(&:stop)
         
     | 
| 
       178 
209 
     | 
    
         
             
                  end
         
     | 
| 
       179 
210 
     | 
    
         | 
| 
       180 
211 
     | 
    
         
             
                  # Finish all progress bars
         
     | 
| 
       181 
212 
     | 
    
         
             
                  #
         
     | 
| 
       182 
213 
     | 
    
         
             
                  # @api public
         
     | 
| 
       183 
214 
     | 
    
         
             
                  def finish
         
     | 
| 
       184 
     | 
    
         
            -
                    @bars. 
     | 
| 
      
 215 
     | 
    
         
            +
                    @bars.each(&:finish)
         
     | 
| 
      
 216 
     | 
    
         
            +
                  end
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
      
 218 
     | 
    
         
            +
                  # Pause all progress bars
         
     | 
| 
      
 219 
     | 
    
         
            +
                  #
         
     | 
| 
      
 220 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 221 
     | 
    
         
            +
                  def pause
         
     | 
| 
      
 222 
     | 
    
         
            +
                    @bars.each(&:pause)
         
     | 
| 
      
 223 
     | 
    
         
            +
                  end
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                  # Resume all progress bars
         
     | 
| 
      
 226 
     | 
    
         
            +
                  #
         
     | 
| 
      
 227 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 228 
     | 
    
         
            +
                  def resume
         
     | 
| 
      
 229 
     | 
    
         
            +
                    @bars.each(&:resume)
         
     | 
| 
       185 
230 
     | 
    
         
             
                  end
         
     | 
| 
       186 
231 
     | 
    
         | 
| 
       187 
232 
     | 
    
         
             
                  # Find the number of characters to move into the line
         
     | 
| 
         @@ -195,7 +240,7 @@ module TTY 
     | 
|
| 
       195 
240 
     | 
    
         
             
                  #
         
     | 
| 
       196 
241 
     | 
    
         
             
                  # @api public
         
     | 
| 
       197 
242 
     | 
    
         
             
                  def line_inset(bar)
         
     | 
| 
       198 
     | 
    
         
            -
                    return  
     | 
| 
      
 243 
     | 
    
         
            +
                    return "" if @top_bar.nil?
         
     | 
| 
       199 
244 
     | 
    
         | 
| 
       200 
245 
     | 
    
         
             
                    case bar.row
         
     | 
| 
       201 
246 
     | 
    
         
             
                    when @top_bar.row
         
     | 
| 
         @@ -215,8 +260,9 @@ module TTY 
     | 
|
| 
       215 
260 
     | 
    
         
             
                  # @api public
         
     | 
| 
       216 
261 
     | 
    
         
             
                  def on(name, &callback)
         
     | 
| 
       217 
262 
     | 
    
         
             
                    unless @callbacks.key?(name)
         
     | 
| 
       218 
     | 
    
         
            -
                      raise ArgumentError, "The event #{name} does not exist. "\
         
     | 
| 
       219 
     | 
    
         
            -
                                           " 
     | 
| 
      
 263 
     | 
    
         
            +
                      raise ArgumentError, "The event #{name} does not exist. " \
         
     | 
| 
      
 264 
     | 
    
         
            +
                                           "Use :progress, :stopped, :paused or " \
         
     | 
| 
      
 265 
     | 
    
         
            +
                                           ":done instead"
         
     | 
| 
       220 
266 
     | 
    
         
             
                    end
         
     | 
| 
       221 
267 
     | 
    
         
             
                    @callbacks[name] << callback
         
     | 
| 
       222 
268 
     | 
    
         
             
                    self
         
     | 
| 
         @@ -1,3 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            module TTY
         
     | 
| 
       2 
4 
     | 
    
         
             
              class ProgressBar
         
     | 
| 
       3 
5 
     | 
    
         
             
                # Used by {ProgressBar} to decorate format string
         
     | 
| 
         @@ -17,24 +19,29 @@ module TTY 
     | 
|
| 
       17 
19 
     | 
    
         
             
                  # Add a new formatter
         
     | 
| 
       18 
20 
     | 
    
         
             
                  #
         
     | 
| 
       19 
21 
     | 
    
         
             
                  # @example
         
     | 
| 
       20 
     | 
    
         
            -
                  #   use(TTY::ProgressBar::TotalFormatter)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  #   use(TTY::ProgressBar::TotalFormatter.new(progress_bar))
         
     | 
| 
       21 
23 
     | 
    
         
             
                  #
         
     | 
| 
       22 
24 
     | 
    
         
             
                  # @api public
         
     | 
| 
       23 
25 
     | 
    
         
             
                  def use(formatter)
         
     | 
| 
       24 
     | 
    
         
            -
                    formatters <<  
     | 
| 
      
 26 
     | 
    
         
            +
                    formatters << formatter
         
     | 
| 
       25 
27 
     | 
    
         
             
                  end
         
     | 
| 
       26 
28 
     | 
    
         | 
| 
       27 
29 
     | 
    
         
             
                  # Decorate the tokenized string with actual values
         
     | 
| 
       28 
30 
     | 
    
         
             
                  #
         
     | 
| 
      
 31 
     | 
    
         
            +
                  # @example
         
     | 
| 
      
 32 
     | 
    
         
            +
                  #   decorate("[:bar] :current :elapsed")
         
     | 
| 
      
 33 
     | 
    
         
            +
                  #
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # @param [String] tokenized
         
     | 
| 
      
 35 
     | 
    
         
            +
                  #   the string with tokens
         
     | 
| 
      
 36 
     | 
    
         
            +
                  #
         
     | 
| 
       29 
37 
     | 
    
         
             
                  # @return [nil]
         
     | 
| 
       30 
38 
     | 
    
         
             
                  #
         
     | 
| 
       31 
39 
     | 
    
         
             
                  # @api private
         
     | 
| 
       32 
     | 
    
         
            -
                  def decorate( 
     | 
| 
      
 40 
     | 
    
         
            +
                  def decorate(tokenized)
         
     | 
| 
       33 
41 
     | 
    
         
             
                    base = tokenized.dup
         
     | 
| 
       34 
42 
     | 
    
         
             
                    formatters.inject(base) do |formatted, formatter|
         
     | 
| 
       35 
     | 
    
         
            -
                       
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                        instance.format(formatted)
         
     | 
| 
      
 43 
     | 
    
         
            +
                      if formatter.respond_to?(:matches?) && formatter.matches?(formatted)
         
     | 
| 
      
 44 
     | 
    
         
            +
                        formatter.(formatted)
         
     | 
| 
       38 
45 
     | 
    
         
             
                      else
         
     | 
| 
       39 
46 
     | 
    
         
             
                        formatted
         
     | 
| 
       40 
47 
     | 
    
         
             
                      end
         
     |