Class: Chef::Formatters::IndentableOutputStream
- Inherits:
-
Object
- Object
- Chef::Formatters::IndentableOutputStream
- Defined in:
- lib/chef/formatters/indentable_output_stream.rb
Overview
Handles basic indentation and colorization tasks
Instance Attribute Summary collapse
-
#current_stream ⇒ Object
Returns the value of attribute current_stream.
-
#err ⇒ Object
readonly
Returns the value of attribute err.
-
#indent ⇒ Object
Returns the value of attribute indent.
-
#line_started ⇒ Object
readonly
Returns the value of attribute line_started.
-
#out ⇒ Object
readonly
Returns the value of attribute out.
-
#semaphore ⇒ Object
readonly
Returns the value of attribute semaphore.
Instance Method Summary collapse
-
#<<(obj) ⇒ Object
Print a raw chunk.
-
#initialize(out, err) ⇒ IndentableOutputStream
constructor
A new instance of IndentableOutputStream.
-
#pastel ⇒ Object
pastel.decorate is a lightweight replacement for highline.color.
-
#print(string, *args) ⇒ Object
Print a string.
-
#puts(string, *args) ⇒ Object
Print a line.
-
#puts_line(string, *args) ⇒ Object
Print an entire line from start to end.
-
#start_line(string, *args) ⇒ Object
Print the start of a new line.
Constructor Details
#initialize(out, err) ⇒ IndentableOutputStream
Returns a new instance of IndentableOutputStream.
13 14 15 16 17 18 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 13 def initialize(out, err) @out, @err = out, err @indent = 0 @line_started = false @semaphore = Mutex.new end |
Instance Attribute Details
#current_stream ⇒ Object
Returns the value of attribute current_stream.
10 11 12 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 10 def current_stream @current_stream end |
#err ⇒ Object (readonly)
Returns the value of attribute err.
7 8 9 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 7 def err @err end |
#indent ⇒ Object
Returns the value of attribute indent.
8 9 10 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 8 def indent @indent end |
#line_started ⇒ Object (readonly)
Returns the value of attribute line_started.
9 10 11 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 9 def line_started @line_started end |
#out ⇒ Object (readonly)
Returns the value of attribute out.
6 7 8 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 6 def out @out end |
#semaphore ⇒ Object (readonly)
Returns the value of attribute semaphore.
11 12 13 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 11 def semaphore @semaphore end |
Instance Method Details
#<<(obj) ⇒ Object
Print a raw chunk
57 58 59 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 57 def <<(obj) print(obj) end |
#pastel ⇒ Object
pastel.decorate is a lightweight replacement for highline.color
21 22 23 24 25 26 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 21 def pastel @pastel ||= begin require "pastel" unless defined?(Pastel) Pastel.new end end |
#print(string, *args) ⇒ Object
Print a string.
Arguments
string: string to print. options: a hash with these possible options:
-
:stream => OBJ: unique identifier for a stream. If two prints have
different streams, they will print on separate lines. Otherwise, they will stay together.
-
:start_line => BOOLEAN: if true, print will begin on a blank (indented) line.
-
:end_line => BOOLEAN: if true, current line will be ended.
-
:name => STRING: a name to prefix in front of a stream. It will be printed
once (with the first line of the stream) and subsequent lines will be indented to match.
Alternative
You may also call print(‘string’, :red) (github.com/piotrmurach/pastel#3-supported-colors)
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 78 def print(string, *args) = from_args(args) # Make sure each line stays a unit even with threads sending output semaphore.synchronize do if should_start_line?() move_to_next_line end print_string(string, ) if should_end_line?() move_to_next_line end end end |
#puts(string, *args) ⇒ Object
Print a line. This will continue from the last start_line or print, or start a new line and indent if necessary.
43 44 45 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 43 def puts(string, *args) print(string, from_args(args, end_line: true)) end |
#puts_line(string, *args) ⇒ Object
Print an entire line from start to end. This will terminate any existing lines and cause indentation.
52 53 54 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 52 def puts_line(string, *args) print(string, from_args(args, start_line: true, end_line: true)) end |
#start_line(string, *args) ⇒ Object
Print the start of a new line. This will terminate any existing lines and cause indentation but will not move to the next line yet (future ‘print’ and ‘puts’ statements will stay on this line).
34 35 36 |
# File 'lib/chef/formatters/indentable_output_stream.rb', line 34 def start_line(string, *args) print(string, from_args(args, start_line: true)) end |