rack-raw-upload 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/rack/raw_upload.rb +3 -26
- data/test/raw_upload_test.rb +23 -5
- metadata +55 -82
data/lib/rack/raw_upload.rb
CHANGED
@@ -3,7 +3,7 @@ require 'tmpdir' # Needed in 1.8.7 to access Dir::tmpdir
|
|
3
3
|
module Rack
|
4
4
|
class RawUpload
|
5
5
|
|
6
|
-
VERSION = '1.0.
|
6
|
+
VERSION = '1.0.8'
|
7
7
|
|
8
8
|
def initialize(app, opts = {})
|
9
9
|
@app = app
|
@@ -33,7 +33,7 @@ module Rack
|
|
33
33
|
env['rack.input'].extend(EqlFix)
|
34
34
|
tempfile = env['rack.input']
|
35
35
|
else
|
36
|
-
tempfile =
|
36
|
+
tempfile = Tempfile.new('raw-upload.', @tmpdir)
|
37
37
|
tempfile << env['rack.input'].read
|
38
38
|
tempfile.flush
|
39
39
|
tempfile.rewind
|
@@ -78,7 +78,7 @@ module Rack
|
|
78
78
|
regexp = '^' + candidate.gsub('.', '\.').gsub('*', '[^/]*') + '$'
|
79
79
|
!! (Regexp.new(regexp) =~ request_path)
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
def content_type_of_raw_file?(content_type)
|
83
83
|
case content_type
|
84
84
|
when %r{^application/x-www-form-urlencoded}, %r{^multipart/form-data}
|
@@ -88,29 +88,6 @@ module Rack
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
-
def create_tempfile
|
92
|
-
tempfile = Tempfile.new('raw-upload.', @tmpdir)
|
93
|
-
|
94
|
-
# If the GC runs, it may unlink the tempfile.
|
95
|
-
# To avoid this, I create another version of it
|
96
|
-
# (a hard link to the same file). If the original
|
97
|
-
# is unlinked, we'll still have this other link.
|
98
|
-
ret = relink_file(tempfile)
|
99
|
-
tempfile.close
|
100
|
-
ret
|
101
|
-
end
|
102
|
-
|
103
|
-
def relink_file(file)
|
104
|
-
new_name = file.path + random_string
|
105
|
-
::File.link(file.path, new_name)
|
106
|
-
ret = ::File.open(new_name, "r+")
|
107
|
-
ret.binmode
|
108
|
-
ret
|
109
|
-
rescue SystemCallError
|
110
|
-
# The randomly chosen file name was taken. Try again.
|
111
|
-
retry
|
112
|
-
end
|
113
|
-
|
114
91
|
def random_string
|
115
92
|
(0...8).map{65.+(rand(25)).chr}.join
|
116
93
|
end
|
data/test/raw_upload_test.rb
CHANGED
@@ -98,11 +98,29 @@ class RawUploadTest < Test::Unit::TestCase
|
|
98
98
|
assert_successful_non_upload
|
99
99
|
end
|
100
100
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
101
|
+
context "when garbage collection runs (Ruby 1.9)" do
|
102
|
+
context "and the file is received as a Tempfile" do
|
103
|
+
should "ensure that the uploaded file remains" do
|
104
|
+
tempfile = Tempfile.new('rack-raw-upload-test-')
|
105
|
+
tempfile << @file.read
|
106
|
+
tempfile.rewind
|
107
|
+
upload('rack.input' => tempfile)
|
108
|
+
received = last_request.POST["file"]
|
109
|
+
GC.start
|
110
|
+
assert File.exists?(received[:tempfile].path)
|
111
|
+
assert_file_uploaded
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
context "and the file is NOT received as a TmpFile" do
|
116
|
+
should "ensure that the uploaded file remains" do
|
117
|
+
upload
|
118
|
+
received = last_request.POST["file"]
|
119
|
+
GC.start
|
120
|
+
assert File.exists?(received[:tempfile].path)
|
121
|
+
assert_file_uploaded
|
122
|
+
end
|
123
|
+
end
|
106
124
|
end
|
107
125
|
|
108
126
|
context "with X-File-Upload: smart" do
|
metadata
CHANGED
@@ -1,88 +1,70 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-raw-upload
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.8
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 7
|
10
|
-
version: 1.0.7
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Pablo Brasero
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-10-08 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: json
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &2153512340 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: rake
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: *2153512340
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &2153511880 !ruby/object:Gem::Requirement
|
38
28
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
46
33
|
type: :development
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: rack-test
|
50
34
|
prerelease: false
|
51
|
-
|
35
|
+
version_requirements: *2153511880
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rack-test
|
38
|
+
requirement: &2153511460 !ruby/object:Gem::Requirement
|
52
39
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
version: "0"
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
60
44
|
type: :development
|
61
|
-
version_requirements: *id003
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: shoulda
|
64
45
|
prerelease: false
|
65
|
-
|
46
|
+
version_requirements: *2153511460
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: shoulda
|
49
|
+
requirement: &2153511000 !ruby/object:Gem::Requirement
|
66
50
|
none: false
|
67
|
-
requirements:
|
68
|
-
- -
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
|
71
|
-
segments:
|
72
|
-
- 0
|
73
|
-
version: "0"
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
74
55
|
type: :development
|
75
|
-
|
76
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2153511000
|
58
|
+
description: Middleware that converts files uploaded with mimetype application/octet-stream
|
59
|
+
into normal form input, so Rack applications can read these as normal, rather than
|
60
|
+
as raw input.
|
77
61
|
email: pablobm@gmail.com
|
78
62
|
executables: []
|
79
|
-
|
80
63
|
extensions: []
|
81
|
-
|
82
|
-
extra_rdoc_files:
|
64
|
+
extra_rdoc_files:
|
83
65
|
- LICENSE
|
84
66
|
- README.md
|
85
|
-
files:
|
67
|
+
files:
|
86
68
|
- lib/rack/raw_upload.rb
|
87
69
|
- lib/rack-raw-upload.rb
|
88
70
|
- test/raw_upload_test.rb
|
@@ -92,38 +74,29 @@ files:
|
|
92
74
|
- Gemfile.lock
|
93
75
|
homepage: https://github.com/newbamboo/rack-raw-upload
|
94
76
|
licenses: []
|
95
|
-
|
96
77
|
post_install_message:
|
97
|
-
rdoc_options:
|
78
|
+
rdoc_options:
|
98
79
|
- --charset=UTF-8
|
99
80
|
- --main
|
100
81
|
- README.rdoc
|
101
|
-
require_paths:
|
82
|
+
require_paths:
|
102
83
|
- lib
|
103
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
85
|
none: false
|
105
|
-
requirements:
|
106
|
-
- -
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
|
109
|
-
|
110
|
-
- 0
|
111
|
-
version: "0"
|
112
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
91
|
none: false
|
114
|
-
requirements:
|
115
|
-
- -
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
|
118
|
-
segments:
|
119
|
-
- 0
|
120
|
-
version: "0"
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
121
96
|
requirements: []
|
122
|
-
|
123
97
|
rubyforge_project:
|
124
98
|
rubygems_version: 1.8.6
|
125
99
|
signing_key:
|
126
100
|
specification_version: 3
|
127
101
|
summary: Rack Raw Upload middleware
|
128
102
|
test_files: []
|
129
|
-
|