Class: Vli::UI::Basic

Inherits:
Interface show all
Includes:
Vli::Util::SafePuts
Defined in:
lib/vli/ui.rb

Overview

This is a UI implementation that outputs the text as is. It doesn’t add any color.

Direct Known Subclasses

Colored

Instance Attribute Summary

Attributes inherited from Interface

#resource

Instance Method Summary collapse

Methods included from Vli::Util::SafePuts

#safe_puts

Methods inherited from Interface

#initialize

Constructor Details

This class inherits a constructor from Vli::UI::Interface

Instance Method Details

#ask(message, opts = nil) ⇒ Object

Raises:

  • (Errors::UIExpectsTTY)


55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/vli/ui.rb', line 55

def ask(message, opts=nil)
  super(message)

  # We can't ask questions when the output isn't a TTY.
  raise Errors::UIExpectsTTY if !$stdin.tty?

  # Setup the options so that the new line is suppressed
  opts ||= {}
  opts[:new_line] = false if !opts.has_key?(:new_line)
  opts[:prefix]   = false if !opts.has_key?(:prefix)

  # Output the data
  say(:info, message, opts)

  # Get the results and chomp off the newline
  $stdin.gets.chomp
end

#clear_lineObject



89
90
91
92
93
94
95
# File 'lib/vli/ui.rb', line 89

def clear_line
  reset = "\r"
  reset += "\e[0K" unless Util::Platform.windows?
  reset

  info(reset, :new_line => false)
end

#format_message(type, message, opts = nil) ⇒ Object

This is called by ‘say` to format the message for output.



117
118
119
120
121
# File 'lib/vli/ui.rb', line 117

def format_message(type, message, opts=nil)
  opts ||= {}
  message = "[#{@resource}] #{message}" if opts[:prefix]
  message
end

#report_progress(progress, total, show_parts = true) ⇒ Object

This is used to output progress reports to the UI. Send this method progress/total and it will output it to the UI. Send ‘clear_line` to clear the line to show a continuous progress meter.



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/vli/ui.rb', line 77

def report_progress(progress, total, show_parts=true)
  if total && total > 0
    percent = (progress.to_f / total.to_f) * 100
    line    = "Progress: #{percent.to_i}%"
    line   << " (#{progress} / #{total})" if show_parts
  else
    line    = "Progress: #{progress}"
  end

  info(line, :new_line => false)
end

#say(type, message, opts = nil) ⇒ Object

This method handles actually outputting a message of a given type to the console.



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/vli/ui.rb', line 99

def say(type, message, opts=nil)
  defaults = { :new_line => true, :prefix => true }
  opts     = defaults.merge(opts || {})

  # Determine whether we're expecting to output our
  # own new line or not.
  printer = opts[:new_line] ? :puts : :print

  # Determine the proper IO channel to send this message
  # to based on the type of the message
  channel = type == :error || opts[:channel] == :error ? $stderr : $stdout

  # Output!
  safe_puts(format_message(type, message, opts),
            :io => channel, :printer => printer)
end