Class: Vagrant::UI::Basic

Inherits:
Interface show all
Includes:
Vagrant::Util::SafePuts
Defined in:
lib/vagrant/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 Vagrant::Util::SafePuts

#safe_puts

Methods inherited from Interface

#initialize

Constructor Details

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

Instance Method Details

#ask(message, opts = nil) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/vagrant/ui.rb', line 62

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. We do a logical OR
  # here because `gets` can return a nil, for example in the case
  # that ctrl-D is pressed on the input.
  input = $stdin.gets || ""
  input.chomp
end

#clear_lineObject



99
100
101
102
103
104
# File 'lib/vagrant/ui.rb', line 99

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

  info(reset, :new_line => false)
end

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

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



126
127
128
129
130
# File 'lib/vagrant/ui.rb', line 126

def format_message(type, message, opts=nil)
  opts ||= {}
  message = "[#{@resource}] #{message}" if @resource && 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.



87
88
89
90
91
92
93
94
95
96
97
# File 'lib/vagrant/ui.rb', line 87

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.



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/vagrant/ui.rb', line 108

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