module Shaf::Parser

Constants

INPUT_BODY

Public Class Methods

for(request) click to toggle source
# File lib/shaf/parser.rb, line 24
def for(request)
  clazz = parser_for(request)
  return unless clazz

  body = input(request)
  clazz.new(request: request, body: body)
end
input?(request) click to toggle source
# File lib/shaf/parser.rb, line 20
def input?(request)
  !!input(request)
end
register(parser) click to toggle source
# File lib/shaf/parser.rb, line 12
def register(parser)
  parsers << parser
end
unregister(parser) click to toggle source
# File lib/shaf/parser.rb, line 16
def unregister(parser)
  parsers.delete(parser)
end

Private Class Methods

input(request) click to toggle source
# File lib/shaf/parser.rb, line 44
def input(request)
  body = request.get_header(INPUT_BODY)
  body ||= read_input(request).tap do |b|
    request.set_header(INPUT_BODY, b)
  end

  body unless String(body).strip.empty?
end
parser_for(request) click to toggle source
# File lib/shaf/parser.rb, line 34
def parser_for(request)
  parsers.find do |parser|
    parser.can_handle? request
  end
end
parsers() click to toggle source
# File lib/shaf/parser.rb, line 40
def parsers
  @parsers ||= Set.new
end
read_input(request) click to toggle source
# File lib/shaf/parser.rb, line 53
def read_input(request)
  request.body.rewind
  request.body.read
ensure
  request.body.rewind
end