Sha256: f5012d3156795b071af82d532754819d6b1c3b6f9c3818fd03416fc8a942ca90
Contents?: true
Size: 1.27 KB
Versions: 22
Compression:
Stored size: 1.27 KB
Contents
class MultipartResponse class NoBoundaryFoundInContentTypeError < ArgumentError def initialize(content_type_header, exception) super("Content-Type header of '#{content_type_header}' has no boundary defined: #{exception.class.name}: #{exception}") end end class Part def initialize(data) if data.include?("\r\n\r\n") headers, *body = *data.split("\r\n\r\n") @headers = Hash[headers.split("\r\n").map{|h| h.split(/: ?/)}] @body = body.join("\r\n\r\n") else @headers = {'Content-Type' => 'text/plain'} @body = data end end attr_reader :headers, :body alias :header :headers end def initialize(content_type_header, body) @boundary = begin content_type_header.split(';').map{|e| e.strip}.select{|e| e =~ /^boundary=/}.first.match(/^boundary="(.*)"/)[1] rescue => e raise NoBoundaryFoundInContentTypeError.new(content_type_header, e) end body, epilogue = *body.split("--#{@boundary}--") preamble, *parts = *body.split("--#{@boundary}") @preamble = preamble.sub(/\r\n$/m, '') @preamble = nil if @preamble.empty? @epilogue = epilogue.sub(/^\r\n/m, '') if epilogue @parts = parts.map{|p| p.sub(/^\r\n/m, '').sub(/\r\n$/m, '')}.map{|p| Part.new(p)} end attr_reader :boundary, :preamble, :parts, :epilogue alias :part :parts end
Version data entries
22 entries across 22 versions & 2 rubygems