raws 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Jun Kikuchi
1
+ Copyright (c) 2009, 2010 Jun Kikuchi
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -19,7 +19,7 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
19
19
  RAWS::SQS['test_queue'].send('hello2')
20
20
  RAWS::SQS['test_queue'].send('hello3')
21
21
 
22
- RAWS::SQS['test_queue'].receive(:limit => 10).each do |msg|
22
+ RAWS::SQS['test_queue'].receive.each do |msg|
23
23
  p msg.body
24
24
  msg.delete
25
25
  end
@@ -28,8 +28,6 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
28
28
 
29
29
  === SDB (Amazon SimpleDB)
30
30
 
31
- プリミティブな使い方
32
-
33
31
  require 'rubygems'
34
32
  require 'raws'
35
33
 
@@ -61,8 +59,6 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
61
59
 
62
60
  RAWS::SDB.delete_domain('test_domain')
63
61
 
64
- クラスとして使う場合
65
-
66
62
  require 'rubygems'
67
63
  require 'raws'
68
64
 
@@ -72,8 +68,6 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
72
68
  class Foo
73
69
  include RAWS::SDB::Model
74
70
  self.domain_name = 'test_domain'
75
-
76
- sdb_accessor 'a', 'b'
77
71
  end
78
72
 
79
73
  Foo.create_domain
@@ -88,27 +82,14 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
88
82
  foo2['c'] = '2000'
89
83
  foo2.save
90
84
 
91
- foo3 = Foo.new
92
- foo3.a = ['30a', '30b']
93
- foo3.b = '300'
94
- foo3['c'] = '3000'
95
- foo3.save
96
-
97
85
  Foo.all.each do |a|
98
- p [a.a, a['b'], a['c']]
99
- end
100
-
101
- Foo.all.filter('a = ?', '10').each do |a|
102
- p [a.a, a.b, a['c']]
103
- a.delete
86
+ p [a['a'], a['b'], a['c']]
104
87
  end
105
-
88
+
106
89
  Foo.delete_domain
107
90
 
108
91
  === S3 (Amazon Simple Storage Service)
109
92
 
110
- プリミティブな使い方
111
-
112
93
  require 'rubygems'
113
94
  require 'raws'
114
95
 
@@ -118,11 +99,12 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
118
99
  RAWS::S3.create_bucket('test-bucket')
119
100
 
120
101
  RAWS::S3['test-bucket'].put('helloworld') do |request|
102
+ request.header['x-amz-acl'] = 'public-read'
121
103
  request.header['content-type'] = 'text/plain'
122
- request.header['content-length'] = ("Hello World\n".size * 1000).to_i
104
+ request.header['content-length'] = "Hello World\n".size * 1000
123
105
  request.send do |io|
124
106
  1000.times do
125
- io.write "Hellow World\n"
107
+ io.write "Hello World\n"
126
108
  end
127
109
  end
128
110
  end
@@ -136,11 +118,29 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
136
118
  end
137
119
  end
138
120
  end
121
+
122
+ acl = RAWS::S3['test-bucket'].acl
123
+ p [acl.owner.id, acl.owner.name]
124
+ acl.grants.each do |grant|
125
+ p [grant.permission, grant.class.name]
126
+ end
127
+
128
+ acl = RAWS::S3['test-bucket'].acl('helloworld')
129
+ p [acl.owner.id, acl.owner.name]
130
+ acl.grants.each do |grant|
131
+ p [grant.permission, grant.class.name]
132
+ end
133
+
134
+ acl.grants.delete_if do |grant|
135
+ grant.is_a? RAWS::S3::ACL::AllUsers
136
+ end
137
+ acl.save
138
+
139
+ acl.grants << RAWS::S3::ACL::AllUsers.new('READ')
140
+ acl.save
139
141
 
140
142
  RAWS::S3.delete_bucket('test-bucket')
141
143
 
142
- クラスとして使う場合
143
-
144
144
  require 'rubygems'
145
145
  require 'raws'
146
146
 
@@ -157,11 +157,12 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
157
157
  foo = Foo.new('helloworld')
158
158
  foo.metadata['ja'] = 'こんにちは'
159
159
  foo.send(
160
+ 'x-amz-acl' => 'public-read',
160
161
  'content-type' => 'text/plain',
161
- 'content-length' => ("Hello World\n".size * 1000).to_i
162
+ 'content-length' => "Hello World\n".size * 1000
162
163
  ) do |io|
163
164
  1000.times do
164
- io.write "Hellow World\n"
165
+ io.write "Hello World\n"
165
166
  end
166
167
  end
167
168
 
@@ -173,6 +174,26 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
173
174
  print chunk
174
175
  end
175
176
  end
177
+
178
+ acl = Foo.acl
179
+ p [acl.owner.id, acl.owner.name]
180
+ acl.grants.each do |grant|
181
+ p [grant.permission, grant.class.name]
182
+ end
183
+
184
+ acl = foo.acl
185
+ p [acl.owner.id, acl.owner.name]
186
+ acl.grants.each do |grant|
187
+ p [grant.permission, grant.class.name]
188
+ end
189
+
190
+ acl.grants.delete_if do |grant|
191
+ grant.is_a? RAWS::S3::ACL::AllUsers
192
+ end
193
+ acl.save
194
+
195
+ acl.grants << RAWS::S3::ACL::AllUsers.new('READ')
196
+ acl.save
176
197
 
177
198
  Foo.delete_bucket
178
199
 
@@ -189,4 +210,4 @@ RAWS is a Ruby library for Amazon Web Service (AWS).
189
210
 
190
211
  == Copyright
191
212
 
192
- Copyright (c) 2009 Jun Kikuchi. See LICENSE for details.
213
+ Copyright (c) 2009, 2010 Jun Kikuchi. See LICENSE for details.
data/Rakefile CHANGED
@@ -10,11 +10,11 @@ begin
10
10
  gem.email = "kikuchi@bonnou.com"
11
11
  gem.homepage = "http://github.com/JunKikuchi/raws"
12
12
  gem.authors = ["Jun Kikuchi"]
13
- gem.add_development_dependency "rspec", ">= 1.2.9"
14
- gem.add_dependency 'typhoeus', '>=0.1.9'
15
- gem.add_dependency 'ht2p', '>=0.0.5'
16
- gem.add_dependency 'nokogiri', '>=1.3.3'
17
- gem.add_dependency 'uuidtools', '>=2.0.0'
13
+ gem.add_development_dependency "rspec"
14
+ gem.add_dependency 'typhoeus', '>=0.1.14'
15
+ gem.add_dependency 'ht2p', '>=0.0.7'
16
+ gem.add_dependency 'nokogiri', '>=1.4.1'
17
+ gem.add_dependency 'uuidtools', '>=2.1.1'
18
18
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
19
  end
20
20
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.10
1
+ 0.0.11
data/lib/raws/http.rb CHANGED
@@ -12,6 +12,7 @@ module RAWS
12
12
  attr_reader :response
13
13
 
14
14
  def initialize(response)
15
+ super("code=#{response.code},body=#{response.body}")
15
16
  @response = response
16
17
  end
17
18
  end
data/lib/raws/s3.rb CHANGED
@@ -2,6 +2,8 @@ class RAWS::S3
2
2
  autoload :Metadata, 'raws/s3/metadata'
3
3
  autoload :Adapter, 'raws/s3/adapter'
4
4
  autoload :Model, 'raws/s3/model'
5
+ autoload :Owner, 'raws/s3/owner'
6
+ autoload :ACL, 'raws/s3/acl'
5
7
 
6
8
  class << self
7
9
  include Enumerable
@@ -12,80 +14,97 @@ class RAWS::S3
12
14
  @http ||= RAWS.http
13
15
  end
14
16
 
17
+ # Creates a new bucket and returns the instance of RAWS::S3.
15
18
  def create_bucket(bucket_name, location=nil, header={})
16
- Adapter.put_bucket(bucket_name, location, header)
19
+ Adapter.put_bucket bucket_name, location, header
20
+ self[bucket_name]
17
21
  end
18
22
 
23
+ # Delete the bucket.
19
24
  def delete_bucket(bucket_name, force=nil)
20
- filter(bucket_name).each do |val|
21
- delete(bucket_name, val['Key'])
22
- end if force == :force
25
+ begin
26
+ objects = filter(bucket_name)
27
+ objects.each do |val|
28
+ delete(bucket_name, val['Key'])
29
+ end
30
+ end until objects.empty? if force == :force
23
31
 
24
32
  Adapter.delete_bucket(bucket_name)
25
33
  end
26
34
 
35
+ # Returns the instance of RAWS::S3::Owner.
27
36
  def owner
28
- Adapter.get_service.doc['ListAllMyBucketsResult']['Owner']
37
+ Owner.new Adapter.get_service.doc['ListAllMyBucketsResult']['Owner']
29
38
  end
30
39
 
31
- def list
32
- Adapter.get_service.doc['ListAllMyBucketsResult']
40
+ # Returns an array of RAWS::S3 objects.
41
+ def list_buckets
42
+ doc = Adapter.get_service.doc['ListAllMyBucketsResult']['Buckets']
43
+ if doc
44
+ doc['Bucket'].map do |val|
45
+ self[val['Name']]
46
+ end
47
+ else
48
+ []
49
+ end
33
50
  end
34
51
 
35
- def buckets
36
- begin
37
- response = list
38
- @owner ||= response['Owner']
39
- response['Buckets']['Bucket'] || []
40
- end.map do |val|
41
- self[val['Name']]
52
+ def buckets(&block)
53
+ if block_given?
54
+ each(&block)
55
+ else
56
+ map
42
57
  end
43
58
  end
44
59
 
45
60
  def each(&block)
46
- buckets.each(&block)
61
+ list_buckets.each(&block)
47
62
  end
48
63
 
64
+ # Returns the instance of RAWS::S3.
49
65
  def [](bucket_name)
50
- @cache ||= {}
51
- @cache[bucket_name] ||= self.new(bucket_name)
66
+ self.new bucket_name
52
67
  end
53
68
 
54
69
  def location(bucket_name)
55
- response = Adapter.get_bucket_location(bucket_name)
56
- location = response.doc['LocationConstraint']
57
- location.empty? ? 'US' : location
70
+ doc = Adapter.get_bucket_location(bucket_name).doc['LocationConstraint']
71
+ doc || 'US'
58
72
  end
59
73
 
60
- def filter(bucket_name, params={})
61
- begin
62
- response = Adapter.get_bucket(bucket_name, params)
63
- response.doc['ListBucketResult']['Contents'] || []
64
- end.map do |val|
65
- val
66
- end
74
+ def acl(bucket_name, key=nil)
75
+ ACL.new bucket_name, key
76
+ end
77
+
78
+ def filter(bucket_name, query={})
79
+ vals = Adapter.get_bucket(bucket_name, query).doc['ListBucketResult']
80
+ vals['Contents'] || []
67
81
  end
68
82
  alias :all :filter
69
83
 
70
- def put(bucket_name, name, header={}, &block)
71
- Adapter.put_object(bucket_name, name, header, &block)
84
+ def put_object(bucket_name, key, header={}, &block)
85
+ Adapter.put_object bucket_name, key, header, &block
72
86
  end
87
+ alias :put :put_object
73
88
 
74
- def copy(src_bucket, src_name, dest_bucket, dest_name, header={})
75
- Adapter.copy_object(src_bucket, src_name, dest_bucket, dest_name, header)
89
+ def copy_object(src_bucket, src_key, dest_bucket, dest_key, header={})
90
+ Adapter.copy_object src_bucket, src_key, dest_bucket, dest_key, header
76
91
  end
92
+ alias :copy :copy_object
77
93
 
78
- def get(bucket_name, name, header={}, &block)
79
- Adapter.get_object(bucket_name, name, header, &block)
94
+ def get_object(bucket_name, key, header={}, &block)
95
+ Adapter.get_object bucket_name, key, header, &block
80
96
  end
97
+ alias :get :get_object
81
98
 
82
- def head(bucket_name, name)
83
- Adapter.head_object(bucket_name, name)
99
+ def head_object(bucket_name, key)
100
+ Adapter.head_object bucket_name, key
84
101
  end
102
+ alias :head :head_object
85
103
 
86
- def delete(bucket_name, name)
87
- Adapter.delete_object(bucket_name, name)
104
+ def delete_object(bucket_name, key)
105
+ Adapter.delete_object bucket_name, key
88
106
  end
107
+ alias :delete :delete_object
89
108
  end
90
109
 
91
110
  attr_reader :bucket_name
@@ -96,41 +115,54 @@ class RAWS::S3
96
115
  end
97
116
 
98
117
  def create_bucket(location=nil)
99
- self.class.create_bucket(@bucket_name, location)
118
+ self.class.create_bucket @bucket_name, location
100
119
  end
101
120
 
102
121
  def delete_bucket(force=nil)
103
- self.class.delete_bucket(@bucket_name, force)
122
+ self.class.delete_bucket @bucket_name, force
123
+ end
124
+
125
+ def owner
126
+ self.class.owner
104
127
  end
105
128
 
106
129
  def location
107
- self.class.location(@bucket_name)
130
+ self.class.location @bucket_name
131
+ end
132
+
133
+ def acl(key=nil)
134
+ self.class.acl @bucket_name, key
108
135
  end
109
136
 
110
- def filter(params={})
111
- self.class.filter(@bucket_name, params)
137
+ def filter(query={})
138
+ self.class.filter @bucket_name, query
112
139
  end
113
140
  alias :all :filter
114
141
 
115
- def put(name, header={}, &block)
116
- self.class.put(@bucket_name, name, header, &block)
142
+ def put_object(key, header={}, &block)
143
+ self.class.put_object @bucket_name, key, header, &block
117
144
  end
145
+ alias :put :put_object
118
146
 
119
- def copy(name, dest_bucket, dest_name)
120
- self.class.copy(@bucket_name, name, dest_bucket, dest_name)
147
+ def copy_object(key, dest_bucket, dest_key)
148
+ self.class.copy_object @bucket_name, key, dest_bucket, dest_key
121
149
  end
150
+ alias :copy :copy_object
122
151
 
123
- def get(name, header={}, &block)
124
- self.class.get(@bucket_name, name, header, &block)
152
+ def get_object(key, header={}, &block)
153
+ self.class.get_object @bucket_name, key, header, &block
125
154
  end
155
+ alias :get :get_object
126
156
 
127
- def head(name)
128
- self.class.head(@bucket_name, name)
157
+ def head_object(key)
158
+ self.class.head_object @bucket_name, key
129
159
  end
160
+ alias :head :head_object
130
161
 
131
- def delete(name)
132
- self.class.delete(@bucket_name, name)
162
+ def delete_object(key)
163
+ self.class.delete_object @bucket_name, key
133
164
  end
165
+ alias :delete :delete_object
134
166
 
135
167
  def <=>(a)
136
168
  bucket_name <=> a.bucket_name
@@ -0,0 +1,144 @@
1
+ class RAWS::S3::ACL
2
+ class Owner
3
+ attr_accessor :id, :name
4
+
5
+ alias :display_name :name
6
+
7
+ def initialize(owner)
8
+ @id, @name = owner['ID'], owner['DisplayName']
9
+ end
10
+
11
+ def to_xml
12
+ '<Owner>' <<
13
+ "<ID>#{@id}</ID>" <<
14
+ "<DisplayName>#{@name}</DisplayName>" <<
15
+ '</Owner>'
16
+ end
17
+ end
18
+
19
+ class Grant
20
+ attr_accessor :permission
21
+
22
+ def initialize(permission)
23
+ @permission = permission
24
+ end
25
+
26
+ def to_xml
27
+ "<Permission>#{@permission}</Permission>"
28
+ end
29
+ end
30
+
31
+ class ID < Grant
32
+ attr_accessor :id, :name
33
+
34
+ def initialize(id, permission, name=nil)
35
+ super(permission)
36
+ @id, @name = id, name
37
+ end
38
+
39
+ def to_xml
40
+ '<Grant>' <<
41
+ '<Grantee' <<
42
+ ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' <<
43
+ ' xsi:type="CanonicalUser">' <<
44
+ "<ID>#{@id}</ID>" <<
45
+ (@name ? "<DisplayName>#{@name}</DisplayName>" : '') <<
46
+ '</Grantee>' <<
47
+ super <<
48
+ '</Grant>'
49
+ end
50
+ end
51
+
52
+ class Email < Grant
53
+ attr_accessor :email
54
+
55
+ def initialize(email, permission)
56
+ super(permission)
57
+ @email = email
58
+ end
59
+
60
+ def to_xml
61
+ '<Grant>' <<
62
+ '<Grantee' <<
63
+ ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' <<
64
+ ' xsi:type="AmazonCustomerByEmail">' <<
65
+ "<EmailAddress>#{@email}</EmailAddress>" <<
66
+ '</Grantee>' <<
67
+ super <<
68
+ '</Grant>'
69
+ end
70
+ end
71
+
72
+ class Group < Grant
73
+ def to_xml
74
+ '<Grant>' <<
75
+ '<Grantee' <<
76
+ ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' <<
77
+ ' xsi:type="Group">' <<
78
+ "<URI>http://acs.amazonaws.com/groups/global/#{
79
+ self.class.name.split('::').last
80
+ }</URI>" <<
81
+ '</Grantee>' <<
82
+ super <<
83
+ '</Grant>'
84
+ end
85
+ end
86
+
87
+ class AuthenticatedUsers < Group; end
88
+
89
+ class AllUsers < Group; end
90
+
91
+ class Grants < Array
92
+ def initialize(grants)
93
+ super()
94
+ grants.each do |grant|
95
+ grantee, permission = grant['Grantee'], grant['Permission']
96
+ if id = grantee['ID']
97
+ push ID.new(id, permission, grantee['DisplayName'])
98
+ elsif email = grantee['EmailAddress']
99
+ push Email.new(email, permission)
100
+ else
101
+ case grantee['URI']
102
+ when 'http://acs.amazonaws.com/groups/global/AuthenticatedUsers'
103
+ push AuthenticatedUsers.new(permission)
104
+ when 'http://acs.amazonaws.com/groups/global/AllUsers'
105
+ push AllUsers.new(permission)
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ def to_xml
112
+ '<AccessControlList>' <<
113
+ map do |grant|
114
+ grant.to_xml
115
+ end.join <<
116
+ '</AccessControlList>'
117
+ end
118
+ end
119
+
120
+ attr_reader :bucket_name, :key, :owner, :grants
121
+
122
+ def initialize(bucket_name, key=nil)
123
+ @bucket_name, @key = bucket_name, key
124
+ reload
125
+ end
126
+
127
+ def save
128
+ RAWS::S3::Adapter.put_acl(@bucket_name, @key, to_xml)
129
+ end
130
+
131
+ def reload
132
+ doc = RAWS::S3::Adapter.get_acl(@bucket_name, @key).doc
133
+ acp = doc['AccessControlPolicy']
134
+ @owner = Owner.new(acp['Owner'])
135
+ @grants = Grants.new(acp['AccessControlList']['Grant'])
136
+ end
137
+
138
+ def to_xml
139
+ '<AccessControlPolicy>' <<
140
+ owner.to_xml <<
141
+ grants.to_xml <<
142
+ '</AccessControlPolicy>'
143
+ end
144
+ end