fog 0.3.13 → 0.3.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/Gemfile.lock +1 -1
  2. data/fog.gemspec +26 -20
  3. data/lib/fog.rb +1 -11
  4. data/lib/fog/aws.rb +5 -0
  5. data/lib/fog/aws/bin.rb +5 -1
  6. data/lib/fog/aws/cdn.rb +98 -0
  7. data/lib/fog/aws/iam.rb +86 -0
  8. data/lib/fog/aws/models/compute/volume.rb +10 -0
  9. data/lib/fog/aws/models/storage/directory.rb +11 -0
  10. data/lib/fog/aws/models/storage/file.rb +9 -11
  11. data/lib/fog/aws/parsers/cdn/distribution.rb +44 -0
  12. data/lib/fog/aws/parsers/cdn/get_distribution_list.rb +48 -0
  13. data/lib/fog/aws/parsers/cdn/post_invalidation.rb +28 -0
  14. data/lib/fog/aws/parsers/iam/basic.rb +19 -0
  15. data/lib/fog/aws/parsers/iam/create_group.rb +26 -0
  16. data/lib/fog/aws/parsers/iam/list_groups.rb +32 -0
  17. data/lib/fog/aws/requests/cdn/delete_distribution.rb +36 -0
  18. data/lib/fog/aws/requests/cdn/get_distribution.rb +55 -0
  19. data/lib/fog/aws/requests/cdn/get_distribution_list.rb +59 -0
  20. data/lib/fog/aws/requests/cdn/post_distribution.rb +88 -0
  21. data/lib/fog/aws/requests/cdn/post_invalidation.rb +59 -0
  22. data/lib/fog/aws/requests/compute/create_volume.rb +1 -0
  23. data/lib/fog/aws/requests/compute/describe_snapshots.rb +3 -0
  24. data/lib/fog/aws/requests/iam/create_group.rb +43 -0
  25. data/lib/fog/aws/requests/iam/delete_group.rb +36 -0
  26. data/lib/fog/aws/requests/iam/list_groups.rb +45 -0
  27. data/lib/fog/aws/requests/storage/copy_object.rb +4 -1
  28. data/lib/fog/aws/requests/storage/delete_bucket.rb +5 -1
  29. data/lib/fog/aws/requests/storage/delete_object.rb +5 -1
  30. data/lib/fog/aws/requests/storage/get_bucket.rb +4 -1
  31. data/lib/fog/aws/requests/storage/get_bucket_acl.rb +4 -1
  32. data/lib/fog/aws/requests/storage/get_bucket_location.rb +5 -1
  33. data/lib/fog/aws/requests/storage/get_bucket_logging.rb +4 -1
  34. data/lib/fog/aws/requests/storage/get_bucket_object_versions.rb +4 -1
  35. data/lib/fog/aws/requests/storage/get_bucket_versioning.rb +4 -1
  36. data/lib/fog/aws/requests/storage/get_object.rb +4 -1
  37. data/lib/fog/aws/requests/storage/get_object_acl.rb +4 -1
  38. data/lib/fog/aws/requests/storage/get_object_torrent.rb +4 -1
  39. data/lib/fog/aws/requests/storage/get_object_url.rb +4 -1
  40. data/lib/fog/aws/requests/storage/get_request_payment.rb +5 -1
  41. data/lib/fog/aws/requests/storage/get_service.rb +5 -1
  42. data/lib/fog/aws/requests/storage/head_object.rb +5 -1
  43. data/lib/fog/aws/requests/storage/post_object_hidden_fields.rb +4 -3
  44. data/lib/fog/aws/requests/storage/put_bucket.rb +11 -6
  45. data/lib/fog/aws/requests/storage/put_bucket_acl.rb +5 -1
  46. data/lib/fog/aws/requests/storage/put_bucket_logging.rb +5 -1
  47. data/lib/fog/aws/requests/storage/put_bucket_versioning.rb +5 -1
  48. data/lib/fog/aws/requests/storage/put_object.rb +5 -1
  49. data/lib/fog/aws/requests/storage/put_object_url.rb +4 -1
  50. data/lib/fog/aws/requests/storage/put_request_payment.rb +5 -1
  51. data/lib/fog/aws/storage.rb +2 -0
  52. data/lib/fog/bluebox/compute.rb +1 -0
  53. data/lib/fog/core.rb +4 -2
  54. data/lib/fog/core/attributes.rb +9 -5
  55. data/lib/fog/core/compute.rb +33 -0
  56. data/lib/fog/core/credentials.rb +0 -1
  57. data/lib/fog/core/model.rb +2 -11
  58. data/lib/fog/core/ssh.rb +1 -0
  59. data/lib/fog/core/storage.rb +24 -0
  60. data/lib/fog/go_grid/compute.rb +2 -0
  61. data/lib/fog/google.rb +3 -0
  62. data/lib/fog/google/models/storage/directory.rb +11 -0
  63. data/lib/fog/google/models/storage/file.rb +19 -10
  64. data/lib/fog/google/requests/storage/put_bucket.rb +5 -4
  65. data/lib/fog/google/storage.rb +2 -0
  66. data/lib/fog/linode/compute.rb +1 -0
  67. data/lib/fog/new_servers.rb +3 -0
  68. data/lib/fog/rackspace.rb +1 -0
  69. data/lib/fog/rackspace/bin.rb +3 -1
  70. data/lib/fog/rackspace/cdn.rb +81 -0
  71. data/lib/fog/rackspace/compute.rb +1 -0
  72. data/lib/fog/rackspace/models/storage/file.rb +2 -2
  73. data/lib/fog/rackspace/requests/{storage → cdn}/get_cdn_containers.rb +1 -1
  74. data/lib/fog/rackspace/requests/{storage → cdn}/head_cdn_container.rb +1 -1
  75. data/lib/fog/rackspace/requests/{storage → cdn}/put_cdn_container.rb +1 -1
  76. data/lib/fog/rackspace/requests/storage/delete_container.rb +1 -1
  77. data/lib/fog/rackspace/requests/storage/delete_object.rb +1 -1
  78. data/lib/fog/rackspace/requests/storage/get_container.rb +1 -1
  79. data/lib/fog/rackspace/requests/storage/get_containers.rb +1 -1
  80. data/lib/fog/rackspace/requests/storage/get_object.rb +1 -1
  81. data/lib/fog/rackspace/requests/storage/head_container.rb +1 -1
  82. data/lib/fog/rackspace/requests/storage/head_containers.rb +1 -1
  83. data/lib/fog/rackspace/requests/storage/head_object.rb +1 -1
  84. data/lib/fog/rackspace/requests/storage/put_container.rb +1 -1
  85. data/lib/fog/rackspace/requests/storage/put_object.rb +1 -1
  86. data/lib/fog/rackspace/storage.rb +13 -47
  87. data/lib/fog/slicehost.rb +4 -1
  88. data/lib/fog/terremark.rb +3 -0
  89. data/lib/fog/vcloud.rb +3 -0
  90. data/spec/aws/models/storage/directory_spec.rb +1 -0
  91. data/spec/bluebox/models/compute/flavors_spec.rb +5 -2
  92. data/spec/bluebox/models/compute/server_spec.rb +5 -1
  93. data/spec/bluebox/models/compute/servers_spec.rb +5 -1
  94. data/spec/google/models/storage/files_spec.rb +1 -2
  95. data/spec/rackspace/models/compute/flavors_spec.rb +5 -1
  96. data/spec/rackspace/models/compute/server_spec.rb +5 -1
  97. data/spec/slicehost/models/compute/flavors_spec.rb +5 -1
  98. data/spec/slicehost/models/compute/server_spec.rb +5 -1
  99. data/spec/slicehost/models/compute/servers_spec.rb +5 -1
  100. data/tests/aws/requests/compute/volume_tests.rb +8 -7
  101. data/tests/aws/requests/storage/bucket_tests.rb +55 -0
  102. data/tests/aws/requests/storage/object_tests.rb +18 -0
  103. data/tests/rackspace/requests/storage/container_tests.rb +64 -0
  104. data/tests/rackspace/requests/storage/object_tests.rb +69 -0
  105. metadata +27 -21
  106. data/spec/aws/requests/storage/copy_object_spec.rb +0 -61
  107. data/spec/aws/requests/storage/get_bucket_location_spec.rb +0 -30
  108. data/spec/aws/requests/storage/get_bucket_spec.rb +0 -114
  109. data/spec/aws/requests/storage/get_request_payment_spec.rb +0 -30
  110. data/spec/aws/requests/storage/put_request_payment_spec.rb +0 -29
  111. data/spec/rackspace/requests/storage/delete_container_spec.rb +0 -24
  112. data/spec/rackspace/requests/storage/delete_object_spec.rb +0 -37
  113. data/spec/rackspace/requests/storage/get_container_spec.rb +0 -35
  114. data/spec/rackspace/requests/storage/get_containers_spec.rb +0 -22
  115. data/spec/rackspace/requests/storage/get_object_spec.rb +0 -21
  116. data/spec/rackspace/requests/storage/head_container_spec.rb +0 -30
  117. data/spec/rackspace/requests/storage/head_containers_spec.rb +0 -19
  118. data/spec/rackspace/requests/storage/head_object_spec.rb +0 -21
  119. data/spec/rackspace/requests/storage/put_container_spec.rb +0 -15
  120. data/spec/rackspace/requests/storage/put_object_spec.rb +0 -20
@@ -14,6 +14,10 @@ module Fog
14
14
  # * response<~Excon::Response>:
15
15
  # * body<~Hash>:
16
16
  # * 'Payer'<~String> - Specifies who pays for download and requests
17
+ #
18
+ # ==== See Also
19
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTrequestPaymentGET.html
20
+
17
21
  def get_request_payment(bucket_name)
18
22
  request({
19
23
  :expects => 200,
@@ -28,7 +32,7 @@ module Fog
28
32
 
29
33
  end
30
34
 
31
- class Mock
35
+ class Mock # :nodoc:all
32
36
 
33
37
  def get_request_payment(bucket_name)
34
38
  response = Excon::Response.new
@@ -16,6 +16,10 @@ module Fog
16
16
  # * 'Owner'<~Hash>:
17
17
  # * 'DisplayName'<~String> - Display name of bucket owner
18
18
  # * 'ID'<~String> - Id of bucket owner
19
+ #
20
+ # ==== See Also
21
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTServiceGET.html
22
+
19
23
  def get_service
20
24
  request({
21
25
  :expects => 200,
@@ -30,7 +34,7 @@ module Fog
30
34
 
31
35
  end
32
36
 
33
- class Mock
37
+ class Mock # :nodoc:all
34
38
 
35
39
  def get_service
36
40
  response = Excon::Response.new
@@ -24,6 +24,10 @@ module Fog
24
24
  # * 'Content-Type'<~String> - MIME type of object
25
25
  # * 'ETag'<~String> - Etag of object
26
26
  # * 'Last-Modified'<~String> - Last modified timestamp for object
27
+ #
28
+ # ==== See Also
29
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectHEAD.html
30
+
27
31
  def head_object(bucket_name, object_name, options={})
28
32
  unless bucket_name
29
33
  raise ArgumentError.new('bucket_name is required')
@@ -50,7 +54,7 @@ module Fog
50
54
 
51
55
  end
52
56
 
53
- class Mock
57
+ class Mock # :nodoc:all
54
58
 
55
59
  def head_object(bucket_name, object_name, options = {})
56
60
  response = get_object(bucket_name, object_name, options)
@@ -22,8 +22,9 @@ module Fog
22
22
  # * x-amz-security-token - devpay security token
23
23
  # * x-amz-meta-... - meta data tags
24
24
  #
25
- # See also: http://docs.amazonwebservices.com/AmazonS3/latest/dev/HTTPPOSTForms.html
26
- #
25
+ # ==== See Also
26
+ # http://docs.amazonwebservices.com/AmazonS3/latest/dev/HTTPPOSTForms.html
27
+
27
28
  def post_object_hidden_fields(options = {})
28
29
  if options['policy']
29
30
  options['policy'] = options['policy'].to_json
@@ -37,7 +38,7 @@ module Fog
37
38
 
38
39
  end
39
40
 
40
- class Mock
41
+ class Mock # :nodoc:all
41
42
 
42
43
  def post_object_hidden_fields(options = {})
43
44
  Fog::Mock.not_implemented
@@ -8,17 +8,22 @@ module Fog
8
8
  # ==== Parameters
9
9
  # * bucket_name<~String> - name of bucket to create
10
10
  # * options<~Hash> - config arguments for bucket. Defaults to {}.
11
- # * :location_constraint<~Symbol> - sets the location for the bucket
11
+ # * 'LocationConstraint'<~Symbol> - sets the location for the bucket
12
+ # * 'x-amz-acl'<~String> - Permissions, must be in ['private', 'public-read', 'public-read-write', 'authenticated-read']
12
13
  #
13
14
  # ==== Returns
14
15
  # * response<~Excon::Response>:
15
16
  # * status<~Integer> - 200
17
+ #
18
+ # ==== See Also
19
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUT.html
20
+
16
21
  def put_bucket(bucket_name, options = {})
17
- if options['LocationConstraint']
22
+ if location_constraint = options.delete('LocationConstraint')
18
23
  data =
19
24
  <<-DATA
20
25
  <CreateBucketConfiguration>
21
- <LocationConstraint>#{options['LocationConstraint']}</LocationConstraint>
26
+ <LocationConstraint>#{location_constraint}</LocationConstraint>
22
27
  </CreateBucketConfiguration>
23
28
  DATA
24
29
  else
@@ -27,7 +32,7 @@ DATA
27
32
  request({
28
33
  :expects => 200,
29
34
  :body => data,
30
- :headers => {},
35
+ :headers => options,
31
36
  :idempotent => true,
32
37
  :host => "#{bucket_name}.#{@host}",
33
38
  :method => 'PUT'
@@ -36,7 +41,7 @@ DATA
36
41
 
37
42
  end
38
43
 
39
- class Mock
44
+ class Mock # :nodoc:all
40
45
 
41
46
  def put_bucket(bucket_name, options = {})
42
47
  response = Excon::Response.new
@@ -51,7 +56,7 @@ DATA
51
56
  if options['LocationConstraint']
52
57
  bucket['LocationConstraint'] = options['LocationConstraint']
53
58
  else
54
- bucket['LocationConstraint'] = ''
59
+ bucket['LocationConstraint'] = nil
55
60
  end
56
61
  unless @data[:buckets][bucket_name]
57
62
  @data[:buckets][bucket_name] = bucket
@@ -20,6 +20,10 @@ module Fog
20
20
  # or
21
21
  # * 'URI'<~String> - URI of group to grant access for
22
22
  # * Permission<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]
23
+ #
24
+ # ==== See Also
25
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTacl.html
26
+
23
27
  def put_bucket_acl(bucket_name, acl)
24
28
  data =
25
29
  <<-DATA
@@ -68,7 +72,7 @@ DATA
68
72
 
69
73
  end
70
74
 
71
- class Mock
75
+ class Mock # :nodoc:all
72
76
 
73
77
  def put_bucket_acl(bucket_name, acl)
74
78
  Fog::Mock.not_implemented
@@ -20,6 +20,10 @@ module Fog
20
20
  # or
21
21
  # * 'URI'<~String> - URI of group to grant access for
22
22
  # * Permission<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]
23
+ #
24
+ # ==== See Also
25
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTlogging.html
26
+
23
27
  def put_bucket_logging(bucket_name, logging_status)
24
28
  if logging_status['LoggingEnabled'].empty?
25
29
  data =
@@ -75,7 +79,7 @@ DATA
75
79
 
76
80
  end
77
81
 
78
- class Mock
82
+ class Mock # :nodoc:all
79
83
 
80
84
  def put_bucket_logging(bucket_name, logging_status)
81
85
  Fog::Mock.not_implemented
@@ -8,6 +8,10 @@ module Fog
8
8
  # ==== Parameters
9
9
  # * bucket_name<~String> - name of bucket to modify
10
10
  # * status<~String> - Status to change to in ['Enabled', 'Suspended']
11
+ #
12
+ # ==== See Also
13
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html
14
+
11
15
  def put_bucket_versioning(bucket_name, status)
12
16
  data =
13
17
  <<-DATA
@@ -28,7 +32,7 @@ DATA
28
32
 
29
33
  end
30
34
 
31
- class Mock
35
+ class Mock # :nodoc:all
32
36
 
33
37
  def put_bucket_versioning(bucket_name, status)
34
38
  Fog::Mock.not_implemented
@@ -23,6 +23,10 @@ module Fog
23
23
  # * response<~Excon::Response>:
24
24
  # * headers<~Hash>:
25
25
  # * 'ETag'<~String> - etag of new object
26
+ #
27
+ # ==== See Also
28
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPUT.html
29
+
26
30
  def put_object(bucket_name, object_name, data, options = {})
27
31
  data = parse_data(data)
28
32
  headers = data[:headers].merge!(options)
@@ -39,7 +43,7 @@ module Fog
39
43
 
40
44
  end
41
45
 
42
- class Mock
46
+ class Mock # :nodoc:all
43
47
 
44
48
  def put_object(bucket_name, object_name, data, options = {})
45
49
  data = parse_data(data)
@@ -14,6 +14,9 @@ module Fog
14
14
  # * response<~Excon::Response>:
15
15
  # * body<~String> - url for object
16
16
  #
17
+ # ==== See Also
18
+ # http://docs.amazonwebservices.com/AmazonS3/latest/dev/S3_QSAuth.html
19
+
17
20
  def put_object_url(bucket_name, object_name, expires)
18
21
  unless bucket_name
19
22
  raise ArgumentError.new('bucket_name is required')
@@ -31,7 +34,7 @@ module Fog
31
34
 
32
35
  end
33
36
 
34
- class Mock
37
+ class Mock # :nodoc:all
35
38
 
36
39
  def put_object_url(bucket_name, object_name, expires)
37
40
  unless bucket_name
@@ -8,6 +8,10 @@ module Fog
8
8
  # ==== Parameters
9
9
  # * bucket_name<~String> - name of bucket to modify
10
10
  # * payer<~String> - valid values are BucketOwner or Requester
11
+ #
12
+ # ==== See Also
13
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTrequestPaymentPUT.html
14
+
11
15
  def put_request_payment(bucket_name, payer)
12
16
  data =
13
17
  <<-DATA
@@ -27,7 +31,7 @@ DATA
27
31
 
28
32
  end
29
33
 
30
- class Mock
34
+ class Mock # :nodoc:all
31
35
 
32
36
  def put_request_payment(bucket_name, payer)
33
37
  response = Excon::Response.new
@@ -91,6 +91,7 @@ module Fog
91
91
  end
92
92
 
93
93
  def initialize(options={})
94
+ require 'mime/types'
94
95
  @aws_access_key_id = options[:aws_access_key_id]
95
96
  options[:region] ||= 'us-east-1'
96
97
  @host = options[:host] || case options[:region]
@@ -136,6 +137,7 @@ module Fog
136
137
  # ==== Returns
137
138
  # * S3 object with connection to aws.
138
139
  def initialize(options={})
140
+ require 'mime/types'
139
141
  @aws_access_key_id = options[:aws_access_key_id]
140
142
  @aws_secret_access_key = options[:aws_secret_access_key]
141
143
  @hmac = Fog::HMAC.new('sha1', @aws_secret_access_key)
@@ -47,6 +47,7 @@ module Fog
47
47
  class Real
48
48
 
49
49
  def initialize(options={})
50
+ require 'json'
50
51
  @bluebox_api_key = options[:bluebox_api_key]
51
52
  @bluebox_customer_id = options[:bluebox_customer_id]
52
53
  @host = options[:bluebox_host] || "boxpanel.blueboxgrp.com"
@@ -1,11 +1,13 @@
1
1
  require 'fog/core/attributes'
2
2
  require 'fog/core/collection'
3
+ require 'fog/core/compute'
3
4
  require 'fog/core/connection'
4
5
  require 'fog/core/deprecation'
5
6
  require 'fog/core/errors'
6
7
  require 'fog/core/hmac'
7
8
  require 'fog/core/model'
8
- require 'fog/core/parser'
9
+ # require 'fog/core/parser'
9
10
  require 'fog/core/provider'
10
11
  require 'fog/core/service'
11
- require 'fog/core/ssh'
12
+ require 'fog/core/ssh'
13
+ require 'fog/core/storage'
@@ -118,11 +118,13 @@ module Fog
118
118
  end
119
119
 
120
120
  def attributes
121
- attributes = {}
122
- for attribute in self.class.attributes
123
- attributes[attribute] = send("#{attribute}")
121
+ @attributes ||= begin
122
+ attributes = {}
123
+ for attribute in self.class.attributes
124
+ attributes[attribute] = send("#{attribute}")
125
+ end
126
+ attributes
124
127
  end
125
- attributes
126
128
  end
127
129
 
128
130
  def identity
@@ -138,8 +140,10 @@ module Fog
138
140
  unless self.class.ignored_attributes.include?(key)
139
141
  if aliased_key = self.class.aliases[key]
140
142
  send("#{aliased_key}=", value)
141
- else
143
+ elsif (methods | private_methods ).include?("#{key}=")
142
144
  send("#{key}=", value)
145
+ else
146
+ attributes[key] = value
143
147
  end
144
148
  end
145
149
  end
@@ -0,0 +1,33 @@
1
+ module Fog
2
+ class Storage
3
+
4
+ def self.new(attributes)
5
+ case attributes.delete(:provider)
6
+ when 'AWS'
7
+ require 'fog/aws'
8
+ Fog::AWS::Compute.new(attributes)
9
+ when 'Bluebox'
10
+ require 'fog/bluebox'
11
+ Fog::Bluebox::Compute.new(attributes)
12
+ when 'GoGrid'
13
+ require 'fog/go_grid'
14
+ Fog::GoGrid::Compute.new(attributes)
15
+ when 'Linode'
16
+ require 'fog/linode'
17
+ Fog::Linode::Compute.new(attributes)
18
+ when 'NewServers'
19
+ require 'fog/new_servers'
20
+ Fog::NewServers::Compute.new(attributes)
21
+ when 'Rackspace'
22
+ require 'fog/rackspace'
23
+ Fog::Rackspace::Compute.new(attributes)
24
+ when 'Slicehost'
25
+ require 'fog/slicehost'
26
+ Fog::Slicehost::Compute.new(attributes)
27
+ else
28
+ raise ArgumentError.new("#{provider} is not a recognized storage provider")
29
+ end
30
+ end
31
+
32
+ end
33
+ end
@@ -15,7 +15,6 @@ module Fog
15
15
  ENV["FOG_RC"] || '~/.fog'
16
16
  end
17
17
 
18
- remove_method :credentials
19
18
  def credentials
20
19
  @credentials ||= begin
21
20
  path = File.expand_path(config_path)
@@ -4,11 +4,7 @@ module Fog
4
4
  extend Fog::Attributes::ClassMethods
5
5
  include Fog::Attributes::InstanceMethods
6
6
 
7
- attr_accessor :connection
8
-
9
- def collection
10
- @collection
11
- end
7
+ attr_accessor :collection, :connection
12
8
 
13
9
  def initialize(new_attributes = {})
14
10
  merge_attributes(new_attributes)
@@ -28,6 +24,7 @@ module Fog
28
24
  end
29
25
 
30
26
  def reload
27
+ requires :identity
31
28
  if data = collection.get(identity)
32
29
  new_attributes = data.attributes
33
30
  merge_attributes(new_attributes)
@@ -47,11 +44,5 @@ module Fog
47
44
  end
48
45
  end
49
46
 
50
- private
51
-
52
- def collection=(new_collection)
53
- @collection = new_collection
54
- end
55
-
56
47
  end
57
48
  end
@@ -39,6 +39,7 @@ module Fog
39
39
  class Real
40
40
 
41
41
  def initialize(address, username, options)
42
+ require 'net/ssh'
42
43
  @address = address
43
44
  @username = username
44
45
  @options = options.merge(:paranoid => false)
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ class Storage
3
+
4
+ def self.new(attributes)
5
+ case provider = attributes.delete(:provider)
6
+ when 'AWS'
7
+ require 'fog/aws'
8
+ Fog::AWS::Storage.new(attributes)
9
+ when 'Google'
10
+ require 'fog/google'
11
+ Fog::Google::Storage.new(attributes)
12
+ when 'Local'
13
+ require 'fog/local'
14
+ Fog::Local::Storage.new(attributes)
15
+ when 'Rackspace'
16
+ require 'fog/rackspace'
17
+ Fog::Rackspace::Storage.new(attributes)
18
+ else
19
+ raise ArgumentError.new("#{provider} is not a recognized storage provider")
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -48,6 +48,8 @@ module Fog
48
48
  class Real
49
49
 
50
50
  def initialize(options={})
51
+ require 'digest/md5'
52
+ require 'json'
51
53
  @go_grid_api_key = options[:go_grid_api_key]
52
54
  @go_grid_shared_secret = options[:go_grid_shared_secret]
53
55
  @host = options[:host] || "api.gogrid.com"