awsraw 1.0.0.alpha.1 → 1.0.0.alpha.2
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.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/README.md +29 -25
- data/Rakefile +5 -0
- data/lib/awsraw/s3/canonicalized_resource.rb +12 -3
- data/lib/awsraw/s3/faraday_middleware.rb +3 -2
- data/lib/awsraw/version.rb +1 -1
- data/spec/s3/canonicalized_resource_spec.rb +4 -0
- data/spec/s3/faraday_middleware_spec.rb +24 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64214884680bff94ead6d97622548ca2b2220696
|
4
|
+
data.tar.gz: fb9def9e60782f6a8fcea2925cffffb87df7aa87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efd7197aad5e071fb3706845c324230891b80d736be0fb9eaebe9989a9faf3563abb064f237853c0b6371e99996d4ba0be30b2a63c9bd0abe0f556cd439e84b5
|
7
|
+
data.tar.gz: c460f8556b43325d1355f71aad38fa870122e9d19aa41193e6c9f51808ac09871faf587346676c22c04b1b05e1f485c8dae0176d0bc04a7379f813e3d01da1c1
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,19 +1,36 @@
|
|
1
1
|
# AWSRaw
|
2
2
|
|
3
|
-
A client for [Amazon Web Services](http://www.amazonaws.com/)
|
3
|
+
A client for [Amazon Web Services](http://www.amazonaws.com/) inspired by
|
4
4
|
[FlickRaw](http://hanklords.github.com/flickraw/).
|
5
5
|
|
6
|
+
|
6
7
|
## Background
|
7
8
|
|
8
9
|
AWSRaw has a simple goal: to let you follow the [AWS API
|
9
10
|
docs](http://aws.amazon.com/documentation/), and translate that into Ruby code
|
10
|
-
with the minimum of fuss.
|
11
|
+
with the minimum of fuss. It adds as little abstraction as possible on top of
|
12
|
+
the AWS REST API. (Think of it as the opposite of [fog](http://fog.io).)
|
13
|
+
|
14
|
+
You use a regular HTTP library
|
15
|
+
([Faraday](https://github.com/lostisland/faraday)) to make requests, and AWSRaw
|
16
|
+
provides useful additions like request signing.
|
17
|
+
|
18
|
+
|
19
|
+
## Status [](https://travis-ci.org/envato/awsraw) [](https://codeclimate.com/github/envato/awsraw)
|
11
20
|
|
12
|
-
This is
|
13
|
-
|
21
|
+
This is a pre-release of 1.0, so to install it as a gem you'll need to use `gem
|
22
|
+
install --pre awsraw`, or declare it as `gem 'awsraw', '~>1.0.0.alpha'` in your
|
23
|
+
`Gemfile`.
|
24
|
+
|
25
|
+
1.0 has solid tests, but has only had light use so far, and feedback is
|
26
|
+
definitely welcome.
|
27
|
+
|
28
|
+
So far we've only built S3 support. We'd love to see pull requests for other
|
29
|
+
AWS services.
|
14
30
|
|
15
|
-
|
16
|
-
|
31
|
+
The old, 0.1 version lives on the
|
32
|
+
[0.1-maintenance](https://github.com/envato/awsraw/tree/0.1-maintenance)
|
33
|
+
branch.
|
17
34
|
|
18
35
|
|
19
36
|
## Examples
|
@@ -63,15 +80,15 @@ for all the requests you can make.
|
|
63
80
|
|
64
81
|
#### On request bodies
|
65
82
|
|
66
|
-
If your request has a body and you don't provide a Content-MD5 header for it,
|
67
|
-
AWSRaw will try to calculate one. (The S3 API requires the Content-MD5 header
|
83
|
+
If your request has a body and you don't provide a `Content-MD5` header for it,
|
84
|
+
AWSRaw will try to calculate one. (The S3 API requires the `Content-MD5` header
|
68
85
|
for correct request signing.)
|
69
86
|
|
70
|
-
It can handle the body behaving as either a String or a File
|
71
|
-
something different with the body, you'll need to set the Content-MD5
|
72
|
-
yourself.
|
87
|
+
It can handle the body behaving as either a `String` or a `File`. If you want
|
88
|
+
to do something different with the body, you'll need to set the `Content-MD5`
|
89
|
+
header yourself.
|
73
90
|
|
74
|
-
You must also provide a Content-Type header for your request if there's a
|
91
|
+
You must also provide a `Content-Type` header for your request if there's a
|
75
92
|
request body. AWSRaw will raise an exception if you don't.
|
76
93
|
|
77
94
|
|
@@ -117,19 +134,6 @@ Then get your browser to do an XHR request using the http_post_variables, and
|
|
117
134
|
Bob's your aunty.
|
118
135
|
|
119
136
|
|
120
|
-
## Status
|
121
|
-
|
122
|
-
This is still a bit experimental, and is missing some key features, but what's
|
123
|
-
there is solid and well tested.
|
124
|
-
|
125
|
-
Right now AWSRaw only has direct support for
|
126
|
-
[Faraday](https://github.com/lostisland/faraday), but you could still use it
|
127
|
-
with other client libraries with a bit of work.
|
128
|
-
|
129
|
-
So far we've only built S3 support. We'd love to see pull requests for other
|
130
|
-
AWS services.
|
131
|
-
|
132
|
-
|
133
137
|
## Contributing
|
134
138
|
|
135
139
|
1. Fork it
|
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'uri'
|
2
|
+
require 'cgi'
|
2
3
|
|
3
4
|
module AWSRaw
|
4
5
|
module S3
|
@@ -39,9 +40,17 @@ module AWSRaw
|
|
39
40
|
# that are overridden by parameters, nor does it handle the "delete"
|
40
41
|
# parameter for multi-object Delete requests.
|
41
42
|
def self.canonicalized_subresources(query)
|
42
|
-
query
|
43
|
-
subresources =
|
44
|
-
|
43
|
+
params = CGI.parse(query || "")
|
44
|
+
subresources = params.keys & VALID_SUBRESOURCES
|
45
|
+
return nil if subresources.empty?
|
46
|
+
|
47
|
+
'?' + subresources.sort.collect { |subresource|
|
48
|
+
if params[subresource].empty?
|
49
|
+
subresource
|
50
|
+
else
|
51
|
+
params[subresource].collect { |value| "#{subresource}=#{value}" }
|
52
|
+
end
|
53
|
+
}.flatten.join('&')
|
45
54
|
end
|
46
55
|
|
47
56
|
end
|
@@ -20,7 +20,7 @@ module AWSRaw
|
|
20
20
|
end
|
21
21
|
|
22
22
|
env[:request_headers]['Date'] ||= Time.now.httpdate
|
23
|
-
env[:request_headers]['Content-MD5'] ||= ContentMD5Header.generate_content_md5(env[:body])
|
23
|
+
env[:request_headers]['Content-MD5'] ||= ContentMD5Header.generate_content_md5(env[:body]) if env[:body]
|
24
24
|
|
25
25
|
string_to_sign = StringToSign.string_to_sign(
|
26
26
|
:method => env[:method].to_s.upcase,
|
@@ -32,8 +32,9 @@ module AWSRaw
|
|
32
32
|
)
|
33
33
|
|
34
34
|
env[:request_headers]['Authorization'] = Signature.authorization_header(string_to_sign, @credentials)
|
35
|
-
end
|
36
35
|
|
36
|
+
@app.call(env)
|
37
|
+
end
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
data/lib/awsraw/version.rb
CHANGED
@@ -46,6 +46,10 @@ describe AWSRaw::S3::CanonicalizedResource do
|
|
46
46
|
it "sorts the subresources" do
|
47
47
|
expect(subject.canonicalized_subresources("website&acl")).to eq("?acl&website")
|
48
48
|
end
|
49
|
+
|
50
|
+
it "includes subresources with parameters" do
|
51
|
+
expect(subject.canonicalized_subresources("uploadId=foo")).to eq("?uploadId=foo")
|
52
|
+
end
|
49
53
|
end
|
50
54
|
|
51
55
|
end
|
@@ -10,8 +10,9 @@ describe AWSRaw::S3::FaradayMiddleware do
|
|
10
10
|
)
|
11
11
|
end
|
12
12
|
|
13
|
-
let(:app)
|
14
|
-
let(:time)
|
13
|
+
let(:app) { double("app", :call => response) }
|
14
|
+
let(:time) { Time.parse("2013-09-19 19:22:13 +1000") }
|
15
|
+
let(:response) { double "response" }
|
15
16
|
|
16
17
|
subject { described_class.new(app, credentials) }
|
17
18
|
|
@@ -85,4 +86,25 @@ describe AWSRaw::S3::FaradayMiddleware do
|
|
85
86
|
expect { subject.call(env) }.to raise_error(AWSRaw::Error, "Can't make a request with a body but no Content-Type header")
|
86
87
|
end
|
87
88
|
|
89
|
+
it "does not set the MD5 header if no body is supplied" do
|
90
|
+
env = {
|
91
|
+
:method => :get,
|
92
|
+
:url => "http://s3.amazonaws.com/johnsmith/my-file.txt",
|
93
|
+
:request_headers => { }
|
94
|
+
}
|
95
|
+
subject.call(env)
|
96
|
+
expect(env[:request_headers].keys).to_not include("Content-MD5")
|
97
|
+
end
|
98
|
+
|
99
|
+
it "passes on the call to the app" do
|
100
|
+
env = {
|
101
|
+
:method => :get,
|
102
|
+
:url => "http://s3.amazonaws.com/johnsmith/my-file.txt",
|
103
|
+
:request_headers => { }
|
104
|
+
}
|
105
|
+
|
106
|
+
app.should_receive(:call).with(env)
|
107
|
+
|
108
|
+
subject.call(env)
|
109
|
+
end
|
88
110
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awsraw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.alpha.
|
4
|
+
version: 1.0.0.alpha.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pete Yandell
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-11-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -78,6 +78,8 @@ extensions: []
|
|
78
78
|
extra_rdoc_files: []
|
79
79
|
files:
|
80
80
|
- .gitignore
|
81
|
+
- .rspec
|
82
|
+
- .travis.yml
|
81
83
|
- Gemfile
|
82
84
|
- LICENSE
|
83
85
|
- README.md
|