s3 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -4
- data/lib/s3.rb +1 -0
- data/lib/s3/connection.rb +4 -1
- data/lib/s3/object.rb +8 -10
- data/lib/s3/request.rb +31 -0
- data/lib/s3/version.rb +1 -1
- data/s3.gemspec +0 -1
- metadata +10 -22
data/Gemfile.lock
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
s3 (0.3.
|
5
|
-
http_connection
|
4
|
+
s3 (0.3.7)
|
6
5
|
proxies
|
7
6
|
|
8
7
|
GEM
|
9
8
|
remote: http://rubygems.org/
|
10
9
|
specs:
|
11
|
-
http_connection (1.3.1)
|
12
10
|
mocha (0.9.8)
|
13
11
|
rake
|
14
12
|
proxies (0.2.1)
|
@@ -20,7 +18,6 @@ PLATFORMS
|
|
20
18
|
|
21
19
|
DEPENDENCIES
|
22
20
|
bundler (>= 1.0.0)
|
23
|
-
http_connection
|
24
21
|
mocha
|
25
22
|
proxies
|
26
23
|
s3!
|
data/lib/s3.rb
CHANGED
data/lib/s3/connection.rb
CHANGED
@@ -21,6 +21,8 @@ module S3
|
|
21
21
|
# * <tt>:proxy</tt> - Hash for Net::HTTP Proxy settings
|
22
22
|
# { :host => "proxy.mydomain.com", :port => "80, :user => "user_a", :password => "secret" }
|
23
23
|
# * <tt>:proxy</tt> - Hash for Net::HTTP Proxy settings
|
24
|
+
# * <tt>:chunk_size</tt> - Size of a chunk when streaming
|
25
|
+
# (1048576 (1 MiB) by default)
|
24
26
|
def initialize(options = {})
|
25
27
|
@access_key_id = options.fetch(:access_key_id)
|
26
28
|
@secret_access_key = options.fetch(:secret_access_key)
|
@@ -28,6 +30,7 @@ module S3
|
|
28
30
|
@debug = options.fetch(:debug, false)
|
29
31
|
@timeout = options.fetch(:timeout, 60)
|
30
32
|
@proxy = options.fetch(:proxy, nil)
|
33
|
+
@chunk_size = options.fetch(:chunk_size, 1048576)
|
31
34
|
end
|
32
35
|
|
33
36
|
# Makes request with given HTTP method, sets missing parameters,
|
@@ -64,7 +67,7 @@ module S3
|
|
64
67
|
end
|
65
68
|
|
66
69
|
path = URI.escape(path)
|
67
|
-
request =
|
70
|
+
request = Request.new(@chunk_size, method.to_s.upcase, !!body, method.to_s.upcase != "HEAD", path)
|
68
71
|
|
69
72
|
headers = self.class.parse_headers(headers)
|
70
73
|
headers.each do |key, value|
|
data/lib/s3/object.rb
CHANGED
@@ -73,9 +73,7 @@ module S3
|
|
73
73
|
# Download the content of the object, and caches it. Pass true
|
74
74
|
# to clear the cache and download the object again.
|
75
75
|
def content(reload = false)
|
76
|
-
if reload or @content.nil?
|
77
|
-
get_object
|
78
|
-
end
|
76
|
+
get_object if reload or @content.nil?
|
79
77
|
@content
|
80
78
|
end
|
81
79
|
|
@@ -236,13 +234,13 @@ module S3
|
|
236
234
|
end
|
237
235
|
|
238
236
|
def parse_headers(response)
|
239
|
-
self.etag = response["etag"]
|
240
|
-
self.content_type = response["content-type"]
|
241
|
-
self.content_disposition = response["content-disposition"]
|
242
|
-
self.cache_control = response["cache-control"]
|
243
|
-
self.content_encoding = response["content-encoding"]
|
244
|
-
self.last_modified = response["last-modified"]
|
245
|
-
if response
|
237
|
+
self.etag = response["etag"] if response.key?("etag")
|
238
|
+
self.content_type = response["content-type"] if response.key?("content-type")
|
239
|
+
self.content_disposition = response["content-disposition"] if response.key?("content-disposition")
|
240
|
+
self.cache_control = response["cache-control"] if response.key?("cache-control")
|
241
|
+
self.content_encoding = response["content-encoding"] if response.key?("content-encoding")
|
242
|
+
self.last_modified = response["last-modified"] if response.key?("last-modified")
|
243
|
+
if response.key?("content-range")
|
246
244
|
self.size = response["content-range"].sub(/[^\/]+\//, "").to_i
|
247
245
|
else
|
248
246
|
self.size = response["content-length"]
|
data/lib/s3/request.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module S3
|
2
|
+
# Class responsible for sending chunked requests
|
3
|
+
# properly. Net::HTTPGenericRequest has hardcoded chunk_size, so we
|
4
|
+
# inherit the class and override chunk_size.
|
5
|
+
class Request < Net::HTTPGenericRequest
|
6
|
+
def initialize(chunk_size, m, reqbody, resbody, path, initheader = nil)
|
7
|
+
@chunk_size = chunk_size
|
8
|
+
super(m, reqbody, resbody, path, initheader)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def send_request_with_body_stream(sock, ver, path, f)
|
14
|
+
unless content_length() or chunked?
|
15
|
+
raise ArgumentError, "Content-Length not given and Transfer-Encoding is not `chunked'"
|
16
|
+
end
|
17
|
+
supply_default_content_type
|
18
|
+
write_header sock, ver, path
|
19
|
+
if chunked?
|
20
|
+
while s = f.read(@chunk_size)
|
21
|
+
sock.write(sprintf("%x\r\n", s.length) << s << "\r\n")
|
22
|
+
end
|
23
|
+
sock.write "0\r\n\r\n"
|
24
|
+
else
|
25
|
+
while s = f.read(@chunk_size)
|
26
|
+
sock.write s
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/s3/version.rb
CHANGED
data/s3.gemspec
CHANGED
@@ -16,7 +16,6 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.rubyforge_project = "s3"
|
17
17
|
|
18
18
|
s.add_dependency "proxies"
|
19
|
-
s.add_dependency "http_connection"
|
20
19
|
s.add_development_dependency "test-unit", ">= 2.0"
|
21
20
|
s.add_development_dependency "mocha"
|
22
21
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 7
|
9
|
+
version: 0.3.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- "Jakub Ku\xC5\xBAma"
|
@@ -30,22 +30,9 @@ dependencies:
|
|
30
30
|
type: :runtime
|
31
31
|
prerelease: false
|
32
32
|
version_requirements: *id001
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: http_connection
|
35
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
-
none: false
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
segments:
|
41
|
-
- 0
|
42
|
-
version: "0"
|
43
|
-
type: :runtime
|
44
|
-
prerelease: false
|
45
|
-
version_requirements: *id002
|
46
33
|
- !ruby/object:Gem::Dependency
|
47
34
|
name: test-unit
|
48
|
-
requirement: &
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
49
36
|
none: false
|
50
37
|
requirements:
|
51
38
|
- - ">="
|
@@ -56,10 +43,10 @@ dependencies:
|
|
56
43
|
version: "2.0"
|
57
44
|
type: :development
|
58
45
|
prerelease: false
|
59
|
-
version_requirements: *
|
46
|
+
version_requirements: *id002
|
60
47
|
- !ruby/object:Gem::Dependency
|
61
48
|
name: mocha
|
62
|
-
requirement: &
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
63
50
|
none: false
|
64
51
|
requirements:
|
65
52
|
- - ">="
|
@@ -69,10 +56,10 @@ dependencies:
|
|
69
56
|
version: "0"
|
70
57
|
type: :development
|
71
58
|
prerelease: false
|
72
|
-
version_requirements: *
|
59
|
+
version_requirements: *id003
|
73
60
|
- !ruby/object:Gem::Dependency
|
74
61
|
name: bundler
|
75
|
-
requirement: &
|
62
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
76
63
|
none: false
|
77
64
|
requirements:
|
78
65
|
- - ">="
|
@@ -84,7 +71,7 @@ dependencies:
|
|
84
71
|
version: 1.0.0
|
85
72
|
type: :development
|
86
73
|
prerelease: false
|
87
|
-
version_requirements: *
|
74
|
+
version_requirements: *id004
|
88
75
|
description: "S3 library provides access to Amazon's Simple Storage Service. It supports both: European and US buckets through REST API."
|
89
76
|
email:
|
90
77
|
- qoobaa@gmail.com
|
@@ -111,6 +98,7 @@ files:
|
|
111
98
|
- lib/s3/object.rb
|
112
99
|
- lib/s3/objects_extension.rb
|
113
100
|
- lib/s3/parser.rb
|
101
|
+
- lib/s3/request.rb
|
114
102
|
- lib/s3/service.rb
|
115
103
|
- lib/s3/signature.rb
|
116
104
|
- lib/s3/version.rb
|
@@ -135,7 +123,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
123
|
requirements:
|
136
124
|
- - ">="
|
137
125
|
- !ruby/object:Gem::Version
|
138
|
-
hash:
|
126
|
+
hash: 3296897330677873024
|
139
127
|
segments:
|
140
128
|
- 0
|
141
129
|
version: "0"
|