Sha256: 0650368488b7bc72ef7e3f3c99c4a5c9434c7dfec208a64dcb40f77d56c41b2c

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

require 'lotus/utils/class'
require 'lotus/utils/string'
require 'lotus/routing/error'

module Lotus
  module Routing
    module Parsing
      # Body parsing error
      # This is raised when parser fails to parse the body
      #
      # @since 0.5.0
      class BodyParsingError < Lotus::Routing::Error
      end

      # @since 0.2.0
      class UnknownParserError < Lotus::Routing::Error
        def initialize(parser)
          super("Unknown Parser: `#{ parser }'")
        end
      end

      # @since 0.2.0
      class Parser
        # @since 0.2.0
        def self.for(parser)
          case parser
          when String, Symbol
            require_parser(parser)
          else
            parser
          end
        end

        # @since 0.2.0
        def mime_types
          raise NotImplementedError
        end

        # @since 0.2.0
        def parse(body)
          Hash.new
        end

        private
        # @since 0.2.0
        # @api private
        def self.require_parser(parser)
          require "lotus/routing/parsing/#{ parser }_parser"

          parser = Utils::String.new(parser).classify
          Utils::Class.load!("Lotus::Routing::Parsing::#{ parser }Parser").new
        rescue LoadError, NameError
          raise UnknownParserError.new(parser)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lotus-router-0.5.1 lib/lotus/routing/parsing/parser.rb
lotus-router-0.5.0 lib/lotus/routing/parsing/parser.rb