aws-sdk 1.2.6 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/lib/aws.rb +2 -0
  2. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +721 -0
  3. data/lib/aws/core.rb +10 -1
  4. data/lib/aws/core/client.rb +17 -12
  5. data/lib/aws/core/configuration.rb +13 -3
  6. data/lib/aws/core/configured_json_client_methods.rb +71 -0
  7. data/lib/aws/core/lazy_error_classes.rb +7 -2
  8. data/lib/aws/core/option_grammar.rb +67 -13
  9. data/lib/aws/core/resource.rb +9 -1
  10. data/lib/aws/core/session_signer.rb +95 -0
  11. data/lib/aws/dynamo_db.rb +169 -0
  12. data/lib/aws/dynamo_db/attribute_collection.rb +460 -0
  13. data/lib/aws/dynamo_db/batch_get.rb +206 -0
  14. data/lib/aws/dynamo_db/client.rb +119 -0
  15. data/lib/aws/dynamo_db/config.rb +20 -0
  16. data/lib/aws/dynamo_db/errors.rb +57 -0
  17. data/lib/aws/dynamo_db/expectations.rb +40 -0
  18. data/lib/aws/dynamo_db/item.rb +130 -0
  19. data/lib/aws/dynamo_db/item_collection.rb +837 -0
  20. data/lib/aws/{record/optimistic_locking.rb → dynamo_db/item_data.rb} +9 -12
  21. data/lib/aws/{record/attributes/boolean.rb → dynamo_db/keys.rb} +15 -23
  22. data/lib/aws/dynamo_db/primary_key_element.rb +47 -0
  23. data/lib/aws/dynamo_db/request.rb +78 -0
  24. data/lib/aws/{record/attributes/float.rb → dynamo_db/resource.rb} +10 -25
  25. data/lib/aws/dynamo_db/table.rb +418 -0
  26. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  27. data/lib/aws/dynamo_db/types.rb +86 -0
  28. data/lib/aws/ec2/resource_tag_collection.rb +3 -1
  29. data/lib/aws/record.rb +36 -8
  30. data/lib/aws/record/abstract_base.rb +642 -0
  31. data/lib/aws/record/attributes.rb +384 -0
  32. data/lib/aws/record/dirty_tracking.rb +0 -1
  33. data/lib/aws/record/errors.rb +0 -8
  34. data/lib/aws/record/hash_model.rb +163 -0
  35. data/lib/aws/record/hash_model/attributes.rb +182 -0
  36. data/lib/aws/record/hash_model/finder_methods.rb +178 -0
  37. data/lib/aws/record/hash_model/scope.rb +108 -0
  38. data/lib/aws/record/model.rb +429 -0
  39. data/lib/aws/record/model/attributes.rb +377 -0
  40. data/lib/aws/record/model/finder_methods.rb +232 -0
  41. data/lib/aws/record/model/scope.rb +213 -0
  42. data/lib/aws/record/scope.rb +43 -169
  43. data/lib/aws/record/validations.rb +11 -11
  44. data/lib/aws/s3/client.rb +9 -6
  45. data/lib/aws/s3/object_collection.rb +1 -1
  46. data/lib/aws/simple_db/expect_condition_option.rb +1 -1
  47. data/lib/aws/simple_db/item_collection.rb +5 -3
  48. data/lib/aws/sts/client.rb +9 -0
  49. metadata +73 -30
  50. data/lib/aws/record/attribute.rb +0 -94
  51. data/lib/aws/record/attribute_macros.rb +0 -312
  52. data/lib/aws/record/attributes/date.rb +0 -89
  53. data/lib/aws/record/attributes/datetime.rb +0 -86
  54. data/lib/aws/record/attributes/integer.rb +0 -68
  55. data/lib/aws/record/attributes/sortable_float.rb +0 -60
  56. data/lib/aws/record/attributes/sortable_integer.rb +0 -95
  57. data/lib/aws/record/attributes/string.rb +0 -69
  58. data/lib/aws/record/base.rb +0 -828
  59. data/lib/aws/record/finder_methods.rb +0 -230
  60. data/lib/aws/record/scopes.rb +0 -55
@@ -1,312 +0,0 @@
1
- # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"). You
4
- # may not use this file except in compliance with the License. A copy of
5
- # the License is located at
6
- #
7
- # http://aws.amazon.com/apache2.0/
8
- #
9
- # or in the "license" file accompanying this file. This file is
10
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- # ANY KIND, either express or implied. See the License for the specific
12
- # language governing permissions and limitations under the License.
13
-
14
- require 'aws/record/attributes/string'
15
- require 'aws/record/attributes/integer'
16
- require 'aws/record/attributes/sortable_integer'
17
- require 'aws/record/attributes/float'
18
- require 'aws/record/attributes/sortable_float'
19
- require 'aws/record/attributes/boolean'
20
- require 'aws/record/attributes/datetime'
21
- require 'aws/record/attributes/date'
22
-
23
- module AWS
24
- module Record
25
- module AttributeMacros
26
-
27
- # Adds a string attribute to this class.
28
- #
29
- # @example A standard string attribute
30
- #
31
- # class Recipe < AWS::Record::Base
32
- # string_attr :name
33
- # end
34
- #
35
- # recipe = Recipe.new(:name => "Buttermilk Pancakes")
36
- # recipe.name #=> 'Buttermilk Pancakes'
37
- #
38
- # @example A string attribute with +:set+ set to true
39
- #
40
- # class Recipe < AWS::Record::Base
41
- # string_attr :tags, :set => true
42
- # end
43
- #
44
- # recipe = Recipe.new(:tags => %w(popular dessert))
45
- # recipe.tags #=> #<Set: {"popular", "desert"}>
46
- #
47
- # @param [Symbol] name The name of the attribute.
48
- # @param [Hash] options
49
- # @option options [Boolean] :set (false) When true this attribute
50
- # can have multiple values.
51
- def string_attr name, options = {}
52
- add_attribute(StringAttribute.new(name, options))
53
- end
54
-
55
- # Adds an integer attribute to this class.
56
- #
57
- # class Recipe < AWS::Record::Base
58
- # integer_attr :servings
59
- # end
60
- #
61
- # recipe = Recipe.new(:servings => '10')
62
- # recipe.servings #=> 10
63
- #
64
- # @param [Symbol] name The name of the attribute.
65
- # @param [Hash] options
66
- # @option options [Boolean] :set (false) When true this attribute
67
- # can have multiple values.
68
- def integer_attr name, options = {}
69
- add_attribute(IntegerAttribute.new(name, options))
70
- end
71
-
72
- # Adds a sortable integer attribute to this class.
73
- #
74
- # class Person < AWS::Record::Base
75
- # sortable_integer_attr :age, :range => 0..150
76
- # end
77
- #
78
- # person = Person.new(:age => 10)
79
- # person.age #=> 10
80
- #
81
- # === Validations
82
- #
83
- # It is recomended to apply a validates_numericality_of with
84
- # minimum and maximum value constraints. If a value is assigned
85
- # to a sortable integer that falls outside of the +:range: it will
86
- # raise a runtime error when the record is saved.
87
- #
88
- # === Difference Between Sortable an Regular Integer Attributes
89
- #
90
- # Because SimpleDB does not support numeric types, all values must
91
- # be converted to strings. This complicates sorting by numeric values.
92
- # To accomplish sorting numeric attributes the values must be
93
- # zero padded and have an offset applied to eliminate negative values.
94
- #
95
- # @param [Symbol] name The name of the attribute.
96
- # @param [Hash] options
97
- # @option options [Range] :range A numeric range the represents the
98
- # minimum and maximum values this attribute should accept.
99
- # @option options [Boolean] :set (false) When true this attribute
100
- # can have multiple values.
101
- def sortable_integer_attr name, options = {}
102
- add_attribute(SortableIntegerAttribute.new(name, options))
103
- end
104
-
105
- # Adds a float attribute to this class.
106
- #
107
- # class Listing < AWS::Record::Base
108
- # float_attr :score
109
- # end
110
- #
111
- # listing = Listing.new(:score => '123.456')
112
- # listing.score # => 123.456
113
- #
114
- # @param [Symbol] name The name of the attribute.
115
- # @param [Hash] options
116
- # @option options [Boolean] :set (false) When true this attribute
117
- # can have multiple values.
118
- def float_attr name, options = {}
119
- add_attribute(FloatAttribute.new(name, options))
120
- end
121
-
122
- # Adds sortable float attribute to this class.
123
- #
124
- # Persisted values are stored (and sorted) as strings. This makes it
125
- # more difficult to sort numbers because they don't sort
126
- # lexicographically unless they have been offset to be positive and
127
- # then zero padded.
128
- #
129
- # === Postive Floats
130
- #
131
- # To store floats in a sort-friendly manor:
132
- #
133
- # sortable_float_attr :score, :range => (0..10)
134
- #
135
- # This will cause values like 5.5 to persist as a string like '05.5' so
136
- # that they can be sorted lexicographically.
137
- #
138
- # === Negative Floats
139
- #
140
- # If you need to store negative sortable floats, increase your +:range+
141
- # to include a negative value.
142
- #
143
- # sortable_float_attr :position, :range => (-10..10)
144
- #
145
- # AWS::Record will add 10 to all values and zero pad them
146
- # (e.g. -10.0 will be represented as '00.0' and 10 will be represented as
147
- # '20.0'). This will allow the values to be compared lexicographically.
148
- #
149
- # @note If you change the +:range+ after some values have been persisted
150
- # you must also manually migrate all of the old values to have the
151
- # correct padding & offset or they will be interpreted differently.
152
- #
153
- # @param [Symbol] name The name of the attribute.
154
- # @param [Hash] options
155
- # @option options [Range] :range The range of numbers this attribute
156
- # should represent. The min and max values of this range will determine
157
- # how many digits of precision are required and how much of an offset
158
- # is required to make the numbers sort lexicographically.
159
- # @option options [Boolean] :set (false) When true this attribute
160
- # can have multiple values.
161
- def sortable_float_attr name, options = {}
162
- add_attribute(SortableFloatAttribute.new(name, options))
163
- end
164
-
165
- # Adds a boolean attribute to this class.
166
- #
167
- # @example
168
- #
169
- # class Book < AWS::Record::Base
170
- # boolean_attr :read
171
- # end
172
- #
173
- # b = Book.new
174
- # b.read? # => false
175
- # b.read = true
176
- # b.read? # => true
177
- #
178
- # listing = Listing.new(:score => '123.456'
179
- # listing.score # => 123.456
180
- #
181
- # @param [Symbol] name The name of the attribute.
182
- def boolean_attr name, options = {}
183
-
184
- attr = add_attribute(BooleanAttribute.new(name, options))
185
-
186
- # add the boolean question mark method
187
- define_method("#{attr.name}?") do
188
- !!__send__(attr.name)
189
- end
190
-
191
- end
192
-
193
- # Adds a datetime attribute to this class.
194
- #
195
- # @example A standard datetime attribute
196
- #
197
- # class Recipe < AWS::Record::Base
198
- # datetime_attr :invented
199
- # end
200
- #
201
- # recipe = Recipe.new(:invented => Time.now)
202
- # recipe.invented #=> <DateTime ...>
203
- #
204
- # If you add a datetime_attr for +:created_at+ and/or +:updated_at+ those
205
- # will be automanaged.
206
- #
207
- # @param [Symbol] name The name of the attribute.
208
- #
209
- # @param [Hash] options
210
- #
211
- # @option options [Boolean] :set (false) When true this attribute
212
- # can have multiple date times.
213
- #
214
- def datetime_attr name, options = {}
215
- add_attribute(DateTimeAttribute.new(name, options))
216
- end
217
-
218
- # Adds a date attribute to this class.
219
- #
220
- # @example A standard date attribute
221
- #
222
- # class Person < AWS::Record::Base
223
- # date_attr :birthdate
224
- # end
225
- #
226
- # baby = Person.new
227
- # baby.birthdate = Time.now
228
- # baby.birthdate #=> <Date: ....>
229
- #
230
- # @param [Symbol] name The name of the attribute.
231
- #
232
- # @param [Hash] options
233
- #
234
- # @option options [Boolean] :set (false) When true this attribute
235
- # can have multiple dates.
236
- #
237
- def date_attr name, options = {}
238
- add_attribute(DateAttribute.new(name, options))
239
- end
240
-
241
- # A convenience method for adding the standard two datetime attributes
242
- # +:created_at+ and +:updated_at+.
243
- #
244
- # @example
245
- #
246
- # class Recipe < AWS::Record::Base
247
- # timestamps
248
- # end
249
- #
250
- # recipe = Recipe.new
251
- # recipe.save
252
- # recipe.created_at #=> <DateTime ...>
253
- # recipe.updated_at #=> <DateTime ...>
254
- #
255
- def timestamps
256
- c = datetime_attr :created_at
257
- u = datetime_attr :updated_at
258
- [c, u]
259
- end
260
-
261
- # @private
262
- private
263
- def add_attribute attribute
264
-
265
- attr_name = attribute.name
266
-
267
- attributes[attr_name] = attribute
268
-
269
- # setter
270
- define_method("#{attr_name}=") do |value|
271
- self[attr_name] = value
272
- end
273
-
274
- # getter
275
- define_method(attr_name) do
276
- self[attr_name]
277
- end
278
-
279
- # before type-cast getter
280
- define_method("#{attr_name}_before_type_cast") do
281
- @_data[attr_name]
282
- end
283
-
284
- ## dirty tracking methods
285
-
286
- define_method("#{attr_name}_changed?") do
287
- attribute_changed?(attr_name)
288
- end
289
-
290
- define_method("#{attr_name}_change") do
291
- attribute_change(attr_name)
292
- end
293
-
294
- define_method("#{attr_name}_was") do
295
- attribute_was(attr_name)
296
- end
297
-
298
- define_method("#{attr_name}_will_change!") do
299
- attribute_will_change!(attr_name)
300
- end
301
-
302
- define_method("reset_#{attr_name}!") do
303
- reset_attribute!(attr_name)
304
- end
305
-
306
- attribute
307
-
308
- end
309
-
310
- end
311
- end
312
- end
@@ -1,89 +0,0 @@
1
- # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"). You
4
- # may not use this file except in compliance with the License. A copy of
5
- # the License is located at
6
- #
7
- # http://aws.amazon.com/apache2.0/
8
- #
9
- # or in the "license" file accompanying this file. This file is
10
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- # ANY KIND, either express or implied. See the License for the specific
12
- # language governing permissions and limitations under the License.
13
-
14
- require 'date'
15
- require 'aws/record/attribute'
16
-
17
- module AWS
18
- module Record
19
-
20
- # @private
21
- class DateAttribute < Attribute
22
-
23
- # Returns value cast to a Date object. Empty strings are cast to
24
- # nil. Values are cast first to strings and then passed to
25
- # Date.parse. Integers are treated as timestamps.
26
- #
27
- # date_attribute.type_cast('2000-01-02T10:11:12Z')
28
- # #=> #<Date: 4903091/2,0,2299161>
29
- #
30
- # date_attribute.type_cast(1306170146)
31
- # #<Date: 4911409/2,0,2299161>
32
- #
33
- # date_attribute.type_cast('')
34
- # #=> nil
35
- #
36
- # date_attribute.type_cast(nil)
37
- # #=> nil
38
- #
39
- # @param [Mixed] raw_value The value to cast to a Date object.
40
- # @param [Hash] options
41
- # @return [Date,nil]
42
- def self.type_cast raw_value, options = {}
43
- case raw_value
44
- when nil then nil
45
- when '' then nil
46
- when Date then raw_value
47
- when Integer then
48
- begin
49
- Date.parse(Time.at(raw_value).to_s) # assumed timestamp
50
- rescue
51
- nil
52
- end
53
- else
54
- begin
55
- Date.parse(raw_value.to_s) # Time, DateTime or String
56
- rescue
57
- nil
58
- end
59
- end
60
- end
61
-
62
- # Returns a Date object encoded as a string (suitable for sorting).
63
- #
64
- # attribute.serialize(DateTime.parse('2001-01-01'))
65
- # #=> '2001-01-01'
66
- #
67
- # @param [Date] datetime The date to serialize.
68
- #
69
- # @param [Hash] options
70
- #
71
- # @return [String] Returns the date object serialized to a string
72
- # ('YYYY-MM-DD').
73
- #
74
- def self.serialize date, options = {}
75
- unless date.is_a?(Date)
76
- raise ArgumentError, "expected a Date value, got #{date.class}"
77
- end
78
- date.strftime('%Y-%m-%d')
79
- end
80
-
81
- # @private
82
- def self.allow_set?
83
- true
84
- end
85
-
86
- end
87
-
88
- end
89
- end
@@ -1,86 +0,0 @@
1
- # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"). You
4
- # may not use this file except in compliance with the License. A copy of
5
- # the License is located at
6
- #
7
- # http://aws.amazon.com/apache2.0/
8
- #
9
- # or in the "license" file accompanying this file. This file is
10
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- # ANY KIND, either express or implied. See the License for the specific
12
- # language governing permissions and limitations under the License.
13
-
14
- require 'aws/record/attribute'
15
-
16
- module AWS
17
- module Record
18
-
19
- # @private
20
- class DateTimeAttribute < Attribute
21
-
22
- # Returns value cast to a DateTime object. Empty strings are cast to
23
- # nil. Values are cast first to strings and then passed to
24
- # DateTime.parse. Integers are treated as timestamps.
25
- #
26
- # datetime_attribute.type_cast('2000-01-02')
27
- # #=> #<DateTime: 4903091/2,0,2299161>
28
- #
29
- # datetime_attribute.type_cast(1306170146)
30
- # #<DateTime: 106086465073/43200,-7/24,2299161>
31
- #
32
- # datetime_attribute.type_cast('')
33
- # #=> nil
34
- #
35
- # datetime_attribute.type_cast(nil)
36
- # #=> nil
37
- #
38
- # @param [Mixed] raw_value The value to cast to a DateTime object.
39
- # @param [Hash] options
40
- # @return [DateTime,nil]
41
- def self.type_cast raw_value, options = {}
42
- case raw_value
43
- when nil then nil
44
- when '' then nil
45
- when DateTime then raw_value
46
- when Integer then
47
- begin
48
- DateTime.parse(Time.at(raw_value).to_s) # timestamp
49
- rescue
50
- nil
51
- end
52
- else
53
- begin
54
- DateTime.parse(raw_value.to_s) # Time, Date or String
55
- rescue
56
- nil
57
- end
58
- end
59
- end
60
-
61
- # Returns a DateTime object encoded as a string (suitable for sorting).
62
- #
63
- # attribute.serialize(DateTime.parse('2001-01-01'))
64
- # #=> '2001-01-01T00:00:00:Z)
65
- #
66
- # @param [DateTime] datetime The datetime object to serialize.
67
- # @param [Hash] options
68
- # @return [String] Returns the datetime object serialized to a string
69
- # in ISO8601 format (e.g. '2011-01-02T10:11:12Z')
70
- def self.serialize datetime, options = {}
71
- unless datetime.is_a?(DateTime)
72
- msg = "expected a DateTime value, got #{datetime.class}"
73
- raise ArgumentError, msg
74
- end
75
- datetime.strftime('%Y-%m-%dT%H:%M:%S%Z')
76
- end
77
-
78
- # @private
79
- def self.allow_set?
80
- true
81
- end
82
-
83
- end
84
-
85
- end
86
- end