lib/cli/ui/printer.rb in cli-ui-1.5.1 vs lib/cli/ui/printer.rb in cli-ui-2.0.0
- old
+ new
@@ -1,59 +1,77 @@
+# typed: true
+
require 'cli/ui'
module CLI
module UI
class Printer
- # Print a message to a stream with common utilities.
- # Allows overriding the color, encoding, and target stream.
- # By default, it formats the string using CLI:UI and rescues common stream errors.
- #
- # ==== Attributes
- #
- # * +msg+ - (required) the string to output. Can be frozen.
- #
- # ==== Options
- #
- # * +:frame_color+ - Override the frame color. Defaults to nil.
- # * +:to+ - Target stream, like $stdout or $stderr. Can be anything with a puts method. Defaults to $stdout.
- # * +:encoding+ - Force the output to be in a certain encoding. Defaults to UTF-8.
- # * +:format+ - Whether to format the string using CLI::UI.fmt. Defaults to true.
- # * +:graceful+ - Whether to gracefully ignore common I/O errors. Defaults to true.
- # * +:wrap+ - Whether to wrap text at word boundaries to terminal width. Defaults to true.
- #
- # ==== Returns
- # Returns whether the message was successfully printed,
- # which can be useful if +:graceful+ is set to true.
- #
- # ==== Example
- #
- # CLI::UI::Printer.puts('{{x}} Ouch', to: $stderr)
- #
- def self.puts(
- msg,
- frame_color:
- nil,
- to:
- $stdout,
- encoding: Encoding::UTF_8,
- format: true,
- graceful: true,
- wrap: true
- )
- msg = (+msg).force_encoding(encoding) if encoding
- msg = CLI::UI.fmt(msg) if format
- msg = CLI::UI.wrap(msg) if wrap
+ extend T::Sig
- if frame_color
- CLI::UI::Frame.with_frame_color_override(frame_color) { to.puts(msg) }
- else
- to.puts(msg)
+ class << self
+ extend T::Sig
+
+ # Print a message to a stream with common utilities.
+ # Allows overriding the color, encoding, and target stream.
+ # By default, it formats the string using CLI:UI and rescues common stream errors.
+ #
+ # ==== Attributes
+ #
+ # * +msg+ - (required) the string to output. Can be frozen.
+ #
+ # ==== Options
+ #
+ # * +:frame_color+ - Override the frame color. Defaults to nil.
+ # * +:to+ - Target stream, like $stdout or $stderr. Can be anything with a puts method. Defaults to $stdout.
+ # * +:encoding+ - Force the output to be in a certain encoding. Defaults to UTF-8.
+ # * +:format+ - Whether to format the string using CLI::UI.fmt. Defaults to true.
+ # * +:graceful+ - Whether to gracefully ignore common I/O errors. Defaults to true.
+ # * +:wrap+ - Whether to wrap text at word boundaries to terminal width. Defaults to true.
+ #
+ # ==== Returns
+ # Returns whether the message was successfully printed,
+ # which can be useful if +:graceful+ is set to true.
+ #
+ # ==== Example
+ #
+ # CLI::UI::Printer.puts('{{x}} Ouch', to: $stderr)
+ #
+ sig do
+ params(
+ msg: String,
+ frame_color: T.nilable(Colorable),
+ to: IOLike,
+ encoding: T.nilable(Encoding),
+ format: T::Boolean,
+ graceful: T::Boolean,
+ wrap: T::Boolean,
+ ).returns(T::Boolean)
end
+ def puts(
+ msg,
+ frame_color: nil,
+ to: $stdout,
+ encoding: Encoding::UTF_8,
+ format: true,
+ graceful: true,
+ wrap: true
+ )
+ msg = (+msg).force_encoding(encoding) if encoding
+ msg = CLI::UI.fmt(msg) if format
+ msg = CLI::UI.wrap(msg) if wrap
- true
- rescue Errno::EIO, Errno::EPIPE, IOError => e
- raise(e) unless graceful
- false
+ if frame_color
+ CLI::UI::Frame.with_frame_color_override(frame_color) { to.puts(msg) }
+ else
+ to.puts(msg)
+ end
+
+ true
+ rescue Errno::EIO, Errno::EPIPE, IOError => e
+ raise(e) unless graceful
+
+ false
+ end
end
end
end
end