fog 0.0.56 → 0.0.57

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 (85) hide show
  1. data/Rakefile +1 -1
  2. data/VERSION.yml +1 -1
  3. data/fog.gemspec +4 -4
  4. data/lib/fog/aws.rb +4 -3
  5. data/lib/fog/aws/ec2.rb +136 -150
  6. data/lib/fog/aws/models/ec2/address.rb +3 -1
  7. data/lib/fog/aws/models/ec2/addresses.rb +20 -6
  8. data/lib/fog/aws/models/ec2/flavor.rb +3 -1
  9. data/lib/fog/aws/models/ec2/flavors.rb +14 -3
  10. data/lib/fog/aws/models/ec2/image.rb +3 -1
  11. data/lib/fog/aws/models/ec2/images.rb +14 -3
  12. data/lib/fog/aws/models/ec2/key_pair.rb +3 -1
  13. data/lib/fog/aws/models/ec2/key_pairs.rb +14 -3
  14. data/lib/fog/aws/models/ec2/security_group.rb +3 -1
  15. data/lib/fog/aws/models/ec2/security_groups.rb +14 -3
  16. data/lib/fog/aws/models/ec2/server.rb +3 -1
  17. data/lib/fog/aws/models/ec2/servers.rb +14 -3
  18. data/lib/fog/aws/models/ec2/snapshot.rb +3 -1
  19. data/lib/fog/aws/models/ec2/snapshots.rb +18 -5
  20. data/lib/fog/aws/models/ec2/volume.rb +3 -1
  21. data/lib/fog/aws/models/ec2/volumes.rb +18 -5
  22. data/lib/fog/aws/models/s3/directories.rb +14 -3
  23. data/lib/fog/aws/models/s3/directory.rb +4 -1
  24. data/lib/fog/aws/models/s3/file.rb +3 -1
  25. data/lib/fog/aws/models/s3/files.rb +4 -1
  26. data/lib/fog/aws/parsers/simpledb/domain_metadata.rb +2 -0
  27. data/lib/fog/aws/parsers/simpledb/get_attributes.rb +2 -0
  28. data/lib/fog/aws/parsers/simpledb/list_domains.rb +2 -0
  29. data/lib/fog/aws/parsers/simpledb/select.rb +2 -0
  30. data/lib/fog/aws/requests/ec2/allocate_address.rb +11 -16
  31. data/lib/fog/aws/requests/ec2/associate_address.rb +14 -19
  32. data/lib/fog/aws/requests/ec2/attach_volume.rb +16 -21
  33. data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +29 -27
  34. data/lib/fog/aws/requests/ec2/create_key_pair.rb +13 -18
  35. data/lib/fog/aws/requests/ec2/create_security_group.rb +14 -19
  36. data/lib/fog/aws/requests/ec2/create_snapshot.rb +13 -18
  37. data/lib/fog/aws/requests/ec2/create_volume.rb +14 -19
  38. data/lib/fog/aws/requests/ec2/delete_key_pair.rb +12 -17
  39. data/lib/fog/aws/requests/ec2/delete_security_group.rb +13 -18
  40. data/lib/fog/aws/requests/ec2/delete_snapshot.rb +12 -17
  41. data/lib/fog/aws/requests/ec2/delete_volume.rb +13 -18
  42. data/lib/fog/aws/requests/ec2/describe_addresses.rb +11 -16
  43. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +9 -14
  44. data/lib/fog/aws/requests/ec2/describe_images.rb +9 -14
  45. data/lib/fog/aws/requests/ec2/describe_instances.rb +17 -22
  46. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +11 -16
  47. data/lib/fog/aws/requests/ec2/describe_regions.rb +9 -14
  48. data/lib/fog/aws/requests/ec2/describe_reserved_instances.rb +9 -14
  49. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +11 -16
  50. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +12 -17
  51. data/lib/fog/aws/requests/ec2/describe_volumes.rb +14 -19
  52. data/lib/fog/aws/requests/ec2/detach_volume.rb +11 -16
  53. data/lib/fog/aws/requests/ec2/disassociate_address.rb +12 -17
  54. data/lib/fog/aws/requests/ec2/get_console_output.rb +12 -17
  55. data/lib/fog/aws/requests/ec2/reboot_instances.rb +11 -16
  56. data/lib/fog/aws/requests/ec2/release_address.rb +12 -17
  57. data/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb +10 -15
  58. data/lib/fog/aws/requests/ec2/run_instances.rb +36 -38
  59. data/lib/fog/aws/requests/ec2/terminate_instances.rb +16 -20
  60. data/lib/fog/aws/requests/s3/copy_object.rb +9 -15
  61. data/lib/fog/aws/requests/s3/delete_bucket.rb +9 -16
  62. data/lib/fog/aws/requests/s3/delete_object.rb +6 -14
  63. data/lib/fog/aws/requests/s3/get_bucket.rb +9 -14
  64. data/lib/fog/aws/requests/s3/get_bucket_location.rb +8 -14
  65. data/lib/fog/aws/requests/s3/get_object.rb +7 -15
  66. data/lib/fog/aws/requests/s3/get_request_payment.rb +7 -13
  67. data/lib/fog/aws/requests/s3/get_service.rb +7 -13
  68. data/lib/fog/aws/requests/s3/head_object.rb +6 -14
  69. data/lib/fog/aws/requests/s3/put_bucket.rb +13 -21
  70. data/lib/fog/aws/requests/s3/put_object.rb +8 -16
  71. data/lib/fog/aws/requests/s3/put_request_payment.rb +7 -16
  72. data/lib/fog/aws/requests/simpledb/batch_put_attributes.rb +14 -21
  73. data/lib/fog/aws/requests/simpledb/create_domain.rb +11 -18
  74. data/lib/fog/aws/requests/simpledb/delete_attributes.rb +15 -22
  75. data/lib/fog/aws/requests/simpledb/delete_domain.rb +11 -18
  76. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +14 -19
  77. data/lib/fog/aws/requests/simpledb/get_attributes.rb +19 -23
  78. data/lib/fog/aws/requests/simpledb/list_domains.rb +11 -16
  79. data/lib/fog/aws/requests/simpledb/put_attributes.rb +15 -15
  80. data/lib/fog/aws/requests/simpledb/select.rb +12 -17
  81. data/lib/fog/aws/s3.rb +117 -121
  82. data/lib/fog/aws/simpledb.rb +127 -127
  83. data/lib/fog/rackspace/models/servers/images.rb +1 -1
  84. data/spec/aws/requests/ec2/authorize_security_group_ingress_spec.rb +11 -1
  85. metadata +4 -4
@@ -1,8 +1,9 @@
1
- unless Fog.mocking?
1
+ module Fog
2
+ module AWS
3
+ module SimpleDB
4
+ class Real
2
5
 
3
- module Fog
4
- module AWS
5
- class SimpleDB
6
+ require 'fog/aws/parsers/simpledb/list_domains'
6
7
 
7
8
  # List SimpleDB domains
8
9
  #
@@ -21,27 +22,22 @@ unless Fog.mocking?
21
22
  # * 'RequestId'
22
23
  def list_domains(options = {})
23
24
  request({
24
- 'Action' => 'ListDomains'
25
- }.merge!(options), Fog::Parsers::AWS::SimpleDB::ListDomains.new(@nil_string))
25
+ 'Action' => 'ListDomains',
26
+ :parser => Fog::Parsers::AWS::SimpleDB::ListDomains.new(@nil_string)
27
+ }.merge!(options))
26
28
  end
27
29
 
28
30
  end
29
- end
30
- end
31
31
 
32
- else
33
-
34
- module Fog
35
- module AWS
36
- class SimpleDB
32
+ class Mock
37
33
 
38
34
  def list_domains(options = {})
39
35
  response = Excon::Response.new
40
- keys = Fog::AWS::SimpleDB.data[:domains].keys
36
+ keys = @data[:domains].keys
41
37
  max = options['MaxNumberOfDomains'] || keys.size
42
38
  offset = options['NextToken'] || 0
43
39
  domains = []
44
- for key, value in Fog::AWS::SimpleDB.data[:domains].keys[offset...max]
40
+ for key, value in @data[:domains].keys[offset...max]
45
41
  domains << key
46
42
  end
47
43
  response.status = 200
@@ -59,5 +55,4 @@ else
59
55
  end
60
56
  end
61
57
  end
62
-
63
58
  end
@@ -1,8 +1,7 @@
1
- unless Fog.mocking?
2
-
3
- module Fog
4
- module AWS
5
- class SimpleDB
1
+ module Fog
2
+ module AWS
3
+ module SimpleDB
4
+ class Real
6
5
 
7
6
  # Put item attributes into a SimpleDB domain
8
7
  #
@@ -23,25 +22,26 @@ unless Fog.mocking?
23
22
  # * 'BoxUsage'
24
23
  # * 'RequestId'
25
24
  def put_attributes(domain_name, item_name, attributes, replace_attributes = [])
26
- batch_put_attributes(domain_name, { item_name => attributes }, { item_name => replace_attributes })
25
+ batch_put_attributes(
26
+ domain_name,
27
+ { item_name => attributes },
28
+ { item_name => replace_attributes }
29
+ )
27
30
  end
28
31
 
29
32
  end
30
- end
31
- end
32
33
 
33
- else
34
-
35
- module Fog
36
- module AWS
37
- class SimpleDb
34
+ class Mock
38
35
 
39
36
  def put_attributes(domain_name, item_name, attributes, replace_attributes = [])
40
- batch_put_attributes(domain_name, { item_name => attributes }, { item_name => replace_attributes })
37
+ batch_put_attributes(
38
+ domain_name,
39
+ { item_name => attributes },
40
+ { item_name => replace_attributes }
41
+ )
41
42
  end
42
43
 
43
44
  end
44
45
  end
45
46
  end
46
-
47
47
  end
@@ -1,8 +1,9 @@
1
- unless Fog.mocking?
1
+ module Fog
2
+ module AWS
3
+ module SimpleDB
4
+ class Real
2
5
 
3
- module Fog
4
- module AWS
5
- class SimpleDB
6
+ require 'fog/aws/parsers/simpledb/select'
6
7
 
7
8
  # Select item data from SimpleDB
8
9
  #
@@ -19,22 +20,17 @@ unless Fog.mocking?
19
20
  # { 'item_name' => { 'attribute_name' => ['attribute_value'] }}
20
21
  # * 'NextToken'<~String> - offset to start with if there are are more domains to list
21
22
  def select(select_expression, next_token = nil)
22
- request({
23
- 'Action' => 'Select',
24
- 'NextToken' => next_token,
25
- 'SelectExpression' => select_expression
26
- }, Fog::Parsers::AWS::SimpleDB::Select.new(@nil_string))
23
+ request(
24
+ 'Action' => 'Select',
25
+ 'NextToken' => next_token,
26
+ 'SelectExpression' => select_expression,
27
+ :parser => Fog::Parsers::AWS::SimpleDB::Select.new(@nil_string)
28
+ )
27
29
  end
28
30
 
29
31
  end
30
- end
31
- end
32
32
 
33
- else
34
-
35
- module Fog
36
- module AWS
37
- class SimpleDB
33
+ class Mock
38
34
 
39
35
  def select(select_expression, next_token = nil)
40
36
  raise MockNotImplemented.new("Contributions welcome!")
@@ -43,5 +39,4 @@ else
43
39
  end
44
40
  end
45
41
  end
46
-
47
42
  end
@@ -1,82 +1,33 @@
1
+ require 'fog/aws/models/s3/directories'
2
+ require 'fog/aws/models/s3/directory'
3
+ require 'fog/aws/models/s3/files'
4
+ require 'fog/aws/models/s3/file'
5
+ require 'fog/aws/requests/s3/copy_object'
6
+ require 'fog/aws/requests/s3/delete_bucket'
7
+ require 'fog/aws/requests/s3/delete_object'
8
+ require 'fog/aws/requests/s3/get_bucket'
9
+ require 'fog/aws/requests/s3/get_bucket_location'
10
+ require 'fog/aws/requests/s3/get_object'
11
+ require 'fog/aws/requests/s3/get_request_payment'
12
+ require 'fog/aws/requests/s3/get_service'
13
+ require 'fog/aws/requests/s3/head_object'
14
+ require 'fog/aws/requests/s3/put_bucket'
15
+ require 'fog/aws/requests/s3/put_object'
16
+ require 'fog/aws/requests/s3/put_request_payment'
17
+
1
18
  module Fog
2
19
  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.dependencies
15
- [
16
- "fog/aws/models/s3/directory.rb",
17
- "fog/aws/models/s3/directories.rb",
18
- "fog/aws/models/s3/file.rb",
19
- "fog/aws/models/s3/files.rb",
20
- "fog/aws/parsers/s3/copy_object.rb",
21
- "fog/aws/parsers/s3/get_bucket.rb",
22
- "fog/aws/parsers/s3/get_bucket_location.rb",
23
- "fog/aws/parsers/s3/get_request_payment.rb",
24
- "fog/aws/parsers/s3/get_service.rb",
25
- "fog/aws/requests/s3/copy_object.rb",
26
- "fog/aws/requests/s3/delete_bucket.rb",
27
- "fog/aws/requests/s3/delete_object.rb",
28
- "fog/aws/requests/s3/get_bucket.rb",
29
- "fog/aws/requests/s3/get_bucket_location.rb",
30
- "fog/aws/requests/s3/get_object.rb",
31
- "fog/aws/requests/s3/get_request_payment.rb",
32
- "fog/aws/requests/s3/get_service.rb",
33
- "fog/aws/requests/s3/head_object.rb",
34
- "fog/aws/requests/s3/put_bucket.rb",
35
- "fog/aws/requests/s3/put_object.rb",
36
- "fog/aws/requests/s3/put_request_payment.rb"
37
- ]
38
- end
20
+ module S3
39
21
 
40
- def self.reload
41
- self.dependencies.each {|dependency| load(dependency)}
22
+ def self.new(options={})
42
23
  if Fog.mocking?
43
- reset_data
44
- end
45
- end
46
-
47
- # Initialize connection to S3
48
- #
49
- # ==== Notes
50
- # options parameter must include values for :aws_access_key_id and
51
- # :aws_secret_access_key in order to create a connection
52
- #
53
- # ==== Examples
54
- # s3 = S3.new(
55
- # :aws_access_key_id => your_aws_access_key_id,
56
- # :aws_secret_access_key => your_aws_secret_access_key
57
- # )
58
- #
59
- # ==== Parameters
60
- # * options<~Hash> - config arguments for connection. Defaults to {}.
61
- #
62
- # ==== Returns
63
- # * S3 object with connection to aws.
64
- def initialize(options={})
65
- unless @aws_access_key_id = options[:aws_access_key_id]
66
- raise ArgumentError.new('aws_access_key_id is required to access ec2')
67
- end
68
- unless @aws_secret_access_key = options[:aws_secret_access_key]
69
- raise ArgumentError.new('aws_secret_access_key is required to access ec2')
24
+ Fog::AWS::S3::Mock.new(options)
25
+ else
26
+ Fog::AWS::S3::Real.new(options)
70
27
  end
71
- @hmac = HMAC::SHA1.new(@aws_secret_access_key)
72
- @host = options[:host] || 's3.amazonaws.com'
73
- @port = options[:port] || 443
74
- @scheme = options[:scheme] || 'https'
75
28
  end
76
29
 
77
- private
78
-
79
- def parse_data(data)
30
+ def self.parse_data(data)
80
31
  metadata = {
81
32
  :body => nil,
82
33
  :headers => {}
@@ -97,27 +48,64 @@ module Fog
97
48
  metadata
98
49
  end
99
50
 
100
- def request(params)
101
- @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
102
- params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000")
103
- params[:headers]['Authorization'] = "AWS #{@aws_access_key_id}:#{signature(params)}"
51
+ class Mock
104
52
 
105
- response = @connection.request(params)
53
+ def reset_data
54
+ @data = { :buckets => {} }
55
+ end
106
56
 
107
- response
108
- end
57
+ def initialize(options={})
58
+ reset_data
59
+ end
109
60
 
110
- def url(params, expires)
111
- params[:headers]['Date'] = expires.to_i
112
- query = [params[:query]].compact
113
- query << "AWSAccessKeyId=#{@aws_access_key_id}"
114
- query << "Signature=#{CGI.escape(signature(params))}"
115
- query << "Expires=#{params[:headers]['Date']}"
116
- "http://#{params[:host]}/#{params[:path]}?#{query.join('&')}"
117
61
  end
118
62
 
119
- def signature(params)
120
- string_to_sign =
63
+ class Real
64
+
65
+ # Initialize connection to S3
66
+ #
67
+ # ==== Notes
68
+ # options parameter must include values for :aws_access_key_id and
69
+ # :aws_secret_access_key in order to create a connection
70
+ #
71
+ # ==== Examples
72
+ # s3 = S3.new(
73
+ # :aws_access_key_id => your_aws_access_key_id,
74
+ # :aws_secret_access_key => your_aws_secret_access_key
75
+ # )
76
+ #
77
+ # ==== Parameters
78
+ # * options<~Hash> - config arguments for connection. Defaults to {}.
79
+ #
80
+ # ==== Returns
81
+ # * S3 object with connection to aws.
82
+ def initialize(options={})
83
+ unless @aws_access_key_id = options[:aws_access_key_id]
84
+ raise ArgumentError.new('aws_access_key_id is required to access ec2')
85
+ end
86
+ unless @aws_secret_access_key = options[:aws_secret_access_key]
87
+ raise ArgumentError.new('aws_secret_access_key is required to access ec2')
88
+ end
89
+ @hmac = HMAC::SHA1.new(@aws_secret_access_key)
90
+ @host = options[:host] || 's3.amazonaws.com'
91
+ @port = options[:port] || 443
92
+ @scheme = options[:scheme] || 'https'
93
+ end
94
+
95
+ private
96
+
97
+ def request(params)
98
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
99
+ params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000")
100
+ params[:headers]['Authorization'] = "AWS #{@aws_access_key_id}:#{signature(params)}"
101
+
102
+ response = @connection.request(params)
103
+
104
+ response
105
+ end
106
+
107
+ def signature(params)
108
+ string_to_sign =
121
109
  <<-DATA
122
110
  #{params[:method]}
123
111
  #{params[:headers]['Content-MD5']}
@@ -125,46 +113,54 @@ module Fog
125
113
  #{params[:headers]['Date']}
126
114
  DATA
127
115
 
128
- amz_headers, canonical_amz_headers = {}, ''
129
- for key, value in params[:headers]
130
- if key[0..5] == 'x-amz-'
131
- amz_headers[key] = value
116
+ amz_headers, canonical_amz_headers = {}, ''
117
+ for key, value in params[:headers]
118
+ if key[0..5] == 'x-amz-'
119
+ amz_headers[key] = value
120
+ end
132
121
  end
133
- end
134
- amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]}
135
- for pair in amz_headers
136
- canonical_amz_headers << "#{pair[0]}:#{pair[1]}\n"
137
- end
138
- string_to_sign << "#{canonical_amz_headers}"
139
-
140
- subdomain = params[:host].split(".#{@host}").first
141
- unless subdomain =~ /^(?:[a-z]|\d(?!\d{0,2}(?:\.\d{1,3}){3}$))(?:[a-z0-9]|\.(?![\.\-])|\-(?![\.])){1,61}[a-z0-9]$/
142
- puts("[WARN] fog: the specified s3 bucket name(#{subdomain}) is not a valid dns name. See: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?Introduction.html")
143
- params[:host] = params[:host].split("#{subdomain}.")[-1]
144
- if params[:path]
145
- params[:path] = "#{subdomain}/#{params[:path]}"
146
- else
147
- params[:path] = "#{subdomain}"
122
+ amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]}
123
+ for pair in amz_headers
124
+ canonical_amz_headers << "#{pair[0]}:#{pair[1]}\n"
125
+ end
126
+ string_to_sign << "#{canonical_amz_headers}"
127
+
128
+ subdomain = params[:host].split(".#{@host}").first
129
+ unless subdomain =~ /^(?:[a-z]|\d(?!\d{0,2}(?:\.\d{1,3}){3}$))(?:[a-z0-9]|\.(?![\.\-])|\-(?![\.])){1,61}[a-z0-9]$/
130
+ puts("[WARN] fog: the specified s3 bucket name(#{subdomain}) is not a valid dns name. See: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?Introduction.html")
131
+ params[:host] = params[:host].split("#{subdomain}.")[-1]
132
+ if params[:path]
133
+ params[:path] = "#{subdomain}/#{params[:path]}"
134
+ else
135
+ params[:path] = "#{subdomain}"
136
+ end
137
+ subdomain = nil
148
138
  end
149
- subdomain = nil
150
- end
151
139
 
152
- canonical_resource = "/"
153
- unless subdomain.nil? || subdomain == @host
154
- canonical_resource << "#{CGI.escape(subdomain).downcase}/"
140
+ canonical_resource = "/"
141
+ unless subdomain.nil? || subdomain == @host
142
+ canonical_resource << "#{CGI.escape(subdomain).downcase}/"
143
+ end
144
+ canonical_resource << "#{params[:path]}"
145
+ if ['acl', 'location', 'logging', 'requestPayment', 'torrent'].include?(params[:query])
146
+ canonical_resource << "?#{params[:query]}"
147
+ end
148
+ string_to_sign << "#{canonical_resource}"
149
+
150
+ hmac = @hmac.update(string_to_sign)
151
+ signature = Base64.encode64(hmac.digest).chomp!
155
152
  end
156
- canonical_resource << "#{params[:path]}"
157
- if ['acl', 'location', 'logging', 'requestPayment', 'torrent'].include?(params[:query])
158
- canonical_resource << "?#{params[:query]}"
153
+
154
+ def url(params, expires)
155
+ params[:headers]['Date'] = expires.to_i
156
+ query = [params[:query]].compact
157
+ query << "AWSAccessKeyId=#{@aws_access_key_id}"
158
+ query << "Signature=#{CGI.escape(signature(params))}"
159
+ query << "Expires=#{params[:headers]['Date']}"
160
+ "http://#{params[:host]}/#{params[:path]}?#{query.join('&')}"
159
161
  end
160
- string_to_sign << "#{canonical_resource}"
161
162
 
162
- hmac = @hmac.update(string_to_sign)
163
- signature = Base64.encode64(hmac.digest).chomp!
164
163
  end
165
-
166
164
  end
167
165
  end
168
166
  end
169
-
170
- Fog::AWS::S3.reload
@@ -1,159 +1,159 @@
1
+ require 'fog/aws/requests/simpledb/batch_put_attributes'
2
+ require 'fog/aws/requests/simpledb/create_domain'
3
+ require 'fog/aws/requests/simpledb/delete_attributes'
4
+ require 'fog/aws/requests/simpledb/delete_domain'
5
+ require 'fog/aws/requests/simpledb/domain_metadata'
6
+ require 'fog/aws/requests/simpledb/get_attributes'
7
+ require 'fog/aws/requests/simpledb/list_domains'
8
+ require 'fog/aws/requests/simpledb/put_attributes'
9
+ require 'fog/aws/requests/simpledb/select'
10
+
1
11
  module Fog
2
12
  module AWS
3
- class SimpleDB
13
+ module SimpleDB
4
14
 
5
- if Fog.mocking?
6
- def self.reset_data
7
- @data = { :domains => {} }
8
- end
9
- def self.data
10
- @data
15
+ def self.new(options={})
16
+ if Fog.mocking?
17
+ Fog::AWS::SimpleDB::Mock.new(options)
18
+ else
19
+ Fog::AWS::SimpleDB::Real.new(options)
11
20
  end
12
21
  end
13
22
 
14
- def self.dependencies
15
- [
16
- "fog/aws/parsers/simpledb/basic.rb",
17
- "fog/aws/parsers/simpledb/domain_metadata.rb",
18
- "fog/aws/parsers/simpledb/get_attributes.rb",
19
- "fog/aws/parsers/simpledb/list_domains.rb",
20
- "fog/aws/parsers/simpledb/select.rb",
21
- "fog/aws/requests/simpledb/batch_put_attributes.rb",
22
- "fog/aws/requests/simpledb/create_domain.rb",
23
- "fog/aws/requests/simpledb/delete_attributes.rb",
24
- "fog/aws/requests/simpledb/delete_domain.rb",
25
- "fog/aws/requests/simpledb/domain_metadata.rb",
26
- "fog/aws/requests/simpledb/get_attributes.rb",
27
- "fog/aws/requests/simpledb/list_domains.rb",
28
- "fog/aws/requests/simpledb/put_attributes.rb",
29
- "fog/aws/requests/simpledb/select.rb"
30
- ]
31
- end
23
+ class Mock
32
24
 
33
- def self.reload
34
- self.dependencies.each {|dependency| load(dependency)}
35
- if Fog.mocking?
25
+ def reset_data
26
+ @data = { :domains => {} }
27
+ end
28
+
29
+ def initialize(options={})
36
30
  reset_data
37
31
  end
38
- end
39
32
 
40
- # Initialize connection to SimpleDB
41
- #
42
- # ==== Notes
43
- # options parameter must include values for :aws_access_key_id and
44
- # :aws_secret_access_key in order to create a connection
45
- #
46
- # ==== Examples
47
- # sdb = SimpleDB.new(
48
- # :aws_access_key_id => your_aws_access_key_id,
49
- # :aws_secret_access_key => your_aws_secret_access_key
50
- # )
51
- #
52
- # ==== Parameters
53
- # * options<~Hash> - config arguments for connection. Defaults to {}.
54
- #
55
- # ==== Returns
56
- # * SimpleDB object with connection to aws.
57
- def initialize(options={})
58
- @aws_access_key_id = options[:aws_access_key_id]
59
- @aws_secret_access_key = options[:aws_secret_access_key]
60
- @hmac = HMAC::SHA256.new(@aws_secret_access_key)
61
- @host = options[:host] || 'sdb.amazonaws.com'
62
- @nil_string = options[:nil_string]|| 'nil'
63
- @port = options[:port] || 443
64
- @scheme = options[:scheme] || 'https'
65
33
  end
66
34
 
67
- private
68
-
69
- def encode_attributes(attributes, replace_attributes = [])
70
- encoded_attributes = {}
71
- if attributes
72
- index = 0
73
- for key in attributes.keys
74
- for value in Array(attributes[key])
75
- encoded_attributes["Attribute.#{index}.Name"] = key.to_s
76
- if replace_attributes.include?(key)
77
- encoded_attributes["Attribute.#{index}.Replace"] = 'true'
35
+ class Real
36
+
37
+ # Initialize connection to SimpleDB
38
+ #
39
+ # ==== Notes
40
+ # options parameter must include values for :aws_access_key_id and
41
+ # :aws_secret_access_key in order to create a connection
42
+ #
43
+ # ==== Examples
44
+ # sdb = SimpleDB.new(
45
+ # :aws_access_key_id => your_aws_access_key_id,
46
+ # :aws_secret_access_key => your_aws_secret_access_key
47
+ # )
48
+ #
49
+ # ==== Parameters
50
+ # * options<~Hash> - config arguments for connection. Defaults to {}.
51
+ #
52
+ # ==== Returns
53
+ # * SimpleDB object with connection to aws.
54
+ def initialize(options={})
55
+ @aws_access_key_id = options[:aws_access_key_id]
56
+ @aws_secret_access_key = options[:aws_secret_access_key]
57
+ @hmac = HMAC::SHA256.new(@aws_secret_access_key)
58
+ @host = options[:host] || 'sdb.amazonaws.com'
59
+ @nil_string = options[:nil_string]|| 'nil'
60
+ @port = options[:port] || 443
61
+ @scheme = options[:scheme] || 'https'
62
+ end
63
+
64
+ private
65
+
66
+ def encode_attributes(attributes, replace_attributes = [])
67
+ encoded_attributes = {}
68
+ if attributes
69
+ index = 0
70
+ for key in attributes.keys
71
+ for value in Array(attributes[key])
72
+ encoded_attributes["Attribute.#{index}.Name"] = key.to_s
73
+ if replace_attributes.include?(key)
74
+ encoded_attributes["Attribute.#{index}.Replace"] = 'true'
75
+ end
76
+ encoded_attributes["Attribute.#{index}.Value"] = sdb_encode(value)
77
+ index += 1
78
78
  end
79
- encoded_attributes["Attribute.#{index}.Value"] = sdb_encode(value)
80
- index += 1
81
79
  end
82
80
  end
81
+ encoded_attributes
83
82
  end
84
- encoded_attributes
85
- end
86
83
 
87
- def encode_attribute_names(attributes)
88
- AWS.indexed_param('AttributeName', attributes.map {|attribute| attributes.to_s})
89
- end
84
+ def encode_attribute_names(attributes)
85
+ AWS.indexed_param('AttributeName', attributes.map {|attribute| attributes.to_s})
86
+ end
90
87
 
91
- def encode_batch_attributes(items, replace_attributes = Hash.new([]))
92
- encoded_attributes = {}
93
- if items
94
- item_index = 0
95
- for item_key in items.keys
96
- encoded_attributes["Item.#{item_index}.ItemName"] = item_key.to_s
97
- for attribute_key in items[item_key].keys
98
- attribute_index = 0
99
- for value in Array(items[item_key][attribute_key])
100
- encoded_attributes["Item.#{item_index}.Attribute.#{attribute_index}.Name"] = attribute_key.to_s
101
- if replace_attributes[item_key].include?(attribute_key)
102
- encoded_attributes["Item.#{item_index}.Attribute.#{attribute_index}.Replace"] = 'true'
88
+ def encode_batch_attributes(items, replace_attributes = Hash.new([]))
89
+ encoded_attributes = {}
90
+ if items
91
+ item_index = 0
92
+ for item_key in items.keys
93
+ encoded_attributes["Item.#{item_index}.ItemName"] = item_key.to_s
94
+ for attribute_key in items[item_key].keys
95
+ attribute_index = 0
96
+ for value in Array(items[item_key][attribute_key])
97
+ encoded_attributes["Item.#{item_index}.Attribute.#{attribute_index}.Name"] = attribute_key.to_s
98
+ if replace_attributes[item_key].include?(attribute_key)
99
+ encoded_attributes["Item.#{item_index}.Attribute.#{attribute_index}.Replace"] = 'true'
100
+ end
101
+ encoded_attributes["Item.#{item_index}.Attribute.#{attribute_index}.Value"] = sdb_encode(value)
102
+ attribute_index += 1
103
103
  end
104
- encoded_attributes["Item.#{item_index}.Attribute.#{attribute_index}.Value"] = sdb_encode(value)
105
- attribute_index += 1
104
+ item_index += 1
106
105
  end
107
- item_index += 1
108
106
  end
109
107
  end
108
+ encoded_attributes
110
109
  end
111
- encoded_attributes
112
- end
113
110
 
114
- def request(params, parser)
115
- @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
116
- params.merge!({
117
- 'AWSAccessKeyId' => @aws_access_key_id,
118
- 'SignatureMethod' => 'HmacSHA256',
119
- 'SignatureVersion' => '2',
120
- 'Timestamp' => Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
121
- 'Version' => '2007-11-07'
122
- })
123
-
124
- body = ''
125
- for key in params.keys.sort
126
- unless (value = params[key]).nil?
127
- body << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')}&"
111
+ def request(params)
112
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
113
+ idempotent = params.delete(:idempotent)
114
+ parser = params.delete(:parser)
115
+
116
+ params.merge!({
117
+ 'AWSAccessKeyId' => @aws_access_key_id,
118
+ 'SignatureMethod' => 'HmacSHA256',
119
+ 'SignatureVersion' => '2',
120
+ 'Timestamp' => Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
121
+ 'Version' => '2007-11-07'
122
+ })
123
+
124
+ body = ''
125
+ for key in params.keys.sort
126
+ unless (value = params[key]).nil?
127
+ body << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')}&"
128
+ end
128
129
  end
129
- end
130
-
131
- string_to_sign = "POST\n#{@host}\n/\n" << body.chop
132
- hmac = @hmac.update(string_to_sign)
133
- body << "Signature=#{CGI.escape(Base64.encode64(hmac.digest).chomp!).gsub(/\+/, '%20')}"
134
-
135
- response = @connection.request({
136
- :body => body,
137
- :expects => 200,
138
- :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
139
- :host => @host,
140
- :method => 'POST',
141
- :parser => parser
142
- })
143
130
 
144
- response
145
- end
131
+ string_to_sign = "POST\n#{@host}\n/\n" << body.chop
132
+ hmac = @hmac.update(string_to_sign)
133
+ body << "Signature=#{CGI.escape(Base64.encode64(hmac.digest).chomp!).gsub(/\+/, '%20')}"
134
+
135
+ response = @connection.request({
136
+ :body => body,
137
+ :expects => 200,
138
+ :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
139
+ :host => @host,
140
+ :idempotent => idempotent,
141
+ :method => 'POST',
142
+ :parser => parser
143
+ })
144
+
145
+ response
146
+ end
146
147
 
147
- def sdb_encode(value)
148
- if value.nil?
149
- @nil_string
150
- else
151
- value.to_s
148
+ def sdb_encode(value)
149
+ if value.nil?
150
+ @nil_string
151
+ else
152
+ value.to_s
153
+ end
152
154
  end
153
- end
154
155
 
156
+ end
155
157
  end
156
158
  end
157
159
  end
158
-
159
- Fog::AWS::SimpleDB.reload