Sha256: e2d83c9b7bff2976b8b6529e3b54e9d450bd6d652dea5b6a9485d538f4e7323e

Contents?: true

Size: 1.33 KB

Versions: 3

Compression:

Stored size: 1.33 KB

Contents

require 'hanami/utils/class'
require 'hanami/utils/string'
require_relative 'errors'

 module Hanami
   module Middleware
     class BodyParser
       # @api private
       # @since 1.3.0
       module ClassInterface
         # @api private
         # @since 1.3.0
         def for(parser)
           parser =
             case parser
             when String, Symbol
               require_parser(parser)
             when Class
               parser.new
             else
               parser
             end

           ensure_parser parser

           parser
         end

         private

         # @api private
         # @since 1.3.0
         PARSER_METHODS = %i[mime_types parse].freeze

         # @api private
         # @since 1.3.0
         def ensure_parser(parser)
           unless PARSER_METHODS.all? { |method| parser.respond_to?(method) }
             raise InvalidParserError.new(parser)
           end
         end

         # @api private
         # @since 1.3.0
         def require_parser(parser)
           require "hanami/middleware/body_parser/#{parser}_parser"

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

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
hanami-router-1.3.2 lib/hanami/middleware/body_parser/class_interface.rb
hanami-router-1.3.1 lib/hanami/middleware/body_parser/class_interface.rb
hanami-router-1.3.0 lib/hanami/middleware/body_parser/class_interface.rb