fog 0.0.29 → 0.0.30

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 (181) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION +1 -1
  3. data/bin/fog +18 -11
  4. data/fog.gemspec +43 -14
  5. data/lib/fog.rb +7 -1
  6. data/lib/fog/aws/ec2.rb +0 -7
  7. data/lib/fog/aws/models/ec2/address.rb +22 -26
  8. data/lib/fog/aws/models/ec2/addresses.rb +7 -22
  9. data/lib/fog/aws/models/ec2/instance.rb +2 -15
  10. data/lib/fog/aws/models/ec2/instances.rb +6 -23
  11. data/lib/fog/aws/models/ec2/key_pair.rb +2 -17
  12. data/lib/fog/aws/models/ec2/key_pairs.rb +6 -23
  13. data/lib/fog/aws/models/ec2/security_group.rb +18 -22
  14. data/lib/fog/aws/models/ec2/security_groups.rb +6 -23
  15. data/lib/fog/aws/models/ec2/snapshot.rb +2 -15
  16. data/lib/fog/aws/models/ec2/snapshots.rb +7 -20
  17. data/lib/fog/aws/models/ec2/volume.rb +23 -22
  18. data/lib/fog/aws/models/ec2/volumes.rb +8 -22
  19. data/lib/fog/aws/models/s3/bucket.rb +1 -1
  20. data/lib/fog/aws/models/s3/buckets.rb +3 -20
  21. data/lib/fog/aws/models/s3/objects.rb +11 -22
  22. data/lib/fog/aws/requests/ec2/allocate_address.rb +1 -1
  23. data/lib/fog/aws/requests/ec2/associate_address.rb +2 -2
  24. data/lib/fog/aws/requests/ec2/attach_volume.rb +2 -2
  25. data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +1 -1
  26. data/lib/fog/aws/requests/ec2/create_key_pair.rb +2 -2
  27. data/lib/fog/aws/requests/ec2/create_security_group.rb +2 -2
  28. data/lib/fog/aws/requests/ec2/create_snapshot.rb +2 -2
  29. data/lib/fog/aws/requests/ec2/create_volume.rb +3 -3
  30. data/lib/fog/aws/requests/ec2/delete_key_pair.rb +1 -1
  31. data/lib/fog/aws/requests/ec2/delete_security_group.rb +2 -2
  32. data/lib/fog/aws/requests/ec2/delete_snapshot.rb +2 -2
  33. data/lib/fog/aws/requests/ec2/delete_volume.rb +2 -2
  34. data/lib/fog/aws/requests/ec2/describe_addresses.rb +2 -2
  35. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +1 -1
  36. data/lib/fog/aws/requests/ec2/describe_images.rb +1 -1
  37. data/lib/fog/aws/requests/ec2/describe_instances.rb +2 -2
  38. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +2 -2
  39. data/lib/fog/aws/requests/ec2/describe_regions.rb +1 -1
  40. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +2 -2
  41. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +2 -2
  42. data/lib/fog/aws/requests/ec2/describe_volumes.rb +2 -2
  43. data/lib/fog/aws/requests/ec2/detach_volume.rb +2 -2
  44. data/lib/fog/aws/requests/ec2/disassociate_address.rb +2 -2
  45. data/lib/fog/aws/requests/ec2/get_console_output.rb +2 -2
  46. data/lib/fog/aws/requests/ec2/reboot_instances.rb +2 -2
  47. data/lib/fog/aws/requests/ec2/release_address.rb +2 -2
  48. data/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb +1 -1
  49. data/lib/fog/aws/requests/ec2/run_instances.rb +2 -2
  50. data/lib/fog/aws/requests/ec2/terminate_instances.rb +2 -2
  51. data/lib/fog/aws/requests/s3/copy_object.rb +2 -2
  52. data/lib/fog/aws/requests/s3/delete_bucket.rb +3 -3
  53. data/lib/fog/aws/requests/s3/delete_object.rb +2 -2
  54. data/lib/fog/aws/requests/s3/get_bucket.rb +2 -2
  55. data/lib/fog/aws/requests/s3/get_bucket_location.rb +2 -2
  56. data/lib/fog/aws/requests/s3/get_object.rb +2 -2
  57. data/lib/fog/aws/requests/s3/get_request_payment.rb +2 -2
  58. data/lib/fog/aws/requests/s3/get_service.rb +1 -1
  59. data/lib/fog/aws/requests/s3/head_object.rb +1 -1
  60. data/lib/fog/aws/requests/s3/put_bucket.rb +1 -1
  61. data/lib/fog/aws/requests/s3/put_object.rb +2 -2
  62. data/lib/fog/aws/requests/s3/put_request_payment.rb +1 -1
  63. data/lib/fog/aws/requests/simpledb/batch_put_attributes.rb +2 -2
  64. data/lib/fog/aws/requests/simpledb/create_domain.rb +1 -1
  65. data/lib/fog/aws/requests/simpledb/delete_attributes.rb +2 -2
  66. data/lib/fog/aws/requests/simpledb/delete_domain.rb +1 -1
  67. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +2 -2
  68. data/lib/fog/aws/requests/simpledb/get_attributes.rb +2 -2
  69. data/lib/fog/aws/requests/simpledb/list_domains.rb +1 -1
  70. data/lib/fog/aws/requests/simpledb/put_attributes.rb +1 -1
  71. data/lib/fog/aws/requests/simpledb/select.rb +1 -1
  72. data/lib/fog/aws/s3.rb +0 -7
  73. data/lib/fog/aws/simpledb.rb +0 -4
  74. data/lib/fog/collection.rb +35 -7
  75. data/lib/fog/connection.rb +10 -130
  76. data/lib/fog/model.rb +18 -13
  77. data/lib/fog/parser.rb +0 -5
  78. data/lib/fog/rackspace.rb +35 -15
  79. data/lib/fog/rackspace/files.rb +36 -6
  80. data/lib/fog/rackspace/models/servers/server.rb +2 -16
  81. data/lib/fog/rackspace/models/servers/servers.rb +6 -21
  82. data/lib/fog/rackspace/requests/files/delete_container.rb +38 -0
  83. data/lib/fog/rackspace/requests/files/delete_object.rb +39 -0
  84. data/lib/fog/rackspace/requests/files/get_container.rb +61 -0
  85. data/lib/fog/rackspace/requests/files/get_containers.rb +5 -7
  86. data/lib/fog/rackspace/requests/files/head_container.rb +44 -0
  87. data/lib/fog/rackspace/requests/files/head_containers.rb +1 -1
  88. data/lib/fog/rackspace/requests/files/put_container.rb +38 -0
  89. data/lib/fog/rackspace/requests/files/put_object.rb +41 -0
  90. data/lib/fog/rackspace/requests/servers/create_image.rb +6 -0
  91. data/lib/fog/rackspace/requests/servers/create_server.rb +21 -2
  92. data/lib/fog/rackspace/requests/servers/delete_server.rb +18 -3
  93. data/lib/fog/rackspace/requests/servers/get_server_details.rb +17 -5
  94. data/lib/fog/rackspace/requests/servers/list_addresses.rb +52 -0
  95. data/lib/fog/rackspace/requests/servers/list_flavors.rb +2 -4
  96. data/lib/fog/rackspace/requests/servers/list_flavors_detail.rb +41 -0
  97. data/lib/fog/rackspace/requests/servers/list_images.rb +1 -1
  98. data/lib/fog/rackspace/requests/servers/list_images_detail.rb +1 -1
  99. data/lib/fog/rackspace/requests/servers/list_private_addresses.rb +50 -0
  100. data/lib/fog/rackspace/requests/servers/list_public_addresses.rb +50 -0
  101. data/lib/fog/rackspace/requests/servers/list_servers.rb +11 -2
  102. data/lib/fog/rackspace/requests/servers/list_servers_detail.rb +17 -2
  103. data/lib/fog/rackspace/requests/servers/reboot_server.rb +3 -6
  104. data/lib/fog/rackspace/requests/servers/update_server.rb +18 -5
  105. data/lib/fog/rackspace/servers.rb +20 -0
  106. data/spec/aws/models/ec2/address_spec.rb +4 -4
  107. data/spec/aws/models/ec2/instance_spec.rb +6 -6
  108. data/spec/aws/models/ec2/key_pair_spec.rb +5 -5
  109. data/spec/aws/models/ec2/security_group_spec.rb +5 -5
  110. data/spec/aws/models/ec2/snapshot_spec.rb +8 -8
  111. data/spec/aws/models/ec2/snapshots_spec.rb +6 -6
  112. data/spec/aws/models/ec2/volume_spec.rb +6 -5
  113. data/spec/aws/models/ec2/volumes_spec.rb +4 -4
  114. data/spec/aws/requests/ec2/associate_address_spec.rb +2 -2
  115. data/spec/aws/requests/ec2/attach_volume_spec.rb +2 -2
  116. data/spec/aws/requests/ec2/create_key_pair_spec.rb +1 -1
  117. data/spec/aws/requests/ec2/create_security_group_spec.rb +1 -1
  118. data/spec/aws/requests/ec2/create_snapshot_spec.rb +1 -1
  119. data/spec/aws/requests/ec2/delete_security_group_spec.rb +1 -1
  120. data/spec/aws/requests/ec2/delete_snapshot_spec.rb +1 -1
  121. data/spec/aws/requests/ec2/delete_volume_spec.rb +2 -2
  122. data/spec/aws/requests/ec2/describe_addresses_spec.rb +1 -1
  123. data/spec/aws/requests/ec2/describe_instances_spec.rb +1 -1
  124. data/spec/aws/requests/ec2/describe_key_pairs_spec.rb +1 -1
  125. data/spec/aws/requests/ec2/describe_security_groups_spec.rb +1 -1
  126. data/spec/aws/requests/ec2/describe_snapshots_spec.rb +1 -1
  127. data/spec/aws/requests/ec2/describe_volumes_spec.rb +1 -1
  128. data/spec/aws/requests/ec2/detach_volume_spec.rb +1 -1
  129. data/spec/aws/requests/ec2/disassociate_address_spec.rb +1 -1
  130. data/spec/aws/requests/ec2/get_console_output_spec.rb +1 -1
  131. data/spec/aws/requests/ec2/reboot_instances_spec.rb +1 -1
  132. data/spec/aws/requests/ec2/release_address_spec.rb +1 -1
  133. data/spec/aws/requests/ec2/terminate_instances_spec.rb +1 -1
  134. data/spec/aws/requests/s3/copy_object_spec.rb +4 -5
  135. data/spec/aws/requests/s3/delete_bucket_spec.rb +3 -4
  136. data/spec/aws/requests/s3/delete_object_spec.rb +2 -3
  137. data/spec/aws/requests/s3/get_bucket_location_spec.rb +1 -1
  138. data/spec/aws/requests/s3/get_bucket_spec.rb +4 -6
  139. data/spec/aws/requests/s3/get_object_spec.rb +6 -10
  140. data/spec/aws/requests/s3/get_request_payment_spec.rb +1 -1
  141. data/spec/aws/requests/s3/head_object_spec.rb +2 -4
  142. data/spec/aws/requests/s3/put_object_spec.rb +4 -7
  143. data/spec/aws/requests/s3/put_request_payment_spec.rb +1 -1
  144. data/spec/aws/requests/simpledb/batch_put_attributes_spec.rb +1 -1
  145. data/spec/aws/requests/simpledb/delete_attributes_spec.rb +1 -1
  146. data/spec/aws/requests/simpledb/domain_metadata_spec.rb +1 -1
  147. data/spec/aws/requests/simpledb/get_attributes_spec.rb +1 -1
  148. data/spec/aws/requests/simpledb/put_attributes_spec.rb +1 -1
  149. data/spec/rackspace/requests/files/delete_container_spec.rb +24 -0
  150. data/spec/rackspace/requests/files/delete_object_spec.rb +37 -0
  151. data/spec/rackspace/requests/files/get_container_spec.rb +33 -0
  152. data/spec/rackspace/requests/files/get_containers_spec.rb +12 -1
  153. data/spec/rackspace/requests/files/head_container_spec.rb +30 -0
  154. data/spec/rackspace/requests/files/head_containers_spec.rb +9 -1
  155. data/spec/rackspace/requests/files/put_container_spec.rb +15 -0
  156. data/spec/rackspace/requests/files/put_object_spec.rb +20 -0
  157. data/spec/rackspace/requests/servers/create_image_spec.rb +16 -2
  158. data/spec/rackspace/requests/servers/create_server_spec.rb +1 -1
  159. data/spec/rackspace/requests/servers/delete_image_spec.rb +32 -0
  160. data/spec/rackspace/requests/servers/delete_server_spec.rb +1 -1
  161. data/spec/rackspace/requests/servers/get_server_details_spec.rb +1 -1
  162. data/spec/rackspace/requests/servers/list_addresses_spec.rb +34 -0
  163. data/spec/rackspace/requests/servers/list_flavors_detail_spec.rb +17 -0
  164. data/spec/rackspace/requests/servers/list_flavors_spec.rb +6 -3
  165. data/spec/rackspace/requests/servers/list_images_detail_spec.rb +18 -0
  166. data/spec/rackspace/requests/servers/list_images_spec.rb +5 -2
  167. data/spec/rackspace/requests/servers/list_private_addresses_spec.rb +32 -0
  168. data/spec/rackspace/requests/servers/list_public_addresses_spec.rb +32 -0
  169. data/spec/rackspace/requests/servers/list_servers_detail_spec.rb +1 -1
  170. data/spec/rackspace/requests/servers/reboot_server_spec.rb +31 -0
  171. data/spec/rackspace/requests/servers/update_server_spec.rb +33 -0
  172. data/spec/spec_helper.rb +5 -1
  173. metadata +50 -14
  174. data/benchs/headers_split_vs_match.rb +0 -18
  175. data/benchs/stripping.rb +0 -26
  176. data/lib/fog/errors.rb +0 -145
  177. data/lib/fog/response.rb +0 -12
  178. data/spec/rackspace/requests/servers/delete_image.rb +0 -12
  179. data/spec/rackspace/requests/servers/list_images_detail.rb +0 -12
  180. data/spec/rackspace/requests/servers/reboot_server.rb +0 -12
  181. data/spec/rackspace/requests/servers/update_server.rb +0 -12
@@ -12,12 +12,6 @@ module Fog
12
12
  end
13
13
 
14
14
  def self.reload
15
- load "fog/collection.rb"
16
- load "fog/connection.rb"
17
- load "fog/model.rb"
18
- load "fog/parser.rb"
19
- load "fog/response.rb"
20
-
21
15
  load "fog/aws/models/s3/bucket.rb"
22
16
  load "fog/aws/models/s3/buckets.rb"
23
17
  load "fog/aws/models/s3/object.rb"
@@ -105,7 +99,6 @@ module Fog
105
99
  response = @connection.request({
106
100
  :block => params[:block],
107
101
  :body => params[:body],
108
- :error_parser => Fog::Errors::Parser.new,
109
102
  :expects => params[:expects],
110
103
  :headers => params[:headers],
111
104
  :host => params[:host],
@@ -12,10 +12,6 @@ module Fog
12
12
  end
13
13
 
14
14
  def self.reload
15
- load "fog/connection.rb"
16
- load "fog/parser.rb"
17
- load "fog/response.rb"
18
-
19
15
  load "fog/aws/parsers/simpledb/basic.rb"
20
16
  load "fog/aws/parsers/simpledb/domain_metadata.rb"
21
17
  load "fog/aws/parsers/simpledb/get_attributes.rb"
@@ -5,12 +5,17 @@ module Fog
5
5
  class_eval <<-EOS, __FILE__, __LINE__
6
6
  attr_accessor :#{name}
7
7
  EOS
8
- attributes << name
8
+ @attributes ||= []
9
+ @attributes |= [name]
9
10
  for other_name in [*other_names]
10
11
  aliases[other_name] = name
11
12
  end
12
13
  end
13
14
 
15
+ def self.model(new_model)
16
+ @model = new_model
17
+ end
18
+
14
19
  def self.aliases
15
20
  @aliases ||= {}
16
21
  end
@@ -19,6 +24,20 @@ module Fog
19
24
  @attributes ||= []
20
25
  end
21
26
 
27
+ def attributes
28
+ attributes = {}
29
+ for attribute in self.class.attributes
30
+ attributes[attribute] = send("#{attribute}")
31
+ end
32
+ attributes
33
+ end
34
+
35
+ def create(attributes = {})
36
+ object = new(attributes)
37
+ object.save
38
+ object
39
+ end
40
+
22
41
  def initialize(attributes = {})
23
42
  merge_attributes(attributes)
24
43
  end
@@ -36,12 +55,8 @@ module Fog
36
55
  data << "]>"
37
56
  end
38
57
 
39
- def attributes
40
- attributes = {}
41
- for attribute in self.class.attributes
42
- attributes[attribute] = send("#{attribute}")
43
- end
44
- attributes
58
+ def model
59
+ self.class.instance_variable_get('@model')
45
60
  end
46
61
 
47
62
  def merge_attributes(new_attributes = {})
@@ -55,6 +70,19 @@ module Fog
55
70
  self
56
71
  end
57
72
 
73
+ def new(attributes = {})
74
+ model.new(
75
+ attributes.merge!(
76
+ :collection => self,
77
+ :connection => connection
78
+ )
79
+ )
80
+ end
81
+
82
+ def reload
83
+ self.clear.concat(all)
84
+ end
85
+
58
86
  private
59
87
 
60
88
  def connection=(new_connection)
@@ -1,7 +1,5 @@
1
1
  require 'rubygems'
2
- require 'openssl'
3
- require 'socket'
4
- require 'uri'
2
+ require 'excon'
5
3
 
6
4
  require "fog/errors"
7
5
  require "fog/response"
@@ -11,142 +9,24 @@ unless Fog.mocking?
11
9
  module Fog
12
10
  class Connection
13
11
 
14
- unless const_defined?(:CHUNK_SIZE)
15
- CHUNK_SIZE = 1048576 # 1 megabyte
16
- end
17
-
18
12
  def initialize(url)
19
- @uri = URI.parse(url)
20
- end
21
-
22
- def connection
23
- if @connection && !@connection.closed?
24
- @connection
25
- else
26
- @connection = TCPSocket.open(@uri.host, @uri.port)
27
- if @uri.scheme == 'https'
28
- @ssl_context = OpenSSL::SSL::SSLContext.new
29
- @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
30
- @connection = OpenSSL::SSL::SSLSocket.new(@connection, @ssl_context)
31
- @connection.sync_close = true
32
- @connection.connect
33
- end
34
- end
13
+ @excon = Excon.new(url)
35
14
  end
36
15
 
37
16
  def request(params)
38
- params[:path] ||= ''
39
- unless params[:path][0..0] == '/'
40
- params[:path] = '/' + params[:path].to_s
17
+ if parser = params.delete(:parser)
18
+ body = Nokogiri::XML::SAX::PushParser.new(parser)
19
+ params[:block] = lambda { |chunk| body << chunk }
41
20
  end
42
- if params[:query] && !params[:query].empty?
43
- params[:path] << "?#{params[:query]}"
44
- end
45
- request = "#{params[:method]} #{params[:path]} HTTP/1.1\r\n"
46
- params[:headers] ||= {}
47
- params[:headers]['Host'] = params[:host]
48
- if params[:body] && !params[:headers]['Content-Length']
49
- params[:headers]['Content-Length'] = params[:body].length
50
- end
51
- for key, value in params[:headers]
52
- request << "#{key}: #{value}\r\n"
53
- end
54
- request << "\r\n"
55
- connection.write(request)
56
21
 
57
- if params[:body]
58
- if params[:body].is_a?(String)
59
- connection.write(params[:body])
60
- else
61
- while chunk = params[:body].read(CHUNK_SIZE)
62
- connection.write(chunk)
63
- end
64
- end
65
- end
22
+ response = @excon.request(params)
66
23
 
67
- response = Fog::Response.new
68
- response.request = params
69
- response.status = connection.readline[9..11].to_i
70
- if params[:expects] && ![*params[:expects]].include?(response.status)
71
- error = true
72
- end
73
- while true
74
- data = connection.readline.chomp!
75
- if data == ""
76
- break
77
- end
78
- header = data.split(': ')
79
- response.headers[capitalize(header[0])] = header[1]
24
+ if parser
25
+ body.finish
26
+ response.body = parser.response
80
27
  end
81
28
 
82
- unless params[:method] == 'HEAD' || [204, 304, *(100..199)].include?(response.status)
83
- if (error && params[:error_parser]) || params[:parser]
84
- if error
85
- parser = params[:error_parser]
86
- elsif params[:parser]
87
- parser = params[:parser]
88
- end
89
- body = Nokogiri::XML::SAX::PushParser.new(parser)
90
- elsif params[:block]
91
- body = nil
92
- else
93
- body = ''
94
- end
95
-
96
- if response.headers['Content-Length']
97
- if error || !params[:block]
98
- body << connection.read(response.headers['Content-Length'].to_i)
99
- else
100
- remaining = response.headers['Content-Length'].to_i
101
- while remaining > 0
102
- params[:block].call(connection.read([CHUNK_SIZE, remaining].min))
103
- remaining -= CHUNK_SIZE;
104
- end
105
- end
106
- elsif response.headers['Transfer-Encoding'] == 'chunked'
107
- while true
108
- chunk_size = connection.readline.chomp!.to_i(16)
109
- # 2 == "/r/n".length
110
- chunk = connection.read(chunk_size + 2)[0...-2]
111
- if chunk_size == 0
112
- break
113
- else
114
- if error || !params[:block]
115
- body << chunk
116
- else
117
- params[:block].call(chunk)
118
- end
119
- end
120
- end
121
- elsif response.headers['Connection'] == 'close'
122
- body << connection.read
123
- @connection = nil
124
- end
125
-
126
- if parser
127
- body.finish
128
- response.body = parser.response
129
- else
130
- response.body = body
131
- end
132
- end
133
-
134
- if error
135
- raise(Fog::Errors.status_error(params[:expects], response.status, response))
136
- else
137
- response
138
- end
139
- end
140
-
141
- private
142
-
143
- def capitalize(header)
144
- words = header.split('-')
145
- header = ''
146
- for word in words
147
- header << word[0..0].upcase << word[1..-1] << '-'
148
- end
149
- header.chop!
29
+ response
150
30
  end
151
31
 
152
32
  end
@@ -5,7 +5,8 @@ module Fog
5
5
  class_eval <<-EOS, __FILE__, __LINE__
6
6
  attr_accessor :#{name}
7
7
  EOS
8
- attributes << name
8
+ @attributes ||= []
9
+ @attributes |= [name]
9
10
  for other_name in [*other_names]
10
11
  aliases[other_name] = name
11
12
  end
@@ -24,6 +25,18 @@ module Fog
24
25
  @attributes ||= []
25
26
  end
26
27
 
28
+ def attributes
29
+ attributes = {}
30
+ for attribute in self.class.attributes
31
+ attributes[attribute] = send("#{attribute}")
32
+ end
33
+ attributes
34
+ end
35
+
36
+ def collection
37
+ @collection
38
+ end
39
+
27
40
  def identity
28
41
  send(self.class.instance_variable_get('@identity'))
29
42
  end
@@ -40,18 +53,6 @@ module Fog
40
53
  data << ">"
41
54
  end
42
55
 
43
- def attributes
44
- attributes = {}
45
- for attribute in self.class.attributes
46
- attributes[attribute] = send("#{attribute}")
47
- end
48
- attributes
49
- end
50
-
51
- def collection
52
- @collection
53
- end
54
-
55
56
  def merge_attributes(new_attributes = {})
56
57
  for key, value in new_attributes
57
58
  if aliased_key = self.class.aliases[key]
@@ -63,6 +64,10 @@ module Fog
63
64
  self
64
65
  end
65
66
 
67
+ def new_record?
68
+ !identity
69
+ end
70
+
66
71
  def reload
67
72
  new_attributes = collection.get(identity).attributes
68
73
  merge_attributes(new_attributes)
@@ -1,8 +1,3 @@
1
- require 'rubygems'
2
- require 'base64'
3
- require 'nokogiri'
4
- require 'time'
5
-
6
1
  module Fog
7
2
  module Parsers
8
3
  class Base < Nokogiri::XML::SAX::Document
@@ -6,23 +6,43 @@ module Fog
6
6
  load 'fog/rackspace/servers.rb'
7
7
  end
8
8
 
9
- def self.authenticate(options)
10
- connection = Fog::Connection.new("https://auth.api.rackspacecloud.com")
11
- response = connection.request({
12
- :expects => 204,
13
- :headers => {
14
- 'X-Auth-Key' => options[:rackspace_api_key],
15
- 'X-Auth-User' => options[:rackspace_username]
16
- },
17
- :host => 'auth.api.rackspacecloud.com',
18
- :method => 'GET',
19
- :path => 'v1.0'
20
- })
21
- response.headers.reject do |key, value|
22
- !['X-Server-Management-Url', 'X-Storage-Url', 'X-CDN-Management-Url', 'X-Auth-Token'].include?(key)
9
+ unless Fog.mocking?
10
+
11
+ def self.authenticate(options)
12
+ connection = Fog::Connection.new("https://auth.api.rackspacecloud.com")
13
+ response = connection.request({
14
+ :expects => 204,
15
+ :headers => {
16
+ 'X-Auth-Key' => options[:rackspace_api_key],
17
+ 'X-Auth-User' => options[:rackspace_username]
18
+ },
19
+ :host => 'auth.api.rackspacecloud.com',
20
+ :method => 'GET',
21
+ :path => 'v1.0'
22
+ })
23
+ response.headers.reject do |key, value|
24
+ !['X-Server-Management-Url', 'X-Storage-Url', 'X-CDN-Management-Url', 'X-Auth-Token'].include?(key)
25
+ end
26
+ end
27
+
28
+ else
29
+
30
+ def self.authenticate(options)
31
+ {
32
+ 'X-Auth_Token' => '01234567-0123-0123-0123-01234',
33
+ 'X-CDN-Management-Url' => 'https://cdn.cloaddrive.com/v1/CloudFS_01234-0123',
34
+ 'X-Server-Management-Url' => 'https://servers.api.rackspacecloud.com/v1.0/01234',
35
+ 'X-Storage-Url' => 'https://storage.clouddrive.com/v1/CloudFS_01234-0123'
36
+ }
23
37
  end
38
+
39
+ srand(Time.now.to_i)
40
+
41
+ class Mock
42
+ end
43
+
24
44
  end
25
45
 
26
46
  end
27
47
  end
28
- Fog::Rackspace.reload
48
+ Fog::Rackspace.reload
@@ -3,7 +3,14 @@ module Fog
3
3
  class Files
4
4
 
5
5
  def self.reload
6
+ load "fog/rackspace/requests/files/delete_container.rb"
7
+ load "fog/rackspace/requests/files/delete_object.rb"
8
+ load "fog/rackspace/requests/files/get_container.rb"
6
9
  load "fog/rackspace/requests/files/get_containers.rb"
10
+ load "fog/rackspace/requests/files/head_container.rb"
11
+ load "fog/rackspace/requests/files/head_containers.rb"
12
+ load "fog/rackspace/requests/files/put_container.rb"
13
+ load "fog/rackspace/requests/files/put_object.rb"
7
14
  end
8
15
 
9
16
  def initialize(options={})
@@ -22,18 +29,40 @@ module Fog
22
29
  @connection = Fog::Connection.new("#{@storage_scheme}://#{@storage_host}:#{@storage_port}")
23
30
  end
24
31
 
32
+ def parse_data(data)
33
+ metadata = {
34
+ :body => nil,
35
+ :headers => {}
36
+ }
37
+
38
+ if data.is_a?(String)
39
+ metadata[:body] = data
40
+ metadata[:headers]['Content-Length'] = metadata[:body].size.to_s
41
+ else
42
+ filename = File.basename(data.path)
43
+ unless (mime_types = MIME::Types.of(filename)).empty?
44
+ metadata[:headers]['Content-Type'] = mime_types.first.content_type
45
+ end
46
+ metadata[:body] = data.read
47
+ metadata[:headers]['Content-Length'] = File.size(data.path).to_s
48
+ end
49
+ # metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip
50
+ metadata
51
+ end
52
+
25
53
  def cdn_request(params)
26
54
  response = @connection.request({
27
55
  :body => params[:body],
28
56
  :expects => params[:expects],
29
57
  :headers => {
30
58
  'X-Auth-Token' => @auth_token
31
- },
59
+ }.merge!(params[:headers] || {}),
32
60
  :host => @cdn_host,
33
61
  :method => params[:method],
34
- :path => "#{@cdn_path}/#{params[:path]}"
62
+ :path => "#{@cdn_path}/#{params[:path]}",
63
+ :query => params[:query]
35
64
  })
36
- unless response.status == 204
65
+ unless response.body.empty?
37
66
  response.body = JSON.parse(response.body)
38
67
  end
39
68
  response
@@ -45,12 +74,13 @@ module Fog
45
74
  :expects => params[:expects],
46
75
  :headers => {
47
76
  'X-Auth-Token' => @auth_token
48
- },
77
+ }.merge!(params[:headers] || {}),
49
78
  :host => @storage_host,
50
79
  :method => params[:method],
51
- :path => "#{@storage_path}/#{params[:path]}"
80
+ :path => "#{@storage_path}/#{params[:path]}",
81
+ :query => params[:query]
52
82
  })
53
- unless response.status == 204
83
+ unless response.body.empty?
54
84
  response.body = JSON.parse(response.body)
55
85
  end
56
86
  response