faraday 0.8.5 → 0.8.6
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/Gemfile +1 -1
- data/lib/faraday.rb +1 -1
- data/lib/faraday/connection.rb +2 -0
- data/lib/faraday/upload_io.rb +42 -6
- data/test/composite_read_io_test.rb +107 -0
- metadata +3 -2
data/Gemfile
CHANGED
@@ -6,7 +6,7 @@ end
|
|
6
6
|
|
7
7
|
group :test do
|
8
8
|
gem 'em-http-request', '~> 1.0', :require => 'em-http'
|
9
|
-
gem 'em-synchrony', '~> 1.0', :require => ['em-synchrony', 'em-synchrony/em-http']
|
9
|
+
gem 'em-synchrony', '~> 1.0', :require => ['em-synchrony', 'em-synchrony/em-http']
|
10
10
|
gem 'excon', '>= 0.16.1'
|
11
11
|
gem 'net-http-persistent', '~> 2.5', :require => false
|
12
12
|
gem 'leftright', '~> 0.9', :require => false
|
data/lib/faraday.rb
CHANGED
data/lib/faraday/connection.rb
CHANGED
data/lib/faraday/upload_io.rb
CHANGED
@@ -8,13 +8,49 @@ rescue LoadError
|
|
8
8
|
end
|
9
9
|
|
10
10
|
module Faraday
|
11
|
-
|
12
|
-
|
11
|
+
# Similar but not compatible with ::CompositeReadIO provided by multipart-post.
|
12
|
+
class CompositeReadIO
|
13
|
+
def initialize(*parts)
|
14
|
+
@parts = parts.flatten
|
15
|
+
@ios = @parts.map { |part| part.to_io }
|
16
|
+
@index = 0
|
17
|
+
end
|
18
|
+
|
19
|
+
def length
|
20
|
+
@parts.inject(0) { |sum, part| sum + part.length }
|
21
|
+
end
|
22
|
+
|
23
|
+
def rewind
|
24
|
+
@ios.each { |io| io.rewind }
|
25
|
+
@index = 0
|
26
|
+
end
|
27
|
+
|
28
|
+
# Read from IOs in order until `length` bytes have been received.
|
29
|
+
def read(length = nil, outbuf = nil)
|
30
|
+
got_result = false
|
31
|
+
outbuf = outbuf ? outbuf.replace("") : ""
|
32
|
+
|
33
|
+
while io = current_io
|
34
|
+
if result = io.read(length)
|
35
|
+
got_result ||= !result.nil?
|
36
|
+
result.force_encoding("BINARY") if result.respond_to?(:force_encoding)
|
37
|
+
outbuf << result
|
38
|
+
length -= result.length if length
|
39
|
+
break if length == 0
|
40
|
+
end
|
41
|
+
advance_io
|
42
|
+
end
|
43
|
+
(!got_result && length) ? nil : outbuf
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def current_io
|
49
|
+
@ios[@index]
|
50
|
+
end
|
13
51
|
|
14
|
-
def
|
15
|
-
@
|
16
|
-
ios = parts.map{ |part| part.to_io }
|
17
|
-
super(*ios)
|
52
|
+
def advance_io
|
53
|
+
@index += 1
|
18
54
|
end
|
19
55
|
end
|
20
56
|
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
+
require 'stringio'
|
3
|
+
|
4
|
+
class CompositeReadIOTest < Test::Unit::TestCase
|
5
|
+
Part = Struct.new(:to_io) do
|
6
|
+
def length() to_io.string.length end
|
7
|
+
end
|
8
|
+
|
9
|
+
def part(str)
|
10
|
+
Part.new StringIO.new(str)
|
11
|
+
end
|
12
|
+
|
13
|
+
def composite_io(*parts)
|
14
|
+
Faraday::CompositeReadIO.new(*parts)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_empty
|
18
|
+
io = composite_io
|
19
|
+
assert_equal 0, io.length
|
20
|
+
assert_equal "", io.read
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_empty_returns_nil_for_limited_read
|
24
|
+
assert_nil composite_io.read(1)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_empty_parts_returns_nil_for_limited_read
|
28
|
+
io = composite_io(part(""), part(""))
|
29
|
+
assert_nil io.read(1)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_multipart_read_all
|
33
|
+
io = composite_io(part("abcd"), part("1234"))
|
34
|
+
assert_equal 8, io.length
|
35
|
+
assert_equal "abcd1234", io.read
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_multipart_read_limited
|
39
|
+
io = composite_io(part("abcd"), part("1234"))
|
40
|
+
assert_equal "abc", io.read(3)
|
41
|
+
assert_equal "d12", io.read(3)
|
42
|
+
assert_equal "34", io.read(3)
|
43
|
+
assert_equal nil, io.read(3)
|
44
|
+
assert_equal nil, io.read(3)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_multipart_read_limited_size_larger_than_part
|
48
|
+
io = composite_io(part("abcd"), part("1234"))
|
49
|
+
assert_equal "abcd12", io.read(6)
|
50
|
+
assert_equal "34", io.read(6)
|
51
|
+
assert_equal nil, io.read(6)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_multipart_read_with_blank_parts
|
55
|
+
io = composite_io(part(""), part("abcd"), part(""), part("1234"), part(""))
|
56
|
+
assert_equal "abcd12", io.read(6)
|
57
|
+
assert_equal "34", io.read(6)
|
58
|
+
assert_equal nil, io.read(6)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_multipart_rewind
|
62
|
+
io = composite_io(part("abcd"), part("1234"))
|
63
|
+
assert_equal "abc", io.read(3)
|
64
|
+
assert_equal "d12", io.read(3)
|
65
|
+
io.rewind
|
66
|
+
assert_equal "abc", io.read(3)
|
67
|
+
assert_equal "d1234", io.read(5)
|
68
|
+
assert_equal nil, io.read(3)
|
69
|
+
io.rewind
|
70
|
+
assert_equal "ab", io.read(2)
|
71
|
+
end
|
72
|
+
|
73
|
+
if IO.respond_to?(:copy_stream)
|
74
|
+
def test_compatible_with_copy_stream
|
75
|
+
target_io = StringIO.new
|
76
|
+
io = composite_io(part("abcd"), part("1234"))
|
77
|
+
|
78
|
+
Faraday::Timer.timeout(1) do
|
79
|
+
IO.copy_stream(io, target_io)
|
80
|
+
end
|
81
|
+
assert_equal "abcd1234", target_io.string
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
unless RUBY_VERSION < '1.9'
|
86
|
+
def test_read_from_multibyte
|
87
|
+
File.open(File.dirname(__FILE__) + '/multibyte.txt') do |utf8|
|
88
|
+
io = composite_io(part("\x86"), Part.new(utf8))
|
89
|
+
assert_equal bin("\x86\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB\n"), io.read
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_limited_from_multibyte
|
94
|
+
File.open(File.dirname(__FILE__) + '/multibyte.txt') do |utf8|
|
95
|
+
io = composite_io(part("\x86"), Part.new(utf8))
|
96
|
+
assert_equal bin("\x86\xE3\x83"), io.read(3)
|
97
|
+
assert_equal bin("\x95\xE3\x82"), io.read(3)
|
98
|
+
assert_equal bin("\xA1\xE3\x82\xA4\xE3\x83\xAB\n"), io.read(8)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def bin(str)
|
104
|
+
str.force_encoding("BINARY") if str.respond_to?(:force_encoding)
|
105
|
+
str
|
106
|
+
end
|
107
|
+
end
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: faraday
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.8.
|
5
|
+
version: 0.8.6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Rick Olson
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- test/adapters/test_middleware_test.rb
|
111
111
|
- test/adapters/typhoeus_test.rb
|
112
112
|
- test/authentication_middleware_test.rb
|
113
|
+
- test/composite_read_io_test.rb
|
113
114
|
- test/connection_test.rb
|
114
115
|
- test/env_test.rb
|
115
116
|
- test/helper.rb
|