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.
@@ -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, params={})
127
+ def get_bucket(bucket_name, query={})
130
128
  connect(
131
129
  'GET',
132
130
  :bucket => bucket_name,
133
- :query => params
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, name, header, &block)
195
+ def put_object(bucket_name, key, header, &block)
172
196
  connect(
173
197
  'PUT',
174
198
  :bucket => bucket_name,
175
- :path => '/' << name
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, src_name, dest_bucket, dest_name, header={})
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 => '/' << dest_name
210
+ :path => '/' << dest_key
187
211
  ) do |request|
188
212
  request.header.merge! header
189
- request.header['x-amz-copy-source'] = "/#{src_bucket}/#{src_name}"
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, name=nil, header={}, &block)
218
+ def get_object(bucket_name, key=nil, header={}, &block)
195
219
  connect(
196
220
  'GET',
197
221
  :bucket => bucket_name,
198
- :path => "/#{name}"
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, name)
235
+ def head_object(bucket_name, key)
212
236
  connect(
213
237
  'HEAD',
214
238
  :bucket => bucket_name,
215
- :path => '/' << name
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, name)
247
+ def delete_object(bucket_name, key)
224
248
  connect(
225
249
  'DELETE',
226
250
  :bucket => bucket_name,
227
- :path => '/' << name
251
+ :path => '/' << key
228
252
  ) do |request|
229
253
  response = request.send
230
254
  response.receive
@@ -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(v.strip)
36
+ RAWS.escape v
31
37
  end.join(',')
32
38
  else
33
- ret[key] = RAWS.escape(val.strip)
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 create_bucket
6
- RAWS::S3.create_bucket(self.bucket_name)
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 delete_bucket(force=nil)
10
- RAWS::S3.delete_bucket(self.bucket_name, force)
37
+ def bucket
38
+ RAWS::S3[bucket_name]
11
39
  end
12
40
 
13
41
  def filter(query={})
14
- RAWS::S3.filter(self.bucket_name, query).map do |val|
15
- self.new(val['Key'])
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, header={})
21
- begin
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
- begin
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
- @header ? @metadata : @metadata.decode(header)
67
+ @metadata ||= RAWS::S3::Metadata.new header
56
68
  end
57
69
 
58
- def receive(header={}, &block)
59
- RAWS::S3.get(
60
- self.class.bucket_name,
61
- @key,
62
- header
63
- ) do |request|
64
- response = request.send
65
- response.receive(&block)
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
- RAWS::S3.put(
73
- self.class.bucket_name,
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.merge!(header)
89
+ @header.merge(metadata.encode)
76
90
  ) do |request|
77
- request.send(&block)
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 before_save; end
85
- def after_save; end
86
- def before_update; end
87
- def after_update; end
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)
@@ -0,0 +1,8 @@
1
+ class RAWS::S3::Owner
2
+ attr_reader :id, :display_name
3
+ alias :name :display_name
4
+
5
+ def initialize(owner)
6
+ @id, @display_name = owner['ID'], owner['DisplayName']
7
+ end
8
+ end
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
- def metadata(domain_name)
24
- doc = Adapter.domain_metadata(domain_name)
25
- doc['DomainMetadataResponse']['DomainMetadataResult']
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 list(next_token=nil, max_num=nil)
29
- doc = Adapter.list_domains(next_token, max_num)
30
- doc['ListDomainsResponse']['ListDomainsResult']
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' => (data['DomainName'] || []).map do |val|
37
- self.new(val)
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 = domains(next_token)
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
- @cache ||= {}
53
- @cache[domain_name] ||= self.new(domain_name)
60
+ self.new domain_name
54
61
  end
55
62
 
56
- def select(expr, params=[], next_token=nil, &block)
63
+ def select(expr, params=[], &block)
64
+ next_token = nil
57
65
  begin
58
- data = Adapter.select(
59
- expr,
60
- params,
61
- next_token
62
- )['SelectResponse']['SelectResult']
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 get(domain_name, item_name, *attrs)
72
- Adapter.get_attributes(
73
- domain_name,
74
- item_name,
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 put(domain_name, item_name, attrs={}, *replaces)
80
- Adapter.put_attributes(domain_name, item_name, attrs, *replaces)
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 batch_put(domain_name, items={}, replaces={})
84
- Adapter.batch_put_attributes(domain_name, items, replaces)
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 delete(domain_name, item_name, attrs={})
88
- Adapter.delete_attributes(domain_name, item_name, attrs)
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 metadata
107
- self.class.metadata(domain_name)
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 get(item_name, *attrs)
116
- self.class.get(domain_name, item_name, *attrs)
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 put(item_name, attrs={}, *replaces)
120
- self.class.put(domain_name, item_name, attrs, *replaces)
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 batch_put(items={}, replaces={})
124
- self.class.batch_put(domain_name, items, replaces)
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 delete(item_name, attrs={})
128
- self.class.delete(domain_name, item_name, attrs)
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