Sha256: 07f7b7de92bfeec1f48c202949aa43dd0c72f73cf5fd7936c6d7b8a2a1875c43

Contents?: true

Size: 1.85 KB

Versions: 6

Compression:

Stored size: 1.85 KB

Contents

module WIP
  # TODO: consider...
  #
  # - OptionParser::ParseError:: errors on parsing
  #   - OptionParser::AmbiguousArgument
  #   - OptionParser::InvalidArgument
  #   - OptionParser::MissingArgument
  #   - OptionParser::NeedlessArgument
  #   - OptionParser::AmbiguousOption
  #   - OptionParser::InvalidOption
   module Runner
    class Error < StandardError
      def initialize(message = nil)
        super
        @message = message
      end

      def message
        "#{prefix.capitalize}: #{format(super)}".sub(/\s\n/, "\n")
      end

      private

      def format(original)
        if @message.is_a?(Array)
          values = @message.map(&:to_s)
          width  = values.sort { |a, b| b.size <=> a.size }[0].size
          lines  = []
          values.each do |value|
            lines << sprintf("    - %-#{width}s", value)
          end
          "\n#{lines.join("\n")}"
        elsif @message.respond_to?(:each) # e.g., Hash, WIP::Runner::Options
          keys  = @message.keys.map(&:to_s)
          width = keys.sort { |a, b| b.size <=> a.size }[0].size
          lines = []
          @message.each do |key, value|
            lines << [
              sprintf("    - %-#{width}s", key.to_s),
              format_value(value)
            ].join(' ... ')
          end
          "\n#{lines.join("\n")}"
        else
          format_value(@message)
        end
      end

      def format_value(value)
        case value
        when nil
          '(missing)'
        else
          value
        end
      end

      def prefix
        self.class.name.split('::').last.gsub(/([A-Z])/, " \\1")
          .strip
          .capitalize
      end
    end

    class InvalidArgument  < Error ; end
    class InvalidArguments < Error ; end
    class InvalidCommand   < Error ; end
    class InvalidOption    < Error ; end
    class InvalidOptions   < Error ; end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
wip-runner-0.4.1 lib/wip/runner/errors.rb
wip-runner-0.4.0 lib/wip/runner/errors.rb
wip-runner-0.3.4 lib/wip/runner/errors.rb
wip-runner-0.3.3 lib/wip/runner/errors.rb
wip-runner-0.3.2 lib/wip/runner/errors.rb
wip-runner-0.3.1 lib/wip/runner/errors.rb