fog 0.0.93 → 0.0.94

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/Gemfile +2 -1
  2. data/Gemfile.lock +13 -7
  3. data/bin/fog +6 -0
  4. data/fog.gemspec +40 -3
  5. data/lib/fog.rb +2 -1
  6. data/lib/fog/aws.rb +12 -8
  7. data/lib/fog/aws/parsers/s3/get_bucket_logging.rb +40 -0
  8. data/lib/fog/aws/parsers/s3/get_bucket_object_versions.rb +88 -0
  9. data/lib/fog/aws/parsers/s3/get_bucket_versioning.rb +24 -0
  10. data/lib/fog/aws/requests/ec2/associate_address.rb +3 -0
  11. data/lib/fog/aws/requests/ec2/describe_instances.rb +4 -3
  12. data/lib/fog/aws/requests/ec2/disassociate_address.rb +4 -0
  13. data/lib/fog/aws/requests/s3/get_bucket.rb +6 -5
  14. data/lib/fog/aws/requests/s3/get_bucket_logging.rb +53 -0
  15. data/lib/fog/aws/requests/s3/get_bucket_object_versions.rb +83 -0
  16. data/lib/fog/aws/requests/s3/get_bucket_versioning.rb +43 -0
  17. data/lib/fog/aws/requests/s3/get_object.rb +6 -1
  18. data/lib/fog/aws/requests/s3/get_object_acl.rb +8 -2
  19. data/lib/fog/aws/requests/s3/head_object.rb +4 -1
  20. data/lib/fog/aws/requests/s3/put_bucket_acl.rb +1 -1
  21. data/lib/fog/aws/requests/s3/put_bucket_logging.rb +87 -0
  22. data/lib/fog/aws/requests/s3/put_bucket_versioning.rb +40 -0
  23. data/lib/fog/aws/s3.rb +9 -1
  24. data/lib/fog/bin.rb +1 -1
  25. data/lib/fog/credentials.rb +6 -2
  26. data/lib/fog/vcloud.rb +288 -0
  27. data/lib/fog/vcloud/bin.rb +57 -0
  28. data/lib/fog/vcloud/parser.rb +34 -0
  29. data/lib/fog/vcloud/parsers/get_organization.rb +37 -0
  30. data/lib/fog/vcloud/parsers/get_vdc.rb +37 -0
  31. data/lib/fog/vcloud/parsers/get_versions.rb +46 -0
  32. data/lib/fog/vcloud/parsers/login.rb +40 -0
  33. data/lib/fog/vcloud/requests/get_organization.rb +55 -0
  34. data/lib/fog/vcloud/requests/get_vdc.rb +59 -0
  35. data/lib/fog/vcloud/requests/get_versions.rb +43 -0
  36. data/lib/fog/vcloud/requests/login.rb +46 -0
  37. data/lib/fog/vcloud/terremark/all.rb +9 -0
  38. data/lib/fog/vcloud/terremark/ecloud.rb +47 -0
  39. data/lib/fog/vcloud/terremark/ecloud/parsers/get_vdc.rb +59 -0
  40. data/lib/fog/vcloud/terremark/ecloud/requests/get_vdc.rb +94 -0
  41. data/lib/fog/vcloud/terremark/ecloud/requests/login.rb +27 -0
  42. data/lib/fog/vcloud/terremark/vcloud.rb +43 -0
  43. data/lib/fog/vcloud/terremark/vcloud/parsers/get_vdc.rb +34 -0
  44. data/lib/fog/vcloud/terremark/vcloud/requests/get_vdc.rb +65 -0
  45. data/spec/aws/requests/ec2/describe_instances_spec.rb +4 -4
  46. data/spec/spec_helper.rb +3 -1
  47. data/spec/vcloud/bin_spec.rb +31 -0
  48. data/spec/vcloud/requests/get_organization_spec.rb +46 -0
  49. data/spec/vcloud/requests/get_vdc_spec.rb +50 -0
  50. data/spec/vcloud/requests/get_versions_spec.rb +28 -0
  51. data/spec/vcloud/requests/login_spec.rb +8 -0
  52. data/spec/vcloud/spec_helper.rb +184 -0
  53. data/spec/vcloud/terremark/ecloud/requests/get_vdc_spec.rb +135 -0
  54. data/spec/vcloud/terremark/ecloud/requests/login_spec.rb +7 -0
  55. data/spec/vcloud/terremark/vcloud/requests/get_vdc_spec.rb +74 -0
  56. data/spec/vcloud/vcloud_spec.rb +17 -0
  57. data/tests/aws/requests/ec2/address_tests.rb +3 -0
  58. metadata +42 -5
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'http://gemcutter.org'
2
2
 
3
3
  gem 'rake'
4
- gem 'excon', '>= 0.0.22'
4
+ gem 'excon', '>= 0.0.24'
5
5
  gem 'formatador', ">= 0.0.10"
6
6
  gem 'json', ">= 0"
7
7
  gem 'mime-types', ">= 0"
@@ -10,3 +10,4 @@ gem 'nokogiri', ">= 0"
10
10
  gem 'ruby-hmac', ">= 0"
11
11
  gem 'rspec', '>= 0'
12
12
  gem 'shindo', '>= 0'
13
+ gem 'builder', '>= 0'
@@ -8,7 +8,7 @@ dependencies:
8
8
  group:
9
9
  - :default
10
10
  version: ">= 0"
11
- ruby-hmac:
11
+ rspec:
12
12
  group:
13
13
  - :default
14
14
  version: ">= 0"
@@ -16,22 +16,26 @@ dependencies:
16
16
  group:
17
17
  - :default
18
18
  version: ">= 0"
19
- rspec:
19
+ ruby-hmac:
20
20
  group:
21
21
  - :default
22
22
  version: ">= 0"
23
- net-ssh:
23
+ json:
24
24
  group:
25
25
  - :default
26
26
  version: ">= 0"
27
- json:
27
+ net-ssh:
28
28
  group:
29
29
  - :default
30
30
  version: ">= 0"
31
31
  excon:
32
32
  group:
33
33
  - :default
34
- version: ">= 0.0.22"
34
+ version: ">= 0.0.24"
35
+ builder:
36
+ group:
37
+ - :default
38
+ version: ">= 0"
35
39
  shindo:
36
40
  group:
37
41
  - :default
@@ -43,8 +47,10 @@ dependencies:
43
47
  specs:
44
48
  - rake:
45
49
  version: 0.8.7
50
+ - builder:
51
+ version: 2.1.2
46
52
  - excon:
47
- version: 0.0.22
53
+ version: 0.0.24
48
54
  - formatador:
49
55
  version: 0.0.14
50
56
  - gestalt:
@@ -63,7 +69,7 @@ specs:
63
69
  version: 0.4.0
64
70
  - shindo:
65
71
  version: 0.0.18
66
- hash: a39d842433b002231eebfd269d32fe72b489b62f
72
+ hash: 9a6ccfd107913e3f8ca98af1fe437f5d2b7b112a
67
73
  sources:
68
74
  - Rubygems:
69
75
  uri: http://gemcutter.org
data/bin/fog CHANGED
@@ -15,6 +15,7 @@ require 'fog/local/bin'
15
15
  require 'fog/rackspace/bin'
16
16
  require 'fog/slicehost/bin'
17
17
  require 'fog/terremark/bin'
18
+ require 'fog/vcloud/bin'
18
19
 
19
20
  if ARGV.length > 1
20
21
  print(instance_eval(ARGV[1..-1].join(' ')).to_json)
@@ -37,6 +38,11 @@ else
37
38
  end
38
39
  print "Welcome to fog interactive!\n"
39
40
  print "Your '#{Fog.credential.to_s}' configuration provides access to #{available_services}.\n"
41
+ Fog.services.each do |service|
42
+ if service.respond_to?(:startup_notice)
43
+ service.send(:startup_notice)
44
+ end
45
+ end
40
46
 
41
47
  catch(:IRB_EXIT) { @irb.eval_input }
42
48
 
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  ## If your rubyforge_project name is different, then edit it and comment out
8
8
  ## the sub! line in the Rakefile
9
9
  s.name = 'fog'
10
- s.version = '0.0.93'
11
- s.date = '2010-05-10'
10
+ s.version = '0.0.94'
11
+ s.date = '2010-05-13'
12
12
  s.rubyforge_project = 'fog'
13
13
 
14
14
  ## Make sure your summary is short. The description may be as long
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
42
42
 
43
43
  ## List your runtime dependencies here. Runtime dependencies are those
44
44
  ## that are needed for an end user to actually USE your code.
45
- s.add_dependency('excon', '>=0.0.23')
45
+ s.add_dependency('excon', '>=0.0.24')
46
46
  s.add_dependency('formatador', '>=0.0.10')
47
47
  s.add_dependency('json')
48
48
  s.add_dependency('mime-types')
@@ -126,6 +126,9 @@ Gem::Specification.new do |s|
126
126
  lib/fog/aws/parsers/s3/copy_object.rb
127
127
  lib/fog/aws/parsers/s3/get_bucket.rb
128
128
  lib/fog/aws/parsers/s3/get_bucket_location.rb
129
+ lib/fog/aws/parsers/s3/get_bucket_logging.rb
130
+ lib/fog/aws/parsers/s3/get_bucket_object_versions.rb
131
+ lib/fog/aws/parsers/s3/get_bucket_versioning.rb
129
132
  lib/fog/aws/parsers/s3/get_request_payment.rb
130
133
  lib/fog/aws/parsers/s3/get_service.rb
131
134
  lib/fog/aws/parsers/simpledb/basic.rb
@@ -178,6 +181,9 @@ Gem::Specification.new do |s|
178
181
  lib/fog/aws/requests/s3/get_bucket.rb
179
182
  lib/fog/aws/requests/s3/get_bucket_acl.rb
180
183
  lib/fog/aws/requests/s3/get_bucket_location.rb
184
+ lib/fog/aws/requests/s3/get_bucket_logging.rb
185
+ lib/fog/aws/requests/s3/get_bucket_object_versions.rb
186
+ lib/fog/aws/requests/s3/get_bucket_versioning.rb
181
187
  lib/fog/aws/requests/s3/get_object.rb
182
188
  lib/fog/aws/requests/s3/get_object_acl.rb
183
189
  lib/fog/aws/requests/s3/get_object_torrent.rb
@@ -187,6 +193,8 @@ Gem::Specification.new do |s|
187
193
  lib/fog/aws/requests/s3/head_object.rb
188
194
  lib/fog/aws/requests/s3/put_bucket.rb
189
195
  lib/fog/aws/requests/s3/put_bucket_acl.rb
196
+ lib/fog/aws/requests/s3/put_bucket_logging.rb
197
+ lib/fog/aws/requests/s3/put_bucket_versioning.rb
190
198
  lib/fog/aws/requests/s3/put_object.rb
191
199
  lib/fog/aws/requests/s3/put_request_payment.rb
192
200
  lib/fog/aws/requests/simpledb/batch_put_attributes.rb
@@ -344,6 +352,25 @@ Gem::Specification.new do |s|
344
352
  lib/fog/terremark/requests/shared/power_shutdown.rb
345
353
  lib/fog/terremark/shared.rb
346
354
  lib/fog/terremark/vcloud.rb
355
+ lib/fog/vcloud.rb
356
+ lib/fog/vcloud/bin.rb
357
+ lib/fog/vcloud/parser.rb
358
+ lib/fog/vcloud/parsers/get_organization.rb
359
+ lib/fog/vcloud/parsers/get_vdc.rb
360
+ lib/fog/vcloud/parsers/get_versions.rb
361
+ lib/fog/vcloud/parsers/login.rb
362
+ lib/fog/vcloud/requests/get_organization.rb
363
+ lib/fog/vcloud/requests/get_vdc.rb
364
+ lib/fog/vcloud/requests/get_versions.rb
365
+ lib/fog/vcloud/requests/login.rb
366
+ lib/fog/vcloud/terremark/all.rb
367
+ lib/fog/vcloud/terremark/ecloud.rb
368
+ lib/fog/vcloud/terremark/ecloud/parsers/get_vdc.rb
369
+ lib/fog/vcloud/terremark/ecloud/requests/get_vdc.rb
370
+ lib/fog/vcloud/terremark/ecloud/requests/login.rb
371
+ lib/fog/vcloud/terremark/vcloud.rb
372
+ lib/fog/vcloud/terremark/vcloud/parsers/get_vdc.rb
373
+ lib/fog/vcloud/terremark/vcloud/requests/get_vdc.rb
347
374
  spec/aws/models/ec2/address_spec.rb
348
375
  spec/aws/models/ec2/addresses_spec.rb
349
376
  spec/aws/models/ec2/flavors_spec.rb
@@ -420,6 +447,16 @@ Gem::Specification.new do |s|
420
447
  spec/slicehost/models/server_spec.rb
421
448
  spec/slicehost/models/servers_spec.rb
422
449
  spec/spec_helper.rb
450
+ spec/vcloud/bin_spec.rb
451
+ spec/vcloud/requests/get_organization_spec.rb
452
+ spec/vcloud/requests/get_vdc_spec.rb
453
+ spec/vcloud/requests/get_versions_spec.rb
454
+ spec/vcloud/requests/login_spec.rb
455
+ spec/vcloud/spec_helper.rb
456
+ spec/vcloud/terremark/ecloud/requests/get_vdc_spec.rb
457
+ spec/vcloud/terremark/ecloud/requests/login_spec.rb
458
+ spec/vcloud/terremark/vcloud/requests/get_vdc_spec.rb
459
+ spec/vcloud/vcloud_spec.rb
423
460
  tests/aws/helper.rb
424
461
  tests/aws/requests/ec2/address_tests.rb
425
462
  tests/aws/requests/ec2/snapshot_tests.rb
data/lib/fog.rb CHANGED
@@ -30,11 +30,12 @@ require 'fog/local'
30
30
  require 'fog/rackspace'
31
31
  require 'fog/slicehost'
32
32
  require 'fog/terremark'
33
+ require 'fog/vcloud'
33
34
 
34
35
  module Fog
35
36
 
36
37
  unless const_defined?(:VERSION)
37
- VERSION = '0.0.93'
38
+ VERSION = '0.0.94'
38
39
  end
39
40
 
40
41
  module Mock
@@ -46,6 +46,14 @@ module Fog
46
46
  sprintf("%0.10f", rand / 100).to_f
47
47
  end
48
48
 
49
+ def self.dns_name_for(ip_address)
50
+ "ec2-#{ip_address.gsub('.','-')}.compute-1.amazonaws.com"
51
+ end
52
+
53
+ def self.private_dns_name_for(ip_address)
54
+ "ip-#{ip_address.gsub('.','-')}.ec2.internal"
55
+ end
56
+
49
57
  def self.console_output
50
58
  'This is my console. There are many like it, but this one is mine. My console is my best friend. It is my life. I must master it as I master my life. My console, without me, is useless. Without my console, I am useless.'
51
59
  end
@@ -164,17 +172,13 @@ module Fog
164
172
  end
165
173
 
166
174
  def self.numbers(length)
167
- random_selection(
168
- '0123456789',
169
- length
170
- )
175
+ max = ('9' * length).to_i
176
+ rand(max).to_s
171
177
  end
172
178
 
173
179
  def self.hex(length)
174
- random_selection(
175
- '0123456789abcdef',
176
- length
177
- )
180
+ max = ('f' * length).to_i(16)
181
+ rand(max).to_s(16)
178
182
  end
179
183
 
180
184
  def self.base64(length)
@@ -0,0 +1,40 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module S3
5
+
6
+ class AccessControlList < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @grant = { 'Grantee' => {} }
10
+ @response = { 'BucketLoggingStatus' => {} }
11
+ end
12
+
13
+ def end_element(name)
14
+ case name
15
+ when 'DisplayName', 'ID'
16
+ if @in_access_control_list
17
+ @grant['Grantee'][name] = @value
18
+ else
19
+ @response['Owner'][name] = @value
20
+ end
21
+ when 'Grant'
22
+ @response['BucketLoggingStatus']['LoggingEnabled']['TargetGrants'] << @grant
23
+ @grant = { 'Grantee' => {} }
24
+ when 'LoggingEnabled'
25
+ @response['BucketLoggingStatus']['LoggingEnabled'] = { 'TargetGrants' => [] }
26
+ when 'Permission'
27
+ @grant[name] = @value
28
+ when 'TargetBucket', 'TargetPrefix'
29
+ @response['BucketLoggingStatus'][name] = @value
30
+ when 'URI'
31
+ @grant['Grantee'][name] = @value
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,88 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module S3
5
+
6
+ class GetBucketObjectVersions < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @delete_marker = { 'Owner' => {} }
10
+ @version = { 'Owner' => {} }
11
+
12
+ @in_delete_marke = false
13
+ @in_version = false
14
+
15
+ @response = { 'Versions' => [] }
16
+ end
17
+
18
+ def start_element(name, attrs = [])
19
+ super
20
+ case name
21
+ when 'DeleteMarker'
22
+ @in_delete_marker = true
23
+ when 'Version'
24
+ @in_version = true
25
+ end
26
+ end
27
+
28
+ def end_element(name)
29
+ case name
30
+ when 'DeleteMarker'
31
+ @response['Versions'] << {'DeleteMarker' => @delete_marker }
32
+ @delete_marker = { 'Owner' => {} }
33
+ @in_delete_marker = false
34
+ when 'Version'
35
+ @response['Versions'] << {'Version' => @version }
36
+ @version = { 'Owner' => {} }
37
+ @in_version = false
38
+ when 'DisplayName', 'ID'
39
+ if @in_delete_marker
40
+ @delete_marker
41
+ elsif @in_version
42
+ @version
43
+ end['Owner'][name] = @value
44
+ when 'ETag'
45
+ @version[name] = @value.gsub('"', '')
46
+ when 'IsLatest'
47
+ if @in_delete_marker
48
+ @delete_marker
49
+ elsif @in_version
50
+ @version
51
+ end['IsLatest'] = if @value == 'true'
52
+ true
53
+ else
54
+ false
55
+ end
56
+ when 'IsTruncated'
57
+ if @value == 'true'
58
+ @response['IsTruncated'] = true
59
+ else
60
+ @response['IsTruncated'] = false
61
+ end
62
+ when 'LastModified'
63
+ if @in_delete_marker
64
+ @delete_marker
65
+ elsif @in_version
66
+ @version
67
+ end['LastModified'] = Time.parse(@value)
68
+ when 'KeyMarker', 'Name', 'Prefix', 'VersionIdMarker'
69
+ @response[name] = @value
70
+ when 'MaxKeys'
71
+ @response['MaxKeys'] = @value.to_i
72
+ when 'Size'
73
+ @version['Size'] = @value.to_i
74
+ when 'Key', 'Name', 'StorageClass', 'VersionId'
75
+ if @in_delete_marker
76
+ @delete_marker
77
+ elsif @in_version
78
+ @version
79
+ end[name] = @value
80
+ end
81
+ end
82
+
83
+ end
84
+
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module S3
5
+
6
+ class GetBucketVersioning < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @response = { 'VersioningConfiguration' => {} }
10
+ end
11
+
12
+ def end_element(name)
13
+ case name
14
+ when 'Status'
15
+ @response['VersioningConfiguration'][name] = @value
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -34,6 +34,9 @@ module Fog
34
34
  address = @data[:addresses][public_ip]
35
35
  if instance && address
36
36
  address['instanceId'] = instance_id
37
+ instance['originalIpAddress'] = instance['ipAddress']
38
+ instance['ipAddress'] = public_ip
39
+ instance['dnsName'] = Fog::AWS::Mock.dns_name_for(public_ip)
37
40
  response.status = 200
38
41
  response.body = {
39
42
  'requestId' => Fog::AWS::Mock.request_id,
@@ -77,9 +77,10 @@ module Fog
77
77
  case instance['instanceState']['name']
78
78
  when 'pending'
79
79
  if Time.now - instance['launchTime'] > Fog::Mock.delay
80
- instance['dnsName'] = "ec2-#{Fog::AWS::Mock.ip_address.gsub('.','-')}.compute-1.amazonaws.com"
80
+ instance['ipAddress'] = Fog::AWS::Mock.ip_address
81
+ instance['dnsName'] = Fog::AWS::Mock.dns_name_for(instance['ipAddress'])
81
82
  instance['privateIpAddress'] = Fog::AWS::Mock.ip_address
82
- instance['privateDnsName'] = "ip-#{instance['privateIpAddress'].gsub('.','-')}.ec2.internal"
83
+ instance['privateDnsName'] = Fog::AWS::Mock.private_dns_name_for(instance['privateIpAddress'])
83
84
  instance['instanceState'] = { 'code' => 16, 'name' => 'running' }
84
85
  end
85
86
  when 'rebooting'
@@ -105,7 +106,7 @@ module Fog
105
106
  'ownerId' => instance['ownerId'],
106
107
  'reservationId' => instance['reservationId']
107
108
  }
108
- reservation_set[instance['reservationId']]['instancesSet'] << instance.reject{|key,value| !['amiLaunchIndex', 'blockDeviceMapping', 'dnsName', 'imageId', 'instanceId', 'instanceState', 'instanceType', 'kernelId', 'keyName', 'launchTime', 'monitoring', 'placement', 'privateDnsName', 'productCodes', 'ramdiskId', 'reason', 'rootDeviceType'].include?(key)}
109
+ reservation_set[instance['reservationId']]['instancesSet'] << instance.reject{|key,value| !['amiLaunchIndex', 'blockDeviceMapping', 'dnsName', 'imageId', 'instanceId', 'instanceState', 'instanceType', 'ipAddress', 'kernelId', 'keyName', 'launchTime', 'monitoring', 'placement', 'privateDnsName', 'privateIpAddress', 'productCodes', 'ramdiskId', 'reason', 'rootDeviceType'].include?(key)}
109
110
  end
110
111
  end
111
112
 
@@ -29,6 +29,10 @@ module Fog
29
29
  response = Excon::Response.new
30
30
  response.status = 200
31
31
  if address = @data[:addresses][public_ip]
32
+ instance_id = address['instanceId']
33
+ instance = @data[:instances][instance_id]
34
+ instance['ipAddress'] = instance['originalIpAddress']
35
+ instance['dnsName'] = Fog::AWS::Mock.dns_name_for(instance['ipAddress'])
32
36
  address['instanceId'] = nil
33
37
  response.status = 200
34
38
  response.body = {
@@ -8,17 +8,18 @@ module Fog
8
8
  # ==== Parameters
9
9
  # * bucket_name<~String> - name of bucket to list object keys from
10
10
  # * options<~Hash> - config arguments for list. Defaults to {}.
11
- # * 'prefix'<~String> - limits object keys to those beginning with its value.
11
+ # * 'delimiter'<~String> - causes keys with the same string between the prefix
12
+ # value and the first occurence of delimiter to be rolled up
12
13
  # * 'marker'<~String> - limits object keys to only those that appear
13
14
  # lexicographically after its value.
14
15
  # * 'max-keys'<~Integer> - limits number of object keys returned
15
- # * 'delimiter'<~String> - causes keys with the same string between the prefix
16
- # value and the first occurence of delimiter to be rolled up
16
+ # * 'prefix'<~String> - limits object keys to those beginning with its value.
17
17
  #
18
18
  # ==== Returns
19
19
  # * response<~Excon::Response>:
20
20
  # * body<~Hash>:
21
21
  # * 'Delimeter'<~String> - Delimiter specified for query
22
+ # * 'IsTruncated'<~Boolean> - Whether or not the listing is truncated
22
23
  # * 'Marker'<~String> - Marker specified for query
23
24
  # * 'MaxKeys'<~Integer> - Maximum number of keys specified for query
24
25
  # * 'Name'<~String> - Name of the bucket
@@ -32,14 +33,14 @@ module Fog
32
33
  # * 'ID'<~String> - Id of object owner
33
34
  # * 'Size'<~Integer> - Size of object
34
35
  # * 'StorageClass'<~String> - Storage class of object
36
+ #
35
37
  def get_bucket(bucket_name, options = {})
36
38
  unless bucket_name
37
39
  raise ArgumentError.new('bucket_name is required')
38
40
  end
39
- options.reject! {|key, value| !['prefix', 'marker', 'max-keys', 'delimiter'].include?(key)}
40
41
  query = ''
41
42
  for key, value in options
42
- query << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')};"
43
+ query << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')}&"
43
44
  end
44
45
  query.chop!
45
46
  request({