Class: InvocaGems::Presenter

Inherits:
Object
  • Object
show all
Defined in:
lib/invoca_gems/presenter.rb

Defined Under Namespace

Classes: StopWithMessage

Constant Summary collapse

COLOR_CODES =
{
  clear: 0,
  bright: 1,
  underline: 4,
  blink: 5,
  swap: 7,
  hide: 8,
  black: 30,
  red: 31,
  green: 32,
  yellow: 33,
  blue: 34,
  magenta: 35,
  white: 37,
  default: 39,
  black_background: 40,
  red_background: 41,
  blue_background: 40,
  green_background: 42,
  blue_background: 44,
  magenta_background: 45,
  cyan_background: 46,
  white_background: 47,
  default_background: 49
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.stop_with_message(message) ⇒ Object

Raises:



78
79
80
# File 'lib/invoca_gems/presenter.rb', line 78

def self.stop_with_message(message)
  raise StopWithMessage, message
end

.with_presenterObject



83
84
85
86
87
88
89
90
# File 'lib/invoca_gems/presenter.rb', line 83

def self.with_presenter
  presenter = new
  begin
    yield presenter
  rescue StopWithMessage => ex
    presenter.error(ex.message)
  end
end

Instance Method Details

#clear_task(keep: true) ⇒ Object



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

def clear_task(keep: true)
  if @task
    if keep
      @new_line_needed = false
      puts
    else
      print reset_line
      @new_line_needed = false
    end
    @task = nil
  end
end

#error(message) ⇒ Object



29
30
31
# File 'lib/invoca_gems/presenter.rb', line 29

def error(message)
  puts using_mode(:red, "error: #{message}")
end

#message(message) ⇒ Object



21
22
23
# File 'lib/invoca_gems/presenter.rb', line 21

def message(message)
  puts using_mode(:green, message)
end


51
52
53
54
55
56
# File 'lib/invoca_gems/presenter.rb', line 51

def print(*args)
  unless @silent
    @new_line_needed = true
    super
  end
end

#puts(*args) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/invoca_gems/presenter.rb', line 41

def puts(*args)
  unless @silent
    if @new_line_needed
      super()
      @new_line_needed = false
    end
    super
  end
end

#reset_lineObject



37
38
39
# File 'lib/invoca_gems/presenter.rb', line 37

def reset_line
  "\r\e[K"
end

#set_mode(codes) ⇒ Object



65
66
67
# File 'lib/invoca_gems/presenter.rb', line 65

def set_mode(codes)
  "\e[#{[codes].flatten.map{ |c| COLOR_CODES[c].to_s }.join(";")}m"
end

#set_subtask(message) ⇒ Object



33
34
35
# File 'lib/invoca_gems/presenter.rb', line 33

def set_subtask(message)
  print "#{reset_line}#{@task}: #{message}"
end

#set_task(message) ⇒ Object



2
3
4
5
6
# File 'lib/invoca_gems/presenter.rb', line 2

def set_task(message)
  clear_task
  @task = using_mode(:green, message)
  set_subtask('')
end

#silenceObject



58
59
60
61
62
63
# File 'lib/invoca_gems/presenter.rb', line 58

def silence
  @silent = true
  yield
ensure
  @silent = false
end

#stop_with_message(message) ⇒ Object

Raises:



74
75
76
# File 'lib/invoca_gems/presenter.rb', line 74

def stop_with_message(message)
  raise StopWithMessage, message
end

#using_mode(codes, message) ⇒ Object



69
70
71
# File 'lib/invoca_gems/presenter.rb', line 69

def using_mode(codes, message)
  set_mode(codes) + message + set_mode(:clear)
end

#warning(message) ⇒ Object



25
26
27
# File 'lib/invoca_gems/presenter.rb', line 25

def warning(message)
  puts using_mode(:yellow, "warning: #{message}")
end