class ProgressBar::Calculators::Length

Attributes

current_length[RW]
length_override[R]
output[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 8
def initialize(options = {})
  self.length_override = options[:length]
  self.output          = options[:output]
  self.current_length  = nil
end

Public Instance Methods

calculate_length() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 25
def calculate_length
  length_override || terminal_width || 80
end
length() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 14
def length
  current_length || reset_length
end
length_changed?() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 18
def length_changed?
  previous_length     = current_length
  self.current_length = calculate_length

  previous_length != current_length
end
length_override=(other) click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 33
def length_override=(other)
  @length_override ||= ENV['RUBY_PROGRESS_BAR_LENGTH'] || other
  @length_override = @length_override.to_i if @length_override
end
reset_length() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 29
def reset_length
  self.current_length = calculate_length
end

Private Instance Methods

dynamic_width() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 57
def dynamic_width
  if output && output.tty? && output.respond_to?(:winsize)
    dynamic_width_via_output_stream_object
  elsif IO.console
    dynamic_width_via_io_object
  else
    dynamic_width_via_system_calls
  end
end
dynamic_width_stty() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 87
def dynamic_width_stty
  `stty size 2>/dev/null`.split[1].to_i
end
dynamic_width_tput() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 91
def dynamic_width_tput
  `tput cols 2>/dev/null`.to_i
end
dynamic_width_via_io_object() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 78
def dynamic_width_via_io_object
  _rows, columns = IO.console.winsize
  columns
end
dynamic_width_via_output_stream_object() click to toggle source

rubocop:enable Lint/DuplicateMethods

# File lib/ruby-progressbar/calculators/length.rb, line 73
def dynamic_width_via_output_stream_object
  _rows, columns = output.winsize
  columns
end
dynamic_width_via_system_calls() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 83
def dynamic_width_via_system_calls
  dynamic_width_stty.nonzero? || dynamic_width_tput
end
terminal_width() click to toggle source

This code was copied and modified from Rake, available under MIT-LICENSE Copyright © 2003, 2004 Jim Weirich rubocop:disable Style/RescueStandardError

# File lib/ruby-progressbar/calculators/length.rb, line 43
def terminal_width
  return 80 unless unix?

  result = dynamic_width
  (result < 20) ? 80 : result
rescue
  80
end
unix?() click to toggle source
# File lib/ruby-progressbar/calculators/length.rb, line 95
def unix?
  RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
end