diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2022-04-27 08:14:33 +1200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-27 08:14:33 +1200 |
commit | 11b4ac5237b25ba773ca519cc4e508c9008bed65 (patch) | |
tree | b3e6068e8ebe79ce3ba0d8ba793f08d4755ab8e6 | |
parent | ed308ff555ae0aeff465044be92bc6bcbc3ddaaa (diff) | |
download | rack-11b4ac5237b25ba773ca519cc4e508c9008bed65.tar.gz |
Remove `Rack::Multipart` dependency on `Rack::Request`. (#1872)
-rw-r--r-- | lib/rack/multipart.rb | 37 | ||||
-rw-r--r-- | lib/rack/multipart/generator.rb | 1 | ||||
-rw-r--r-- | test/spec_multipart.rb | 1 | ||||
-rw-r--r-- | test/spec_request.rb | 9 |
4 files changed, 28 insertions, 20 deletions
diff --git a/lib/rack/multipart.rb b/lib/rack/multipart.rb index f88e4fd2..d6021f8c 100644 --- a/lib/rack/multipart.rb +++ b/lib/rack/multipart.rb @@ -3,6 +3,9 @@ require_relative 'constants' require_relative 'utils' +require_relative 'multipart/parser' +require_relative 'multipart/generator' + module Rack # A multipart form data parser, adapted from IOWA. # @@ -12,20 +15,25 @@ module Rack class << self def parse_multipart(env, params = Rack::Utils.default_query_parser) - extract_multipart Rack::Request.new(env), params + io = env[RACK_INPUT] + + if content_length = env['CONTENT_LENGTH'] + content_length = content_length.to_i + end + + content_type = env['CONTENT_TYPE'] + + tempfile = env[RACK_MULTIPART_TEMPFILE_FACTORY] || Parser::TEMPFILE_FACTORY + bufsize = env[RACK_MULTIPART_BUFFER_SIZE] || Parser::BUFSIZE + + info = Parser.parse(io, content_length, content_type, tempfile, bufsize, params) + env[RACK_TEMPFILES] = info.tmp_files + + return info.params end - def extract_multipart(req, params = Rack::Utils.default_query_parser) - io = req.get_header(RACK_INPUT) - content_length = req.content_length - content_length = content_length.to_i if content_length - - tempfile = req.get_header(RACK_MULTIPART_TEMPFILE_FACTORY) || Parser::TEMPFILE_FACTORY - bufsize = req.get_header(RACK_MULTIPART_BUFFER_SIZE) || Parser::BUFSIZE - - info = Parser.parse io, content_length, req.get_header('CONTENT_TYPE'), tempfile, bufsize, params - req.set_header(RACK_TEMPFILES, info.tmp_files) - info.params + def extract_multipart(request, params = Rack::Utils.default_query_parser) + parse_multipart(request.env) end def build_multipart(params, first = true) @@ -34,8 +42,3 @@ module Rack end end end - -require_relative 'request' unless defined?(Rack::Request) -require_relative 'multipart/parser' -require_relative 'multipart/uploaded_file' unless defined?(Rack::Multipart::UploadedFile) -require_relative 'multipart/generator' unless defined?(Rack::Multipart::Generator) diff --git a/lib/rack/multipart/generator.rb b/lib/rack/multipart/generator.rb index f871bd36..6d7015a1 100644 --- a/lib/rack/multipart/generator.rb +++ b/lib/rack/multipart/generator.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require_relative 'uploaded_file' module Rack module Multipart diff --git a/test/spec_multipart.rb b/test/spec_multipart.rb index 8683cbc2..8a214111 100644 --- a/test/spec_multipart.rb +++ b/test/spec_multipart.rb @@ -9,6 +9,7 @@ separate_testing do require_relative '../lib/rack/mock' require_relative '../lib/rack/query_parser' require_relative '../lib/rack/utils' + require_relative '../lib/rack/request' end describe Rack::Multipart do diff --git a/test/spec_request.rb b/test/spec_request.rb index 4786ebac..58e42372 100644 --- a/test/spec_request.rb +++ b/test/spec_request.rb @@ -14,6 +14,11 @@ end class RackRequestTest < Minitest::Spec it "copies the env when duping" do req = make_request(Rack::MockRequest.env_for("http://example.com:8080/")) + + if req.delegate? + skip "delegate requests don't dup environments" + end + refute_same req.env, req.dup.env end @@ -1857,7 +1862,7 @@ EOF include Rack::Request::Helpers extend Forwardable - def_delegators :@req, :has_header?, :get_header, :fetch_header, + def_delegators :@req, :env, :has_header?, :get_header, :fetch_header, :each_header, :set_header, :add_header, :delete_header def_delegators :@req, :[], :[]=, :values_at @@ -1867,8 +1872,6 @@ EOF end def delegate?; true; end - - def env; @req.env.dup; end end def make_request(env) |