fog 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. data/.document +5 -0
  2. data/.gitignore +6 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +7 -0
  5. data/Rakefile +98 -0
  6. data/VERSION +1 -0
  7. data/benchs/fog_vs.rb +135 -0
  8. data/benchs/headers_split_vs_match.rb +18 -0
  9. data/benchs/params.rb +43 -0
  10. data/benchs/parse_vs_push.rb +60 -0
  11. data/benchs/stripping.rb +26 -0
  12. data/lib/fog.rb +21 -0
  13. data/lib/fog/aws.rb +145 -0
  14. data/lib/fog/aws/ec2.rb +173 -0
  15. data/lib/fog/aws/models/ec2/address.rb +31 -0
  16. data/lib/fog/aws/models/ec2/addresses.rb +36 -0
  17. data/lib/fog/aws/models/ec2/key_pair.rb +35 -0
  18. data/lib/fog/aws/models/ec2/key_pairs.rb +36 -0
  19. data/lib/fog/aws/models/ec2/volume.rb +47 -0
  20. data/lib/fog/aws/models/ec2/volumes.rb +36 -0
  21. data/lib/fog/aws/models/s3/bucket.rb +77 -0
  22. data/lib/fog/aws/models/s3/buckets.rb +83 -0
  23. data/lib/fog/aws/models/s3/object.rb +76 -0
  24. data/lib/fog/aws/models/s3/objects.rb +97 -0
  25. data/lib/fog/aws/models/s3/owner.rb +18 -0
  26. data/lib/fog/aws/parsers/ec2/allocate_address.rb +19 -0
  27. data/lib/fog/aws/parsers/ec2/attach_volume.rb +22 -0
  28. data/lib/fog/aws/parsers/ec2/basic.rb +25 -0
  29. data/lib/fog/aws/parsers/ec2/create_key_pair.rb +20 -0
  30. data/lib/fog/aws/parsers/ec2/create_snapshot.rb +22 -0
  31. data/lib/fog/aws/parsers/ec2/create_volume.rb +24 -0
  32. data/lib/fog/aws/parsers/ec2/describe_addresses.rb +30 -0
  33. data/lib/fog/aws/parsers/ec2/describe_availability_zones.rb +30 -0
  34. data/lib/fog/aws/parsers/ec2/describe_images.rb +49 -0
  35. data/lib/fog/aws/parsers/ec2/describe_instances.rb +73 -0
  36. data/lib/fog/aws/parsers/ec2/describe_key_pairs.rb +30 -0
  37. data/lib/fog/aws/parsers/ec2/describe_regions.rb +30 -0
  38. data/lib/fog/aws/parsers/ec2/describe_security_groups.rb +75 -0
  39. data/lib/fog/aws/parsers/ec2/describe_snapshots.rb +30 -0
  40. data/lib/fog/aws/parsers/ec2/describe_volumes.rb +57 -0
  41. data/lib/fog/aws/parsers/ec2/detach_volume.rb +22 -0
  42. data/lib/fog/aws/parsers/ec2/get_console_output.rb +28 -0
  43. data/lib/fog/aws/parsers/ec2/run_instances.rb +65 -0
  44. data/lib/fog/aws/parsers/ec2/terminate_instances.rb +55 -0
  45. data/lib/fog/aws/parsers/s3/copy_object.rb +22 -0
  46. data/lib/fog/aws/parsers/s3/get_bucket.rb +46 -0
  47. data/lib/fog/aws/parsers/s3/get_bucket_location.rb +20 -0
  48. data/lib/fog/aws/parsers/s3/get_request_payment.rb +20 -0
  49. data/lib/fog/aws/parsers/s3/get_service.rb +32 -0
  50. data/lib/fog/aws/parsers/simpledb/basic.rb +31 -0
  51. data/lib/fog/aws/parsers/simpledb/domain_metadata.rb +30 -0
  52. data/lib/fog/aws/parsers/simpledb/get_attributes.rb +34 -0
  53. data/lib/fog/aws/parsers/simpledb/list_domains.rb +28 -0
  54. data/lib/fog/aws/parsers/simpledb/select.rb +39 -0
  55. data/lib/fog/aws/requests/ec2/allocate_address.rb +50 -0
  56. data/lib/fog/aws/requests/ec2/associate_address.rb +59 -0
  57. data/lib/fog/aws/requests/ec2/attach_volume.rb +71 -0
  58. data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +32 -0
  59. data/lib/fog/aws/requests/ec2/create_key_pair.rb +60 -0
  60. data/lib/fog/aws/requests/ec2/create_security_group.rb +61 -0
  61. data/lib/fog/aws/requests/ec2/create_snapshot.rb +65 -0
  62. data/lib/fog/aws/requests/ec2/create_volume.rb +66 -0
  63. data/lib/fog/aws/requests/ec2/delete_key_pair.rb +49 -0
  64. data/lib/fog/aws/requests/ec2/delete_security_group.rb +52 -0
  65. data/lib/fog/aws/requests/ec2/delete_snapshot.rb +53 -0
  66. data/lib/fog/aws/requests/ec2/delete_volume.rb +55 -0
  67. data/lib/fog/aws/requests/ec2/describe_addresses.rb +61 -0
  68. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +64 -0
  69. data/lib/fog/aws/requests/ec2/describe_images.rb +41 -0
  70. data/lib/fog/aws/requests/ec2/describe_instances.rb +114 -0
  71. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +63 -0
  72. data/lib/fog/aws/requests/ec2/describe_regions.rb +61 -0
  73. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +71 -0
  74. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +78 -0
  75. data/lib/fog/aws/requests/ec2/describe_volumes.rb +85 -0
  76. data/lib/fog/aws/requests/ec2/detach_volume.rb +62 -0
  77. data/lib/fog/aws/requests/ec2/disassociate_address.rb +55 -0
  78. data/lib/fog/aws/requests/ec2/get_console_output.rb +26 -0
  79. data/lib/fog/aws/requests/ec2/reboot_instances.rb +24 -0
  80. data/lib/fog/aws/requests/ec2/release_address.rb +50 -0
  81. data/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb +32 -0
  82. data/lib/fog/aws/requests/ec2/run_instances.rb +134 -0
  83. data/lib/fog/aws/requests/ec2/terminate_instances.rb +80 -0
  84. data/lib/fog/aws/requests/s3/copy_object.rb +79 -0
  85. data/lib/fog/aws/requests/s3/delete_bucket.rb +53 -0
  86. data/lib/fog/aws/requests/s3/delete_object.rb +52 -0
  87. data/lib/fog/aws/requests/s3/get_bucket.rb +100 -0
  88. data/lib/fog/aws/requests/s3/get_bucket_location.rb +53 -0
  89. data/lib/fog/aws/requests/s3/get_object.rb +82 -0
  90. data/lib/fog/aws/requests/s3/get_request_payment.rb +53 -0
  91. data/lib/fog/aws/requests/s3/get_service.rb +58 -0
  92. data/lib/fog/aws/requests/s3/head_object.rb +61 -0
  93. data/lib/fog/aws/requests/s3/put_bucket.rb +69 -0
  94. data/lib/fog/aws/requests/s3/put_object.rb +76 -0
  95. data/lib/fog/aws/requests/s3/put_request_payment.rb +56 -0
  96. data/lib/fog/aws/requests/simpledb/batch_put_attributes.rb +31 -0
  97. data/lib/fog/aws/requests/simpledb/create_domain.rb +25 -0
  98. data/lib/fog/aws/requests/simpledb/delete_attributes.rb +34 -0
  99. data/lib/fog/aws/requests/simpledb/delete_domain.rb +25 -0
  100. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +30 -0
  101. data/lib/fog/aws/requests/simpledb/get_attributes.rb +35 -0
  102. data/lib/fog/aws/requests/simpledb/list_domains.rb +30 -0
  103. data/lib/fog/aws/requests/simpledb/put_attributes.rb +29 -0
  104. data/lib/fog/aws/requests/simpledb/select.rb +29 -0
  105. data/lib/fog/aws/s3.rb +157 -0
  106. data/lib/fog/aws/simpledb.rb +157 -0
  107. data/lib/fog/collection.rb +77 -0
  108. data/lib/fog/connection.rb +130 -0
  109. data/lib/fog/errors.rb +145 -0
  110. data/lib/fog/model.rb +72 -0
  111. data/lib/fog/parser.rb +30 -0
  112. data/lib/fog/response.rb +12 -0
  113. data/spec/aws/models/s3/bucket_spec.rb +130 -0
  114. data/spec/aws/models/s3/buckets_spec.rb +79 -0
  115. data/spec/aws/models/s3/object_spec.rb +121 -0
  116. data/spec/aws/models/s3/objects_spec.rb +112 -0
  117. data/spec/aws/models/s3/owner_spec.rb +18 -0
  118. data/spec/aws/requests/ec2/allocate_address_spec.rb +18 -0
  119. data/spec/aws/requests/ec2/associate_address_spec.rb +42 -0
  120. data/spec/aws/requests/ec2/attach_volume_spec.rb +53 -0
  121. data/spec/aws/requests/ec2/authorize_security_group_ingress_spec.rb +26 -0
  122. data/spec/aws/requests/ec2/create_key_pair_spec.rb +36 -0
  123. data/spec/aws/requests/ec2/create_security_group_spec.rb +34 -0
  124. data/spec/aws/requests/ec2/create_snapshot_spec.rb +37 -0
  125. data/spec/aws/requests/ec2/create_volume_spec.rb +23 -0
  126. data/spec/aws/requests/ec2/delete_key_pair_spec.rb +21 -0
  127. data/spec/aws/requests/ec2/delete_security_group_spec.rb +26 -0
  128. data/spec/aws/requests/ec2/delete_snapshot_spec.rb +35 -0
  129. data/spec/aws/requests/ec2/delete_volume_spec.rb +26 -0
  130. data/spec/aws/requests/ec2/describe_addresses_spec.rb +38 -0
  131. data/spec/aws/requests/ec2/describe_availability_zones_spec.rb +23 -0
  132. data/spec/aws/requests/ec2/describe_images_spec.rb +39 -0
  133. data/spec/aws/requests/ec2/describe_instances_spec.rb +86 -0
  134. data/spec/aws/requests/ec2/describe_key_pairs_spec.rb +42 -0
  135. data/spec/aws/requests/ec2/describe_regions_spec.rb +21 -0
  136. data/spec/aws/requests/ec2/describe_security_groups_spec.rb +51 -0
  137. data/spec/aws/requests/ec2/describe_snapshots_spec.rb +54 -0
  138. data/spec/aws/requests/ec2/describe_volumes_spec.rb +50 -0
  139. data/spec/aws/requests/ec2/detach_volume_spec.rb +43 -0
  140. data/spec/aws/requests/ec2/disassociate_address_spec.rb +35 -0
  141. data/spec/aws/requests/ec2/get_console_output_spec.rb +23 -0
  142. data/spec/aws/requests/ec2/reboot_instances_spec.rb +21 -0
  143. data/spec/aws/requests/ec2/release_address_spec.rb +26 -0
  144. data/spec/aws/requests/ec2/revoke_security_group_ingress_spec.rb +32 -0
  145. data/spec/aws/requests/ec2/run_instances_spec.rb +41 -0
  146. data/spec/aws/requests/ec2/terminate_instances_spec.rb +35 -0
  147. data/spec/aws/requests/s3/copy_object_spec.rb +62 -0
  148. data/spec/aws/requests/s3/delete_bucket_spec.rb +36 -0
  149. data/spec/aws/requests/s3/delete_object_spec.rb +37 -0
  150. data/spec/aws/requests/s3/get_bucket_location_spec.rb +30 -0
  151. data/spec/aws/requests/s3/get_bucket_spec.rb +110 -0
  152. data/spec/aws/requests/s3/get_object_spec.rb +45 -0
  153. data/spec/aws/requests/s3/get_request_payment_spec.rb +30 -0
  154. data/spec/aws/requests/s3/get_service_spec.rb +33 -0
  155. data/spec/aws/requests/s3/head_object_spec.rb +28 -0
  156. data/spec/aws/requests/s3/put_bucket_spec.rb +19 -0
  157. data/spec/aws/requests/s3/put_object_spec.rb +38 -0
  158. data/spec/aws/requests/s3/put_request_payment_spec.rb +29 -0
  159. data/spec/aws/requests/simpledb/batch_put_attributes_spec.rb +22 -0
  160. data/spec/aws/requests/simpledb/create_domain_spec.rb +21 -0
  161. data/spec/aws/requests/simpledb/delete_attributes_spec.rb +22 -0
  162. data/spec/aws/requests/simpledb/delete_domain_spec.rb +21 -0
  163. data/spec/aws/requests/simpledb/domain_metadata_spec.rb +43 -0
  164. data/spec/aws/requests/simpledb/get_attributes_spec.rb +31 -0
  165. data/spec/aws/requests/simpledb/list_domains_spec.rb +30 -0
  166. data/spec/aws/requests/simpledb/put_attributes_spec.rb +22 -0
  167. data/spec/aws/requests/simpledb/select_spec.rb +9 -0
  168. data/spec/lorem.txt +1 -0
  169. data/spec/spec.opts +1 -0
  170. data/spec/spec_helper.rb +66 -0
  171. metadata +309 -0
@@ -0,0 +1,35 @@
1
+ module Fog
2
+ module AWS
3
+ class SimpleDB
4
+
5
+ # List metadata for SimpleDB domain
6
+ #
7
+ # ==== Parameters
8
+ # * domain_name<~String> - Name of domain. Must be between 3 and 255 of the
9
+ # following characters: a-z, A-Z, 0-9, '_', '-' and '.'.
10
+ # * item_name<~String> - Name of the item. May use any UTF-8 characters valid
11
+ # in xml. Control characters and sequences not allowed in xml are not
12
+ # valid. Can be up to 1024 bytes long.
13
+ # * attributes<~Hash> - Name/value pairs to return from the item. Defaults to
14
+ # nil, which will return all attributes. Attribute names and values may use
15
+ # any UTF-8 characters valid in xml. Control characters and sequences not
16
+ # allowed in xml are not valid. Each name and value can be up to 1024
17
+ # bytes long.
18
+ #
19
+ # ==== Returns
20
+ # * response<~Fog::AWS::Response>:
21
+ # * body<~Hash>:
22
+ # * 'Attributes' - list of attribute name/values for the item
23
+ # * 'BoxUsage'
24
+ # * 'RequestId'
25
+ def get_attributes(domain_name, item_name, attributes = nil)
26
+ request({
27
+ 'Action' => 'GetAttributes',
28
+ 'DomainName' => domain_name,
29
+ 'ItemName' => item_name,
30
+ }.merge!(encode_attribute_names(attributes)), Fog::Parsers::AWS::SimpleDB::GetAttributes.new(@nil_string))
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,30 @@
1
+ module Fog
2
+ module AWS
3
+ class SimpleDB
4
+
5
+ # List SimpleDB domains
6
+ #
7
+ # ==== Parameters
8
+ # * options<~Hash> - options, defaults to {}
9
+ # * 'MaxNumberOfDomains'<~Integer> - number of domains to return
10
+ # between 1 and 100, defaults to 100
11
+ # * 'NextToken'<~String> - Offset token to start listing, defaults to nil
12
+ #
13
+ # ==== Returns
14
+ # * response<~Fog::AWS::Response>:
15
+ # * body<~Hash>:
16
+ # * 'BoxUsage'
17
+ # * 'Domains' - array of domain names.
18
+ # * 'NextToken' - offset to start with if there are are more domains to list
19
+ # * 'RequestId'
20
+ def list_domains(options = {})
21
+ request({
22
+ 'Action' => 'ListDomains',
23
+ 'MaxNumberOfDomains' => options['MaxNumberOfDomains'],
24
+ 'NextToken' => options['NextToken']
25
+ }, Fog::Parsers::AWS::SimpleDB::ListDomains.new(@nil_string))
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module AWS
3
+ class SimpleDB
4
+
5
+ # Put item attributes into a SimpleDB domain
6
+ #
7
+ # ==== Parameters
8
+ # * domain_name<~String> - Name of domain. Must be between 3 and 255 of the
9
+ # following characters: a-z, A-Z, 0-9, '_', '-' and '.'.
10
+ # * item_name<~String> - Name of the item. May use any UTF-8 characters valid
11
+ # in xml. Control characters and sequences not allowed in xml are not
12
+ # valid. Can be up to 1024 bytes long.
13
+ # * attributes<~Hash> - Name/value pairs to add to the item. Attribute names
14
+ # and values may use any UTF-8 characters valid in xml. Control characters
15
+ # and sequences not allowed in xml are not valid. Each name and value can
16
+ # be up to 1024 bytes long.
17
+ #
18
+ # ==== Returns
19
+ # * response<~Fog::AWS::Response>:
20
+ # * body<~Hash>:
21
+ # * 'BoxUsage'
22
+ # * 'RequestId'
23
+ def put_attributes(domain_name, item_name, attributes, replace_attributes = [])
24
+ batch_put_attributes(domain_name, { item_name => attributes }, { item_name => replace_attributes })
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module AWS
3
+ class SimpleDB
4
+
5
+ # Select item data from SimpleDB
6
+ #
7
+ # ==== Parameters
8
+ # * select_expression<~String> - Expression to query domain with.
9
+ # * next_token<~String> - Offset token to start list, defaults to nil.
10
+ #
11
+ # ==== Returns
12
+ # * response<~Fog::AWS::Response>:
13
+ # * body<~Hash>:
14
+ # * 'BoxUsage'<~Float>
15
+ # * 'RequestId'<~String>
16
+ # * 'Items'<~Hash> - list of attribute name/values for the items formatted as
17
+ # { 'item_name' => { 'attribute_name' => ['attribute_value'] }}
18
+ # * 'NextToken'<~String> - offset to start with if there are are more domains to list
19
+ def select(select_expression, next_token = nil)
20
+ request({
21
+ 'Action' => 'Select',
22
+ 'NextToken' => next_token,
23
+ 'SelectExpression' => select_expression
24
+ }, Fog::Parsers::AWS::SimpleDB::Select.new(@nil_string))
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,157 @@
1
+ module Fog
2
+ module AWS
3
+ class S3
4
+
5
+ if Fog.mocking?
6
+ def self.reset_data
7
+ @data = { :buckets => {} }
8
+ end
9
+ def self.data
10
+ @data
11
+ end
12
+ end
13
+
14
+ def self.reload
15
+ current_directory = File.dirname(__FILE__)
16
+ load "#{current_directory}/../collection.rb"
17
+ load "#{current_directory}/../connection.rb"
18
+ load "#{current_directory}/../model.rb"
19
+ load "#{current_directory}/../parser.rb"
20
+ load "#{current_directory}/../response.rb"
21
+
22
+ models_directory = "#{current_directory}/models/s3"
23
+ load "#{models_directory}/bucket.rb"
24
+ load "#{models_directory}/buckets.rb"
25
+ load "#{models_directory}/object.rb"
26
+ load "#{models_directory}/objects.rb"
27
+ load "#{models_directory}/owner.rb"
28
+
29
+ parsers_directory = "#{current_directory}/parsers/s3"
30
+ load "#{parsers_directory}/copy_object.rb"
31
+ load "#{parsers_directory}/get_bucket.rb"
32
+ load "#{parsers_directory}/get_bucket_location.rb"
33
+ load "#{parsers_directory}/get_request_payment.rb"
34
+ load "#{parsers_directory}/get_service.rb"
35
+
36
+ requests_directory = "#{current_directory}/requests/s3"
37
+ load "#{requests_directory}/copy_object.rb"
38
+ load "#{requests_directory}/delete_bucket.rb"
39
+ load "#{requests_directory}/delete_object.rb"
40
+ load "#{requests_directory}/get_bucket.rb"
41
+ load "#{requests_directory}/get_bucket_location.rb"
42
+ load "#{requests_directory}/get_object.rb"
43
+ load "#{requests_directory}/get_request_payment.rb"
44
+ load "#{requests_directory}/get_service.rb"
45
+ load "#{requests_directory}/head_object.rb"
46
+ load "#{requests_directory}/put_bucket.rb"
47
+ load "#{requests_directory}/put_object.rb"
48
+ load "#{requests_directory}/put_request_payment.rb"
49
+
50
+ if Fog.mocking?
51
+ reset_data
52
+ end
53
+ end
54
+
55
+ # Initialize connection to S3
56
+ #
57
+ # ==== Notes
58
+ # options parameter must include values for :aws_access_key_id and
59
+ # :aws_secret_access_key in order to create a connection
60
+ #
61
+ # ==== Examples
62
+ # sdb = S3.new(
63
+ # :aws_access_key_id => your_aws_access_key_id,
64
+ # :aws_secret_access_key => your_aws_secret_access_key
65
+ # )
66
+ #
67
+ # ==== Parameters
68
+ # * options<~Hash> - config arguments for connection. Defaults to {}.
69
+ #
70
+ # ==== Returns
71
+ # * S3 object with connection to aws.
72
+ def initialize(options={})
73
+ @aws_access_key_id = options[:aws_access_key_id]
74
+ @aws_secret_access_key = options[:aws_secret_access_key]
75
+ @hmac = HMAC::SHA1.new(@aws_secret_access_key)
76
+ @host = options[:host] || 's3.amazonaws.com'
77
+ @port = options[:port] || 443
78
+ @scheme = options[:scheme] || 'https'
79
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
80
+ end
81
+
82
+ private
83
+
84
+ def parse_file(file)
85
+ metadata = {
86
+ :body => nil,
87
+ :headers => {}
88
+ }
89
+
90
+ filename = File.basename(file.path)
91
+ unless (mime_types = MIME::Types.of(filename)).empty?
92
+ metadata[:headers]['Content-Type'] = mime_types.first.content_type
93
+ end
94
+
95
+ metadata[:body] = file.read
96
+ metadata[:headers]['Content-Length'] = metadata[:body].size.to_s
97
+ metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip
98
+ metadata
99
+ end
100
+
101
+ def request(params)
102
+ params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000")
103
+
104
+ string_to_sign =
105
+ <<-DATA
106
+ #{params[:method]}
107
+ #{params[:headers]['Content-MD5']}
108
+ #{params[:headers]['Content-Type']}
109
+ #{params[:headers]['Date']}
110
+ DATA
111
+
112
+ amz_headers, canonical_amz_headers = {}, ''
113
+ for key, value in params[:headers]
114
+ if key[0..5] == 'x-amz-'
115
+ amz_headers[key] = value
116
+ end
117
+ end
118
+ amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]}
119
+ for pair in amz_headers
120
+ canonical_amz_headers << "#{pair[0]}:#{pair[1]}\n"
121
+ end
122
+ string_to_sign << "#{canonical_amz_headers}"
123
+
124
+ canonical_resource = "/"
125
+ subdomain = params[:host].split(".#{@host}").first
126
+ unless subdomain == @host
127
+ canonical_resource << "#{subdomain}/"
128
+ end
129
+ canonical_resource << "#{params[:path]}"
130
+ if ['acl', 'location', 'logging', 'requestPayment', 'torrent'].include?(params[:query])
131
+ canonical_resource << "?#{params[:query]}"
132
+ end
133
+ string_to_sign << "#{canonical_resource}"
134
+
135
+ hmac = @hmac.update(string_to_sign)
136
+ signature = Base64.encode64(hmac.digest).chomp!
137
+ params[:headers]['Authorization'] = "AWS #{@aws_access_key_id}:#{signature}"
138
+
139
+ response = @connection.request({
140
+ :body => params[:body],
141
+ :expects => params[:expects],
142
+ :headers => params[:headers],
143
+ :host => params[:host],
144
+ :method => params[:method],
145
+ :parser => params[:parser],
146
+ :path => params[:path],
147
+ :query => params[:query]
148
+ })
149
+
150
+ response
151
+ end
152
+
153
+ end
154
+ end
155
+ end
156
+
157
+ Fog::AWS::S3.reload
@@ -0,0 +1,157 @@
1
+ module Fog
2
+ module AWS
3
+ class SimpleDB
4
+
5
+ def self.reload
6
+ current_directory = File.dirname(__FILE__)
7
+ load "#{current_directory}/../connection.rb"
8
+ load "#{current_directory}/../parser.rb"
9
+ load "#{current_directory}/../response.rb"
10
+
11
+ parsers_directory = "#{current_directory}/parsers/simpledb"
12
+ load "#{parsers_directory}/basic.rb"
13
+ load "#{parsers_directory}/domain_metadata.rb"
14
+ load "#{parsers_directory}/get_attributes.rb"
15
+ load "#{parsers_directory}/list_domains.rb"
16
+ load "#{parsers_directory}/select.rb"
17
+
18
+ requests_directory = "#{current_directory}/requests/simpledb"
19
+ load "#{requests_directory}/batch_put_attributes.rb"
20
+ load "#{requests_directory}/create_domain.rb"
21
+ load "#{requests_directory}/delete_attributes.rb"
22
+ load "#{requests_directory}/delete_domain.rb"
23
+ load "#{requests_directory}/domain_metadata.rb"
24
+ load "#{requests_directory}/get_attributes.rb"
25
+ load "#{requests_directory}/list_domains.rb"
26
+ load "#{requests_directory}/put_attributes.rb"
27
+ load "#{requests_directory}/select.rb"
28
+ end
29
+
30
+ # Initialize connection to SimpleDB
31
+ #
32
+ # ==== Notes
33
+ # options parameter must include values for :aws_access_key_id and
34
+ # :aws_secret_access_key in order to create a connection
35
+ #
36
+ # ==== Examples
37
+ # sdb = SimpleDB.new(
38
+ # :aws_access_key_id => your_aws_access_key_id,
39
+ # :aws_secret_access_key => your_aws_secret_access_key
40
+ # )
41
+ #
42
+ # ==== Parameters
43
+ # * options<~Hash> - config arguments for connection. Defaults to {}.
44
+ #
45
+ # ==== Returns
46
+ # * SimpleDB object with connection to aws.
47
+ def initialize(options={})
48
+ @aws_access_key_id = options[:aws_access_key_id]
49
+ @aws_secret_access_key = options[:aws_secret_access_key]
50
+ @hmac = HMAC::SHA256.new(@aws_secret_access_key)
51
+ @host = options[:host] || 'sdb.amazonaws.com'
52
+ @nil_string = options[:nil_string]|| 'nil'
53
+ @port = options[:port] || 443
54
+ @scheme = options[:scheme] || 'https'
55
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
56
+ end
57
+
58
+ private
59
+
60
+ def encode_attributes(attributes, replace_attributes = [])
61
+ encoded_attributes = {}
62
+ if attributes
63
+ index = 0
64
+ for key in attributes.keys
65
+ for value in Array(attributes[key])
66
+ encoded_attributes["Attribute.#{index}.Name"] = key.to_s
67
+ if replace_attributes.include?(key)
68
+ encoded_attributes["Attribute.#{index}.Replace"] = 'true'
69
+ end
70
+ encoded_attributes["Attribute.#{index}.Value"] = sdb_encode(value)
71
+ index += 1
72
+ end
73
+ end
74
+ end
75
+ encoded_attributes
76
+ end
77
+
78
+ def encode_attribute_names(attributes)
79
+ encoded_attribute_names = {}
80
+ if attributes
81
+ index = 0
82
+ for attribute in attributes
83
+ encoded_attribute_names["AttributeName.#{index}"] = attribute.to_s
84
+ index += 1
85
+ end
86
+ end
87
+ encoded_attribute_names
88
+ end
89
+
90
+ def encode_batch_attributes(items, replace_attributes = Hash.new([]))
91
+ encoded_attributes = {}
92
+ if items
93
+ item_index = 0
94
+ for item_key in items.keys
95
+ encoded_attributes["Item.#{item_index}.ItemName"] = item_key.to_s
96
+ for attribute_key in items[item_key].keys
97
+ attribute_index = 0
98
+ for value in Array(items[item_key][attribute_key])
99
+ encoded_attributes["Item.#{item_index}.Attribute.#{attribute_index}.Name"] = attribute_key.to_s
100
+ if replace_attributes[item_key].include?(attribute_key)
101
+ encoded_attributes["Item.#{item_index}.Attribute.#{attribute_index}.Replace"] = 'true'
102
+ end
103
+ encoded_attributes["Item.#{item_index}.Attribute.#{attribute_index}.Value"] = sdb_encode(value)
104
+ attribute_index += 1
105
+ end
106
+ item_index += 1
107
+ end
108
+ end
109
+ end
110
+ encoded_attributes
111
+ end
112
+
113
+ def request(params, parser)
114
+ params.merge!({
115
+ 'AWSAccessKeyId' => @aws_access_key_id,
116
+ 'SignatureMethod' => 'HmacSHA256',
117
+ 'SignatureVersion' => '2',
118
+ 'Timestamp' => Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
119
+ 'Version' => '2007-11-07'
120
+ })
121
+
122
+ body = ''
123
+ for key in params.keys.sort
124
+ unless (value = params[key]).nil?
125
+ body << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')}&"
126
+ end
127
+ end
128
+
129
+ string_to_sign = "POST\n#{@host}\n/\n" << body.chop
130
+ hmac = @hmac.update(string_to_sign)
131
+ body << "Signature=#{CGI.escape(Base64.encode64(hmac.digest).chomp!).gsub(/\+/, '%20')}"
132
+
133
+ response = @connection.request({
134
+ :body => body,
135
+ :expects => 200,
136
+ :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
137
+ :host => @host,
138
+ :method => 'POST',
139
+ :parser => parser
140
+ })
141
+
142
+ response
143
+ end
144
+
145
+ def sdb_encode(value)
146
+ if value.nil?
147
+ @nil_string
148
+ else
149
+ value.to_s
150
+ end
151
+ end
152
+
153
+ end
154
+ end
155
+ end
156
+
157
+ Fog::AWS::SimpleDB.reload
@@ -0,0 +1,77 @@
1
+ module Fog
2
+ class Collection < Hash
3
+
4
+ def self.attribute(name, other_names = [])
5
+ class_eval <<-EOS, __FILE__, __LINE__
6
+ attr_accessor :#{name}
7
+ EOS
8
+ attributes << name
9
+ for other_name in [*other_names]
10
+ aliases[other_name] = name
11
+ end
12
+ end
13
+
14
+ def self.aliases
15
+ @aliases ||= {}
16
+ end
17
+
18
+ def self.attributes
19
+ @attributes ||= []
20
+ end
21
+
22
+ def initialize(attributes = {})
23
+ merge_attributes(attributes)
24
+ end
25
+
26
+ def inspect
27
+ data = "#<#{self.class.name}"
28
+ for attribute in self.class.attributes
29
+ data << " #{attribute}=#{send(attribute).inspect}"
30
+ end
31
+ data << " ["
32
+ for key, value in self
33
+ data << "#{value.inspect},"
34
+ end
35
+ data.chomp!
36
+ data << "]>"
37
+ end
38
+
39
+ def attributes
40
+ attributes = {}
41
+ for attribute in self.class.attributes
42
+ attributes[attribute] = send(:"#{attribute}")
43
+ end
44
+ attributes
45
+ end
46
+
47
+ def merge_attributes(new_attributes = {})
48
+ for key, value in new_attributes
49
+ if aliased_key = self.class.aliases[key]
50
+ send(:"#{aliased_key}=", value)
51
+ else
52
+ send(:"#{key}=", value)
53
+ end
54
+ end
55
+ self
56
+ end
57
+
58
+ private
59
+
60
+ def connection=(new_connection)
61
+ @connection = new_connection
62
+ end
63
+
64
+ def connection
65
+ @connection
66
+ end
67
+
68
+ def remap_attributes(attributes, mapping)
69
+ for key, value in mapping
70
+ if attributes.key?(key)
71
+ attributes[value] = attributes.delete(key)
72
+ end
73
+ end
74
+ end
75
+
76
+ end
77
+ end