Module: Support::Rake::TaskWithSpinner

Defined in:
lib/support/rake/task_with_spinner.rb

Constant Summary collapse

TaskSkippedError =
Class.new(StandardError)

Class Attribute Summary collapse

Instance Method Summary collapse

Class Attribute Details

.spinner_managerObject

Returns the value of attribute spinner_manager.



12
13
14
# File 'lib/support/rake/task_with_spinner.rb', line 12

def spinner_manager
  @spinner_manager
end

Instance Method Details

#enable_spinner!Object



17
18
19
20
21
22
# File 'lib/support/rake/task_with_spinner.rb', line 17

def enable_spinner!
  return unless GDK::Output.interactive?
  return unless defined?(TTY::Spinner)

  @enable_spinner = true
end

#executeObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/support/rake/task_with_spinner.rb', line 39

def execute(...)
  spinner = nil
  if TaskWithSpinner.spinner_manager && show_spinner?
    thread = Thread.new do
      sleep 0.001
      next if @skipped

      spinner = TaskWithSpinner.spinner_manager.register spinner_name
      spinner.auto_spin
    end
  end

  super
rescue StandardError => e
  spinner&.error
  raise e unless e.instance_of?(TaskSkippedError)
else
  spinner&.success
ensure
  thread&.join
end

#invokeObject



24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/support/rake/task_with_spinner.rb', line 24

def invoke(...)
  if @enable_spinner
    TaskWithSpinner.spinner_manager ||= ::TTY::Spinner::Multi.new(
      spinner_name,
      success_mark: "\e[32m#{TTY::Spinner::TICK}\e[0m",
      error_mark: "\e[31m#{TTY::Spinner::CROSS}\e[0m",
      format: :dots,
      # $stderr is overwritten in TaskWithLogger
      output: STDERR # rubocop:disable Style/GlobalStdStream
    )
  end

  super
end

#skip!Object

Raises:



61
62
63
64
# File 'lib/support/rake/task_with_spinner.rb', line 61

def skip!
  @skipped = true
  raise TaskSkippedError
end