Class: Factorix::Progress::MultiPresenter

Inherits:
Object
  • Object
show all
Defined in:
lib/factorix/progress/multi_presenter.rb

Overview

Multi-progress presenter implementation

This class provides a multi-progress presentation interface using tty-progressbar. It manages multiple progress bars that can be updated concurrently.

Instance Method Summary collapse

Constructor Details

#initialize(title: "Progress", output: $stderr) ⇒ MultiPresenter

Create a new multi-progress presenter

Parameters:

  • title (String) (defaults to: "Progress")

    title of the multi-progress presenter

  • output (IO) (defaults to: $stderr)

    output stream for the progress presenter



16
17
18
19
20
21
22
# File 'lib/factorix/progress/multi_presenter.rb', line 16

def initialize(title: "Progress", output: $stderr)
  @title = title
  @output = output
  @multi = TTY::ProgressBar::Multi.new(@title, output: @output, style: {top: "", middle: "", bottom: ""})
  @presenters = {}
  @mutex = Mutex.new
end

Instance Method Details

#[](name) ⇒ PresenterAdapter?

Get a registered presenter by name

Parameters:

  • name (String, Symbol)

    the identifier used during registration

Returns:



42
# File 'lib/factorix/progress/multi_presenter.rb', line 42

def [](name) = @presenters[name]

#register(name, title:) ⇒ PresenterAdapter

Register a new progress presenter

Parameters:

  • name (String, Symbol)

    unique identifier for this progress presenter

  • title (String)

    title for this specific progress presenter

Returns:



29
30
31
32
33
34
35
36
# File 'lib/factorix/progress/multi_presenter.rb', line 29

def register(name, title:)
  @mutex.synchronize do
    tty_bar = @multi.register("#{title} [:bar] :percent :byte/:total_byte")
    adapter = PresenterAdapter.new(tty_bar, @mutex)
    @presenters[name] = adapter
    adapter
  end
end