module Shoulda
  module Matchers
    TERMINAL_MAX_WIDTH = 72

    # @private
    def self.warn(message)
      header = "Warning from shoulda-matchers:"
      divider = "*" * TERMINAL_MAX_WIDTH
      wrapped_message = word_wrap(message, TERMINAL_MAX_WIDTH)
      full_message = [
        divider,
        [header, wrapped_message.strip].join("\n\n"),
        divider
      ].join("\n")

      Kernel.warn(full_message)
    end

    # @private
    def self.warn_about_deprecated_method(old_method, new_method)
      warn <<EOT
#{old_method} is deprecated and will be removed in the next major
release. Please use #{new_method} instead.
EOT
    end

    # Source: <https://www.ruby-forum.com/topic/57805>
    # @private
    def self.word_wrap(text, width=80)
      text.
        gsub(/\n+/, " ").
        gsub( /(\S{#{width}})(?=\S)/, '\1 ' ).
        gsub( /(.{1,#{width}})(?:\s+|$)/, "\\1\n" )
    end
  end
end