def format_message_segment segment
    return segment.to_summary if segment.respond_to?( :to_summary )
    
    return segment if String === segment
    
    # TODO  Do better!
    segment.inspect
  end
def format_message_segment segment
    return segment.to_summary if segment.respond_to?( :to_summary )
    
    return segment if String === segment
    
    # TODO  Do better!
    segment.inspect
  end
Construct a nicer error.

 @param [Array] message
   Main message segments. See {#format_message} and {#format_message_segment}
   for an understanding of how they are, well, formatted.

 @param [Binding?] binding
   When provided any details string will be rendered using it's
   {Binding#erb} method.

 @param [nil | String | Proc<()=>String> | #to_s] details
   Additional text details to add to the extended message. When:

   1.  `nil` - no details will be added.

   2.  `String` - the value will be used. If `binding:` is provided, it
       will be rendered against it as ERB.

   3.  `Proc<()=>String>` - if and when an extended message is needed
       the proc will be called, and the resulting string will be used
       as in (2).

   4.  `#to_s` - catch all; if and when an extended message is needed
       `#to_s` will be called on the value and the result will be used
       as in (2).

 @param [Hash<Symbol, VALUE>] context
   Any additional names and values to dump with an extended message.

 #initialize
 Format a segment of the error message.

 Strings are simply returned. Other things are inspected (for now).

 @param [Object] segment
   The segment.

 @return [String]
   The formatted string for the segment.

 @todo
   This should talk to config when that comes about to find out how to
   dump things.