Class: Aircana::ProgressTracker

Inherits:
Object
  • Object
show all
Defined in:
lib/aircana/progress_tracker.rb

Class Method Summary collapse

Class Method Details

.create_and_use_progress_bar(total, message) {|bar| ... } ⇒ Object

Yields:

  • (bar)


28
29
30
31
32
33
34
35
36
# File 'lib/aircana/progress_tracker.rb', line 28

def self.create_and_use_progress_bar(total, message)
  bar = TTY::ProgressBar.new(
    "#{message} [:bar] :current/:total (:percent) :elapsed",
    total: total,
    bar_format: :box
  )
  yield(bar)
  bar
end

.process_batch_with_progress(items, total, message) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'lib/aircana/progress_tracker.rb', line 45

def self.process_batch_with_progress(items, total, message)
  with_progress_bar(total, message) do |bar|
    items.each_with_index do |item, index|
      result = yield(item, index)
      bar.advance(1)
      result
    end
  end
end

.with_batch_progress(items, message) ⇒ Object



38
39
40
41
42
43
# File 'lib/aircana/progress_tracker.rb', line 38

def self.with_batch_progress(items, message, &)
  total = items.size
  return with_spinner("#{message} (#{total} item)", item: items.first, &) if total <= 1

  process_batch_with_progress(items, total, message, &)
end

.with_progress_bar(total, message) ⇒ Object



22
23
24
25
26
# File 'lib/aircana/progress_tracker.rb', line 22

def self.with_progress_bar(total, message, &)
  return with_spinner(message, &) if total <= 1

  create_and_use_progress_bar(total, message, &)
end

.with_spinner(message, success_message: nil, item: nil) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/aircana/progress_tracker.rb', line 8

def self.with_spinner(message, success_message: nil, item: nil)
  spinner = TTY::Spinner.new("[:spinner] #{message}", format: :dots, clear: true)
  spinner.auto_spin

  begin
    result = yield(item)
    spinner.success("✅ #{success_message || message}")
    result
  rescue StandardError => e
    spinner.error("❌ #{message} failed")
    raise e
  end
end