fog 0.3.13 → 0.3.14

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.
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"