multipart-post 1.1.4 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +3 -0
- data/Gemfile.lock +7 -5
- data/History.txt +10 -0
- data/README.txt +1 -1
- data/lib/composite_io.rb +8 -3
- data/lib/multipart_post.rb +7 -1
- data/lib/multipartable.rb +6 -0
- data/lib/net/http/post/multipart.rb +1 -1
- data/lib/parts.rb +10 -0
- data/test/net/http/post/test_multipart.rb +2 -1
- data/test/test_composite_io.rb +12 -0
- data/test/test_parts.rb +36 -2
- metadata +47 -54
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
multipart-post (1.1.
|
4
|
+
multipart-post (1.1.4)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
9
|
archive-tar-minitar (0.5.2)
|
10
|
-
columnize (0.3.
|
10
|
+
columnize (0.3.6)
|
11
11
|
linecache (0.43)
|
12
|
-
linecache19 (0.5.
|
12
|
+
linecache19 (0.5.12)
|
13
13
|
ruby_core_source (>= 0.1.4)
|
14
|
+
rake (0.9.2.2)
|
14
15
|
ruby-debug (0.10.3)
|
15
16
|
columnize (>= 0.1)
|
16
17
|
ruby-debug-base (~> 0.10.3.0)
|
17
18
|
ruby-debug-base (0.10.3)
|
18
19
|
linecache (>= 0.3)
|
19
|
-
ruby-debug-base19 (0.11.
|
20
|
+
ruby-debug-base19 (0.11.25)
|
20
21
|
columnize (>= 0.3.1)
|
21
22
|
linecache19 (>= 0.5.11)
|
22
23
|
ruby_core_source (>= 0.1.4)
|
@@ -24,7 +25,7 @@ GEM
|
|
24
25
|
columnize (>= 0.3.1)
|
25
26
|
linecache19 (>= 0.5.11)
|
26
27
|
ruby-debug-base19 (>= 0.11.19)
|
27
|
-
ruby_core_source (0.1.
|
28
|
+
ruby_core_source (0.1.5)
|
28
29
|
archive-tar-minitar (>= 0.5.2)
|
29
30
|
|
30
31
|
PLATFORMS
|
@@ -33,5 +34,6 @@ PLATFORMS
|
|
33
34
|
|
34
35
|
DEPENDENCIES
|
35
36
|
multipart-post!
|
37
|
+
rake
|
36
38
|
ruby-debug
|
37
39
|
ruby-debug19
|
data/History.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== 1.1.5 / 2012-02-12
|
2
|
+
|
3
|
+
- Fix length/bytesize of parts in 1.9 (#7, #14) (Jason Moore)
|
4
|
+
- Allow CompositeIO objects to be re-read by rewinding, like other IO
|
5
|
+
objects. (Luke Redpath)
|
6
|
+
|
7
|
+
=== 1.1.4 / 2011-11-23
|
8
|
+
|
9
|
+
- Non-functional changes in release (switch to Bundler gem tasks)
|
10
|
+
|
1
11
|
=== 1.1.3 / 2011-07-25
|
2
12
|
|
3
13
|
- More configurable header specification for parts (Gerrit Riessen)
|
data/README.txt
CHANGED
@@ -40,7 +40,7 @@ gem install multipart-post
|
|
40
40
|
|
41
41
|
(The MIT License)
|
42
42
|
|
43
|
-
Copyright (c) 2007-
|
43
|
+
Copyright (c) 2007-2012 Nick Sieger <nick@nicksieger.com>
|
44
44
|
|
45
45
|
Permission is hereby granted, free of charge, to any person obtaining
|
46
46
|
a copy of this software and associated documentation files (the
|
data/lib/composite_io.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# (c)
|
2
|
+
# Copyright (c) 2007-2012 Nick Sieger.
|
3
3
|
# See the file README.txt included with the distribution for
|
4
4
|
# software license details.
|
5
5
|
#++
|
@@ -24,12 +24,13 @@ class CompositeReadIO
|
|
24
24
|
buffer = buf || ''
|
25
25
|
done = if amount; nil; else ''; end
|
26
26
|
partial_amount = amount
|
27
|
+
parts = @ios.dup
|
27
28
|
|
28
29
|
loop do
|
29
30
|
result = done
|
30
31
|
|
31
|
-
while
|
32
|
-
|
32
|
+
while !parts.empty? && (result = parts.first.read(partial_amount)) == done
|
33
|
+
parts.shift
|
33
34
|
end
|
34
35
|
|
35
36
|
result.force_encoding("BINARY") if result.respond_to?(:force_encoding)
|
@@ -46,6 +47,10 @@ class CompositeReadIO
|
|
46
47
|
done
|
47
48
|
end
|
48
49
|
end
|
50
|
+
|
51
|
+
def rewind
|
52
|
+
@ios.each { |io| io.rewind }
|
53
|
+
end
|
49
54
|
end
|
50
55
|
|
51
56
|
# Convenience methods for dealing with files and IO that are to be uploaded.
|
data/lib/multipart_post.rb
CHANGED
data/lib/multipartable.rb
CHANGED
data/lib/parts.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2007-2012 Nick Sieger.
|
3
|
+
# See the file README.txt included with the distribution for
|
4
|
+
# software license details.
|
5
|
+
#++
|
6
|
+
|
1
7
|
module Parts
|
2
8
|
module Part #:nodoc:
|
3
9
|
def self.new(boundary, name, value)
|
@@ -24,6 +30,10 @@ module Parts
|
|
24
30
|
@io = StringIO.new(@part)
|
25
31
|
end
|
26
32
|
|
33
|
+
def length
|
34
|
+
@part.bytesize
|
35
|
+
end
|
36
|
+
|
27
37
|
def build_part(boundary, name, value)
|
28
38
|
part = ''
|
29
39
|
part << "--#{boundary}\r\n"
|
@@ -1,10 +1,11 @@
|
|
1
1
|
#--
|
2
|
-
# (c)
|
2
|
+
# Copyright (c) 2007-2012 Nick Sieger.
|
3
3
|
# See the file README.txt included with the distribution for
|
4
4
|
# software license details.
|
5
5
|
#++
|
6
6
|
|
7
7
|
require 'net/http/post/multipart'
|
8
|
+
require 'test/unit'
|
8
9
|
|
9
10
|
class Net::HTTP::Post::MultiPartTest < Test::Unit::TestCase
|
10
11
|
TEMP_FILE = "temp.txt"
|
data/test/test_composite_io.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2007-2012 Nick Sieger.
|
3
|
+
# See the file README.txt included with the distribution for
|
4
|
+
# software license details.
|
5
|
+
#++
|
6
|
+
|
1
7
|
require 'composite_io'
|
2
8
|
require 'stringio'
|
3
9
|
require 'test/unit'
|
@@ -56,6 +62,12 @@ class CompositeReadIOTest < Test::Unit::TestCase
|
|
56
62
|
@io.read(32)
|
57
63
|
assert_equal nil, @io.read(32)
|
58
64
|
end
|
65
|
+
|
66
|
+
def test_second_full_read_after_rewinding
|
67
|
+
@io.read
|
68
|
+
@io.rewind
|
69
|
+
assert_equal 'the quick brown fox', @io.read
|
70
|
+
end
|
59
71
|
|
60
72
|
def test_convert_error
|
61
73
|
assert_raises(ArgumentError) {
|
data/test/test_parts.rb
CHANGED
@@ -1,11 +1,29 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2007-2012 Nick Sieger.
|
3
|
+
# See the file README.txt included with the distribution for
|
4
|
+
# software license details.
|
5
|
+
#++
|
6
|
+
|
1
7
|
require 'test/unit'
|
2
8
|
|
3
9
|
require 'parts'
|
4
10
|
require 'stringio'
|
5
11
|
require 'composite_io'
|
6
12
|
|
13
|
+
|
14
|
+
MULTIBYTE = File.dirname(__FILE__)+'/multibyte.txt'
|
15
|
+
TEMP_FILE = "temp.txt"
|
16
|
+
|
17
|
+
module AssertPartLength
|
18
|
+
def assert_part_length(part)
|
19
|
+
bytes = part.to_io.read
|
20
|
+
bytesize = bytes.respond_to?(:bytesize) ? bytes.bytesize : bytes.length
|
21
|
+
assert_equal bytesize, part.length
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
7
25
|
class FilePartTest < Test::Unit::TestCase
|
8
|
-
|
26
|
+
include AssertPartLength
|
9
27
|
|
10
28
|
def setup
|
11
29
|
File.open(TEMP_FILE, "w") {|f| f << "1234567890"}
|
@@ -18,6 +36,22 @@ class FilePartTest < Test::Unit::TestCase
|
|
18
36
|
end
|
19
37
|
|
20
38
|
def test_correct_length
|
21
|
-
|
39
|
+
assert_part_length @part
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_multibyte_file_length
|
43
|
+
assert_part_length Parts::FilePart.new("boundary", "multibyte", UploadIO.new(MULTIBYTE, "text/plain"))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class ParamPartTest < Test::Unit::TestCase
|
48
|
+
include AssertPartLength
|
49
|
+
|
50
|
+
def setup
|
51
|
+
@part = Parts::ParamPart.new("boundary", "multibyte", File.read(MULTIBYTE))
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_correct_length
|
55
|
+
assert_part_length @part
|
22
56
|
end
|
23
57
|
end
|
metadata
CHANGED
@@ -1,75 +1,68 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: multipart-post
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.5
|
4
5
|
prerelease:
|
5
|
-
version: 1.1.4
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
8
|
-
|
7
|
+
authors:
|
8
|
+
- Nick Sieger
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
date: 2011-11-23 00:00:00 Z
|
12
|
+
date: 2012-02-13 00:00:00.000000000Z
|
14
13
|
dependencies: []
|
15
|
-
|
16
|
-
|
17
|
-
email:
|
18
|
-
|
14
|
+
description: ! 'Use with Net::HTTP to do multipart form posts. IO values that have
|
15
|
+
#content_type, #original_filename, and #local_path will be posted as a binary file.'
|
16
|
+
email:
|
17
|
+
- nick@nicksieger.com
|
19
18
|
executables: []
|
20
|
-
|
21
19
|
extensions: []
|
22
|
-
|
23
20
|
extra_rdoc_files: []
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
- test/test_parts.rb
|
21
|
+
files:
|
22
|
+
- .gitignore
|
23
|
+
- .travis.yml
|
24
|
+
- Gemfile
|
25
|
+
- Gemfile.lock
|
26
|
+
- History.txt
|
27
|
+
- Manifest.txt
|
28
|
+
- README.txt
|
29
|
+
- Rakefile
|
30
|
+
- lib/composite_io.rb
|
31
|
+
- lib/multipart_post.rb
|
32
|
+
- lib/multipartable.rb
|
33
|
+
- lib/net/http/post/multipart.rb
|
34
|
+
- lib/parts.rb
|
35
|
+
- multipart-post.gemspec
|
36
|
+
- test/multibyte.txt
|
37
|
+
- test/net/http/post/test_multipart.rb
|
38
|
+
- test/test_composite_io.rb
|
39
|
+
- test/test_parts.rb
|
44
40
|
homepage: https://github.com/nicksieger/multipart-post
|
45
41
|
licenses: []
|
46
|
-
|
47
42
|
post_install_message:
|
48
43
|
rdoc_options: []
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
47
|
none: false
|
54
|
-
requirements:
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
53
|
none: false
|
60
|
-
requirements:
|
61
|
-
|
62
|
-
|
63
|
-
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
64
58
|
requirements: []
|
65
|
-
|
66
59
|
rubyforge_project: caldersphere
|
67
|
-
rubygems_version: 1.8.
|
60
|
+
rubygems_version: 1.8.6
|
68
61
|
signing_key:
|
69
62
|
specification_version: 3
|
70
63
|
summary: A multipart form post accessory for Net::HTTP.
|
71
|
-
test_files:
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
64
|
+
test_files:
|
65
|
+
- test/multibyte.txt
|
66
|
+
- test/net/http/post/test_multipart.rb
|
67
|
+
- test/test_composite_io.rb
|
68
|
+
- test/test_parts.rb
|