raws 0.0.10 → 0.0.11
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/LICENSE +1 -1
- data/README.rdoc +50 -29
- data/Rakefile +5 -5
- data/VERSION +1 -1
- data/lib/raws/http.rb +1 -0
- data/lib/raws/s3.rb +84 -52
- data/lib/raws/s3/acl.rb +144 -0
- data/lib/raws/s3/adapter.rb +44 -20
- data/lib/raws/s3/metadata.rb +9 -3
- data/lib/raws/s3/model.rb +76 -50
- data/lib/raws/s3/owner.rb +8 -0
- data/lib/raws/sdb.rb +61 -50
- data/lib/raws/sdb/adapter.rb +2 -4
- data/lib/raws/sdb/model.rb +53 -44
- data/lib/raws/sdb/select.rb +1 -1
- data/lib/raws/sqs.rb +155 -89
- data/lib/raws/sqs/adapter.rb +28 -27
- data/lib/raws/sqs/message.rb +39 -0
- data/lib/raws/sqs/model.rb +33 -0
- data/lib/raws/xml.rb +0 -2
- data/lib/raws/xml/nokogiri.rb +4 -1
- data/raws.gemspec +24 -19
- data/spec/raws/s3/acl_spec.rb +30 -0
- data/spec/raws/s3/model_spec.rb +2 -3
- data/spec/raws/s3_spec.rb +34 -36
- data/spec/raws/sdb/model_spec.rb +104 -9
- data/spec/raws/sdb_spec.rb +43 -52
- data/spec/raws/sqs_spec.rb +40 -35
- data/spec/raws_spec.rb +2 -0
- data/spec/spec_config.rb.example +8 -13
- metadata +13 -8
- data/spec/spec.opts +0 -1
data/lib/raws/s3/adapter.rb
CHANGED
@@ -98,10 +98,8 @@ class RAWS::S3::Adapter
|
|
98
98
|
request.header.merge! header
|
99
99
|
response = request.send(
|
100
100
|
if location
|
101
|
-
"<CreateBucketConfiguration>"
|
102
|
-
"<LocationConstraint>#{
|
103
|
-
location
|
104
|
-
}</LocationConstraint>"
|
101
|
+
"<CreateBucketConfiguration>" <<
|
102
|
+
"<LocationConstraint>#{location}</LocationConstraint>" <<
|
105
103
|
"</CreateBucketConfiguration>"
|
106
104
|
end
|
107
105
|
)
|
@@ -117,20 +115,20 @@ class RAWS::S3::Adapter
|
|
117
115
|
:query => {'requestPayment' => nil}
|
118
116
|
) do |request|
|
119
117
|
response = request.send\
|
120
|
-
'<RequestPaymentConfiguration'
|
121
|
-
' xmlns="http://s3.amazonaws.com/doc/2006-03-01/">'
|
122
|
-
"<Payer>#{requester}</Payer>"
|
118
|
+
'<RequestPaymentConfiguration' <<
|
119
|
+
' xmlns="http://s3.amazonaws.com/doc/2006-03-01/">' <<
|
120
|
+
"<Payer>#{requester}</Payer>" <<
|
123
121
|
'</RequestPaymentConfiguration>'
|
124
122
|
response.receive
|
125
123
|
response
|
126
124
|
end
|
127
125
|
end
|
128
126
|
|
129
|
-
def get_bucket(bucket_name,
|
127
|
+
def get_bucket(bucket_name, query={})
|
130
128
|
connect(
|
131
129
|
'GET',
|
132
130
|
:bucket => bucket_name,
|
133
|
-
:query =>
|
131
|
+
:query => query
|
134
132
|
) do |request|
|
135
133
|
response = request.send
|
136
134
|
response.parse :multiple => ['Contents']
|
@@ -162,40 +160,66 @@ class RAWS::S3::Adapter
|
|
162
160
|
end
|
163
161
|
end
|
164
162
|
|
163
|
+
def get_acl(bucket_name, key)
|
164
|
+
connect(
|
165
|
+
'GET',
|
166
|
+
:bucket => bucket_name,
|
167
|
+
:path => "/#{key}",
|
168
|
+
:query => {'acl' => nil}
|
169
|
+
) do |request|
|
170
|
+
response = request.send
|
171
|
+
response.parse :multiple => ['Grant']
|
172
|
+
response
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def put_acl(bucket_name, key, acl)
|
177
|
+
connect(
|
178
|
+
'PUT',
|
179
|
+
:bucket => bucket_name,
|
180
|
+
:path => "/#{key}",
|
181
|
+
:query => {'acl' => nil}
|
182
|
+
) do |request|
|
183
|
+
response = request.send acl
|
184
|
+
response.parse :multiple => ['Grant']
|
185
|
+
response
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
165
189
|
def delete_bucket(bucket_name)
|
166
190
|
connect 'DELETE', :bucket => bucket_name do |request|
|
167
191
|
request.send
|
168
192
|
end
|
169
193
|
end
|
170
194
|
|
171
|
-
def put_object(bucket_name,
|
195
|
+
def put_object(bucket_name, key, header, &block)
|
172
196
|
connect(
|
173
197
|
'PUT',
|
174
198
|
:bucket => bucket_name,
|
175
|
-
:path => '/' <<
|
199
|
+
:path => '/' << key
|
176
200
|
) do |request|
|
177
201
|
request.header.merge!(header)
|
178
202
|
block.call(request)
|
179
203
|
end
|
180
204
|
end
|
181
205
|
|
182
|
-
def copy_object(src_bucket,
|
206
|
+
def copy_object(src_bucket, src_key, dest_bucket, dest_key, header={})
|
183
207
|
connect(
|
184
208
|
'PUT',
|
185
209
|
:bucket => dest_bucket,
|
186
|
-
:path => '/' <<
|
210
|
+
:path => '/' << dest_key
|
187
211
|
) do |request|
|
188
212
|
request.header.merge! header
|
189
|
-
request.header['x-amz-copy-source'] = "/#{src_bucket}/#{
|
213
|
+
request.header['x-amz-copy-source'] = "/#{src_bucket}/#{src_key}"
|
190
214
|
request.send
|
191
215
|
end
|
192
216
|
end
|
193
217
|
|
194
|
-
def get_object(bucket_name,
|
218
|
+
def get_object(bucket_name, key=nil, header={}, &block)
|
195
219
|
connect(
|
196
220
|
'GET',
|
197
221
|
:bucket => bucket_name,
|
198
|
-
:path => "/#{
|
222
|
+
:path => "/#{key}"
|
199
223
|
) do |request|
|
200
224
|
request.header.merge! header
|
201
225
|
if block_given?
|
@@ -208,11 +232,11 @@ class RAWS::S3::Adapter
|
|
208
232
|
end
|
209
233
|
end
|
210
234
|
|
211
|
-
def head_object(bucket_name,
|
235
|
+
def head_object(bucket_name, key)
|
212
236
|
connect(
|
213
237
|
'HEAD',
|
214
238
|
:bucket => bucket_name,
|
215
|
-
:path => '/' <<
|
239
|
+
:path => '/' << key
|
216
240
|
) do |request|
|
217
241
|
response = request.send
|
218
242
|
response.receive
|
@@ -220,11 +244,11 @@ class RAWS::S3::Adapter
|
|
220
244
|
end
|
221
245
|
end
|
222
246
|
|
223
|
-
def delete_object(bucket_name,
|
247
|
+
def delete_object(bucket_name, key)
|
224
248
|
connect(
|
225
249
|
'DELETE',
|
226
250
|
:bucket => bucket_name,
|
227
|
-
:path => '/' <<
|
251
|
+
:path => '/' << key
|
228
252
|
) do |request|
|
229
253
|
response = request.send
|
230
254
|
response.receive
|
data/lib/raws/s3/metadata.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
class RAWS::S3::Metadata < Hash
|
2
2
|
X_AMZ_META = 'x-amz-meta-'
|
3
3
|
|
4
|
-
def initialize(header
|
4
|
+
def initialize(header)
|
5
5
|
super()
|
6
|
+
@header = header
|
6
7
|
decode(header)
|
7
8
|
end
|
8
9
|
|
10
|
+
def reload
|
11
|
+
@header.reload
|
12
|
+
decode(@header)
|
13
|
+
end
|
14
|
+
|
9
15
|
def decode(header)
|
10
16
|
clear
|
11
17
|
header.select do |key, val|
|
@@ -27,10 +33,10 @@ class RAWS::S3::Metadata < Hash
|
|
27
33
|
|
28
34
|
if val.is_a? Array
|
29
35
|
ret[key] = val.map do |v|
|
30
|
-
RAWS.escape
|
36
|
+
RAWS.escape v
|
31
37
|
end.join(',')
|
32
38
|
else
|
33
|
-
ret[key] = RAWS.escape
|
39
|
+
ret[key] = RAWS.escape val
|
34
40
|
end
|
35
41
|
|
36
42
|
ret
|
data/lib/raws/s3/model.rb
CHANGED
@@ -1,32 +1,53 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
1
3
|
module RAWS::S3::Model
|
2
4
|
module ClassMethods
|
5
|
+
include Enumerable
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :bucket,
|
8
|
+
:create_bucket,
|
9
|
+
:delete_bucket,
|
10
|
+
:owner,
|
11
|
+
:location,
|
12
|
+
:acl,
|
13
|
+
:put_object,
|
14
|
+
:put,
|
15
|
+
:copy_object,
|
16
|
+
:copy,
|
17
|
+
:get_object,
|
18
|
+
:get,
|
19
|
+
:delete_object,
|
20
|
+
:delete
|
21
|
+
|
3
22
|
attr_accessor :bucket_name
|
4
23
|
|
5
|
-
def
|
6
|
-
|
24
|
+
def head_object(key)
|
25
|
+
begin
|
26
|
+
bucket.head_object(key).header
|
27
|
+
rescue => e
|
28
|
+
if e.response.code == 404
|
29
|
+
{}
|
30
|
+
else
|
31
|
+
raise e
|
32
|
+
end
|
33
|
+
end
|
7
34
|
end
|
35
|
+
alias :head :head_object
|
8
36
|
|
9
|
-
def
|
10
|
-
RAWS::S3
|
37
|
+
def bucket
|
38
|
+
RAWS::S3[bucket_name]
|
11
39
|
end
|
12
40
|
|
13
41
|
def filter(query={})
|
14
|
-
|
15
|
-
self.new(
|
42
|
+
bucket.filter(query).map do |contents|
|
43
|
+
self.new(contents['Key'])
|
16
44
|
end
|
17
45
|
end
|
18
46
|
alias :all :filter
|
47
|
+
alias :each :filter
|
19
48
|
|
20
|
-
def find(key
|
21
|
-
|
22
|
-
self.new(key, RAWS::S3.head(self.bucket_name, key).header)
|
23
|
-
rescue RAWS::HTTP::Error => e
|
24
|
-
if e.response.code == 404
|
25
|
-
nil
|
26
|
-
else
|
27
|
-
raise e
|
28
|
-
end
|
29
|
-
end
|
49
|
+
def find(key)
|
50
|
+
self.new key, head(key)
|
30
51
|
end
|
31
52
|
end
|
32
53
|
|
@@ -34,59 +55,64 @@ module RAWS::S3::Model
|
|
34
55
|
attr_reader :key
|
35
56
|
|
36
57
|
def initialize(key, header=nil)
|
37
|
-
@key, @header = key, header
|
38
|
-
@metadata = RAWS::S3::Metadata.new(header || {})
|
58
|
+
@key, @header, @metadata = key, header, nil
|
39
59
|
after_initialize
|
40
60
|
end
|
41
61
|
|
42
62
|
def header
|
43
|
-
|
44
|
-
@header = RAWS::S3.head(self.class.bucket_name, @key).header
|
45
|
-
rescue RAWS::HTTP::Error => e
|
46
|
-
if e.response.code == 404
|
47
|
-
{}
|
48
|
-
else
|
49
|
-
raise e
|
50
|
-
end
|
51
|
-
end
|
63
|
+
@header ||= self.class.head(@key)
|
52
64
|
end
|
53
65
|
|
54
66
|
def metadata
|
55
|
-
@
|
67
|
+
@metadata ||= RAWS::S3::Metadata.new header
|
56
68
|
end
|
57
69
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
@metadata.decode(response.header)
|
67
|
-
response
|
68
|
-
end
|
70
|
+
def acl
|
71
|
+
self.class.acl @key
|
72
|
+
end
|
73
|
+
|
74
|
+
def delete
|
75
|
+
before_delete
|
76
|
+
response = self.class.delete_object @key
|
77
|
+
after_delete response
|
69
78
|
end
|
70
79
|
|
71
80
|
def send(header={}, &block)
|
72
|
-
|
73
|
-
|
81
|
+
before_send
|
82
|
+
if @header
|
83
|
+
@header.merge! header
|
84
|
+
else
|
85
|
+
@header = header
|
86
|
+
end
|
87
|
+
response = self.class.put_object(
|
74
88
|
@key,
|
75
|
-
@metadata.encode
|
89
|
+
@header.merge(metadata.encode)
|
76
90
|
) do |request|
|
77
|
-
request.send
|
91
|
+
request.send &block
|
92
|
+
end
|
93
|
+
after_send response
|
94
|
+
end
|
95
|
+
|
96
|
+
def receive(header={}, &block)
|
97
|
+
before_receive
|
98
|
+
ret = self.class.get_object(@key, header) do |request|
|
99
|
+
response = request.send
|
100
|
+
@header = response.header
|
101
|
+
metadata.decode @header
|
102
|
+
response.receive &block
|
103
|
+
response
|
78
104
|
end
|
105
|
+
after_send ret
|
106
|
+
ret
|
79
107
|
end
|
80
108
|
|
81
109
|
def after_initialize; end
|
82
110
|
def before_delete; end
|
83
|
-
def after_delete; end
|
84
|
-
def
|
85
|
-
def
|
86
|
-
def
|
87
|
-
def
|
88
|
-
def before_insert; end
|
89
|
-
def after_insert; end
|
111
|
+
def after_delete(response); end
|
112
|
+
def before_receive; end
|
113
|
+
def after_receive(response); end
|
114
|
+
def before_send; end
|
115
|
+
def after_send(response); end
|
90
116
|
end
|
91
117
|
|
92
118
|
def self.included(mod)
|
data/lib/raws/sdb.rb
CHANGED
@@ -12,81 +12,87 @@ class RAWS::SDB
|
|
12
12
|
@http ||= RAWS.http
|
13
13
|
end
|
14
14
|
|
15
|
+
# Creates a new domain and returns the instance of RAWS:SDB.
|
15
16
|
def create_domain(domain_name)
|
16
17
|
Adapter.create_domain(domain_name)
|
18
|
+
self[domain_name]
|
17
19
|
end
|
18
20
|
|
21
|
+
# Deletes the domain.
|
19
22
|
def delete_domain(domain_name)
|
20
23
|
Adapter.delete_domain(domain_name)
|
21
24
|
end
|
22
25
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
+
# Returns the domain metadata.
|
27
|
+
def domain_metadata(domain_name)
|
28
|
+
Adapter.domain_metadata(domain_name)\
|
29
|
+
['DomainMetadataResponse']['DomainMetadataResult']
|
26
30
|
end
|
27
31
|
|
28
|
-
def
|
29
|
-
doc = Adapter.list_domains(
|
30
|
-
|
31
|
-
end
|
32
|
+
def list_domains(params={})
|
33
|
+
doc = Adapter.list_domains(params)\
|
34
|
+
['ListDomainsResponse']['ListDomainsResult']
|
32
35
|
|
33
|
-
def domains(next_token=nil, max_num=nil)
|
34
|
-
data = list(next_token, max_num)
|
35
36
|
{
|
36
|
-
'Domains' => (
|
37
|
-
|
38
|
-
end,
|
39
|
-
'NextToken' => data['NextToken']
|
37
|
+
'Domains' => (doc ? doc['DomainName'] : []).map do |v| self.new(v) end,
|
38
|
+
'NextToken' => doc && doc['NextToken']
|
40
39
|
}
|
41
40
|
end
|
42
41
|
|
43
|
-
def each(&block)
|
42
|
+
def each(params={}, &block)
|
44
43
|
next_token = nil
|
45
44
|
begin
|
46
|
-
data =
|
45
|
+
data = list_domains(params.merge('NextToken' => next_token))
|
47
46
|
data['Domains'].each(&block)
|
48
47
|
end while next_token = data['NextToken']
|
49
48
|
end
|
50
49
|
|
50
|
+
def domains(&block)
|
51
|
+
if block_given?
|
52
|
+
each(&block)
|
53
|
+
else
|
54
|
+
map
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Returns the instance of RAWS::SDB.
|
51
59
|
def [](domain_name)
|
52
|
-
|
53
|
-
@cache[domain_name] ||= self.new(domain_name)
|
60
|
+
self.new domain_name
|
54
61
|
end
|
55
62
|
|
56
|
-
def select(expr, params=[],
|
63
|
+
def select(expr, params=[], &block)
|
64
|
+
next_token = nil
|
57
65
|
begin
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
data['Item'].each do |val|
|
65
|
-
block.call([val['Name'], val['Attribute']])
|
66
|
-
end if data.key? 'Item'
|
67
|
-
end while next_token = data['NextToken']
|
66
|
+
ret = Adapter.select(expr, params, next_token)\
|
67
|
+
['SelectResponse']['SelectResult']
|
68
|
+
ret['Item'].each do |val|
|
69
|
+
block.call [val['Name'], val['Attribute']]
|
70
|
+
end if ret
|
71
|
+
end while ret && next_token = ret['NextToken']
|
68
72
|
end
|
69
73
|
alias :all :select
|
70
74
|
|
71
|
-
def
|
72
|
-
Adapter.get_attributes(
|
73
|
-
|
74
|
-
|
75
|
-
*attrs
|
76
|
-
)['GetAttributesResponse']['GetAttributesResult']['Attribute']
|
75
|
+
def get_attributes(domain_name, item_name, *attrs)
|
76
|
+
doc = Adapter.get_attributes(domain_name, item_name, *attrs)\
|
77
|
+
['GetAttributesResponse']['GetAttributesResult']
|
78
|
+
doc && doc['Attribute']
|
77
79
|
end
|
80
|
+
alias :get :get_attributes
|
78
81
|
|
79
|
-
def
|
80
|
-
Adapter.put_attributes
|
82
|
+
def put_attributes(domain_name, item_name, attrs={}, *replaces)
|
83
|
+
Adapter.put_attributes domain_name, item_name, attrs, *replaces
|
81
84
|
end
|
85
|
+
alias :put :put_attributes
|
82
86
|
|
83
|
-
def
|
84
|
-
Adapter.batch_put_attributes
|
87
|
+
def batch_put_attributes(domain_name, items={}, replaces={})
|
88
|
+
Adapter.batch_put_attributes domain_name, items, replaces
|
85
89
|
end
|
90
|
+
alias :batch_put :batch_put_attributes
|
86
91
|
|
87
|
-
def
|
88
|
-
Adapter.delete_attributes
|
92
|
+
def delete_attributes(domain_name, item_name, attrs={})
|
93
|
+
Adapter.delete_attributes domain_name, item_name, attrs
|
89
94
|
end
|
95
|
+
alias :delete :delete_attributes
|
90
96
|
end
|
91
97
|
|
92
98
|
attr_reader :domain_name
|
@@ -103,30 +109,35 @@ class RAWS::SDB
|
|
103
109
|
self.class.delete_domain(domain_name)
|
104
110
|
end
|
105
111
|
|
106
|
-
def
|
107
|
-
self.class.
|
112
|
+
def domain_metadata
|
113
|
+
self.class.domain_metadata(domain_name)
|
108
114
|
end
|
115
|
+
alias :metadata :domain_metadata
|
109
116
|
|
110
117
|
def select(output_list='*', &block)
|
111
118
|
Select.new.columns(output_list).from(domain_name, &block)
|
112
119
|
end
|
113
120
|
alias :all :select
|
114
121
|
|
115
|
-
def
|
116
|
-
self.class.
|
122
|
+
def get_attributes(item_name, *attrs)
|
123
|
+
self.class.get_attributes domain_name, item_name, *attrs
|
117
124
|
end
|
125
|
+
alias :get :get_attributes
|
118
126
|
|
119
|
-
def
|
120
|
-
self.class.
|
127
|
+
def put_attributes(item_name, attrs, *replaces)
|
128
|
+
self.class.put_attributes domain_name, item_name, attrs, *replaces
|
121
129
|
end
|
130
|
+
alias :put :put_attributes
|
122
131
|
|
123
|
-
def
|
124
|
-
self.class.
|
132
|
+
def batch_put_attributes(items, replaces={})
|
133
|
+
self.class.batch_put_attributes domain_name, items, replaces
|
125
134
|
end
|
135
|
+
alias :batch_put :batch_put_attributes
|
126
136
|
|
127
|
-
def
|
128
|
-
self.class.
|
137
|
+
def delete_attributes(item_name, attrs={})
|
138
|
+
self.class.delete_attributes domain_name, item_name, attrs
|
129
139
|
end
|
140
|
+
alias :delete :delete_attributes
|
130
141
|
|
131
142
|
def <=>(a)
|
132
143
|
domain_name <=> a.domain_name
|