Sha256: cc744ba2ef3608ffa7ee127b5c88b5cf9584da8f3bf1a39ead34a1f715be1ef5

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

# lib/moxml/error_handler.rb
module Moxml
  class ErrorHandler
    class << self
      def handle_parse_error(error, backend)
        case backend
        when :nokogiri
          handle_nokogiri_error(error)
        when :ox
          handle_ox_error(error)
        when :oga
          handle_oga_error(error)
        else
          handle_generic_error(error)
        end
      end

      private

      def handle_nokogiri_error(error)
        case error
        when ::Nokogiri::XML::SyntaxError
          raise ParseError.new(
            error.message,
            line: error.line,
            column: error.column,
            source: error.source,
          )
        when ::Nokogiri::XML::XPath::SyntaxError
          raise XPathError.new(error.message)
        else
          handle_generic_error(error)
        end
      end

      def handle_ox_error(error)
        case error
        when ::Ox::ParseError
          raise ParseError.new(
            error.message,
            line: error.line,
            column: error.column,
          )
        else
          handle_generic_error(error)
        end
      end

      def handle_oga_error(error)
        case error
        when ::Oga::XML::ParseError
          raise ParseError.new(
            error.message,
            line: error.line,
            column: error.column,
          )
        when ::Oga::XML::XPath::Error
          raise XPathError.new(error.message)
        else
          handle_generic_error(error)
        end
      end

      def handle_generic_error(error)
        case error
        when NameError, NoMethodError
          raise BackendError.new(
            "Backend operation failed: #{error.message}",
            Moxml.config.backend
          )
        else
          raise Error, "XML operation failed: #{error.message}"
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
moxml-0.1.0 lib/moxml/error_handler.rb