Class: Darlingtonia::FormattedMessageStream

Inherits:
Object
  • Object
show all
Defined in:
lib/darlingtonia/streams/formatted_message_stream.rb

Overview

A message stream that formats a message before forwarding it to an underlying #stream (STDOUT by default). Messages are formatted using the ‘#%` method; the formatter can be a string format specification like “Message received: %s”.

Examples:

Using a simple formatter

formatter = "Message received: %s\n"
stream    = Darlingtonia::FormattedMessageStream.new(formatter: formatter)

stream << "a message"
# Message received: a message
# => #<IO:<STDOUT>>

A more complex formatter use case

class MyFormatter
  def %(arg)
    "#{Time.now}: %s\n" % arg
  end
end

formatter = MyFormatter.new
stream    = Darlingtonia::FormattedMessageStream.new(formatter: formatter)

stream << 'a message'
# 2018-02-02 16:10:52 -0800: a message
# => #<IO:<STDOUT>>

stream << 'another message'
# 2018-02-02 16:10:55 -0800: another message
# => #<IO:<STDOUT>>

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stream: STDOUT, formatter: "%s\n") ⇒ FormattedMessageStream

Returns a new instance of FormattedMessageStream.

Parameters:

  • formatter (#%) (defaults to: "%s\n")

    A format specification

  • stream (#<<) (defaults to: STDOUT)

    an underlying stream to forward messages to after formatting

See Also:



52
53
54
55
# File 'lib/darlingtonia/streams/formatted_message_stream.rb', line 52

def initialize(stream: STDOUT, formatter: "%s\n")
  self.formatter = formatter
  self.stream    = stream
end

Instance Attribute Details

#formatter#%

Returns A format specification.

Returns:

  • (#%)

    A format specification

See Also:



44
45
46
# File 'lib/darlingtonia/streams/formatted_message_stream.rb', line 44

def formatter
  @formatter
end

#stream#<<

Returns an underlying stream to forward messages to after formatting.

Returns:

  • (#<<)

    an underlying stream to forward messages to after formatting



44
# File 'lib/darlingtonia/streams/formatted_message_stream.rb', line 44

attr_accessor :formatter, :stream

Instance Method Details

#<<(msg) ⇒ Object



58
59
60
# File 'lib/darlingtonia/streams/formatted_message_stream.rb', line 58

def <<(msg)
  stream << format_message(msg)
end

#format_message(msg) ⇒ String

Returns the input, cast to a string and formatted using.

Parameters:

  • msg (#to_s)

Returns:

  • (String)

    the input, cast to a string and formatted using



66
67
68
# File 'lib/darlingtonia/streams/formatted_message_stream.rb', line 66

def format_message(msg)
  formatter % msg
end