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,230 +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/simple_db'
15
- require 'aws/record/scope'
16
-
17
- module AWS
18
- module Record
19
-
20
- module FinderMethods
21
-
22
- # @param [String] id The id of the record to load.
23
- # @param [Hash] options
24
- # @option options [String] :domain Specifies what domain
25
- # should be searched.
26
- # @raise [RecordNotFound] Raises a record not found exception if there
27
- # was no data found for the given id.
28
- # @return [Record::Base] Returns the record, as a sub-class of
29
- # Record::Base
30
- def find_by_id id, options = {}
31
-
32
- domain = sdb_domain(options[:domain])
33
-
34
- data = domain.items[id].data.attributes
35
-
36
- raise RecordNotFound, "no data found for id: #{id}" if data.empty?
37
-
38
- obj = self.new(:domain => domain)
39
- obj.send(:hydrate, id, data)
40
- obj
41
-
42
- end
43
- alias_method :[], :find_by_id
44
-
45
- # Finds records in SimpleDB and returns them as objects of the
46
- # current class.
47
- #
48
- # Finding +:all+ returns an enumerable scope object
49
- #
50
- # People.find(:all, :order => [:age, :desc], :limit => 10).each do |person|
51
- # puts person.name
52
- # end
53
- #
54
- # Finding +:first+ returns a single record (or nil)
55
- #
56
- # boss = People.find(:first, :where => { :boss => true })
57
- #
58
- # Find accepts a hash of find modifiers (+:where+, +:order+ and
59
- # +:limit+). You can also choose to omit these modifiers and
60
- # chain them on the scope object returned. In the following
61
- # example only one request is made to SimpleDB (when #each is
62
- # called)
63
- #
64
- # people = People.find(:all)
65
- #
66
- # johns = people.where(:name => 'John Doe')
67
- #
68
- # johns.order(:age, :desc).limit(10).each do |suspects|
69
- # # ...
70
- # end
71
- #
72
- # See also {#where}, {#order} and {#limit} for more
73
- # information and options.
74
- #
75
- # @overload find(id)
76
- # @param id The record to find, raises an exception if the record is
77
- # not found.
78
- #
79
- # @overload find(mode, options = {})
80
- # @param [:all,:first] mode (:all) When finding +:all+ matching records
81
- # and array is returned of records. When finding +:first+ then
82
- # +nil+ or a single record will be returned.
83
- # @param [Hash] options
84
- # @option options [Mixed] :where Conditions that determine what
85
- # records are returned.
86
- # @option options [String,Array] :sort The order records should be
87
- # returned in.
88
- # @option options [Integer] :limit The max number of records to fetch.
89
- def find *args
90
- _new_scope.find(*args)
91
- end
92
-
93
- # Returns a chainable scope object that restricts further scopes to a
94
- # particular domain
95
- #
96
- # Book.domain('shard_3').all.each do |book|
97
- # # ...
98
- # end
99
- #
100
- # @param [String] domain
101
- # @return [Scope] Returns a scope for restricting the domain of subsequent
102
- def domain name
103
- _new_scope.domain(name)
104
- end
105
-
106
- # Returns an enumerable scope object represents all records.
107
- #
108
- # Book.all.each do |book|
109
- # # ...
110
- # end
111
- #
112
- # This method is equivalent to +find(:all)+, and therefore you can also
113
- # pass aditional options. See {#find} for more information on what
114
- # options you can pass.
115
- #
116
- # Book.all(:where => { :author' => 'me' }).each do |my_book|
117
- # # ...
118
- # end
119
- #
120
- # @return [Scope] Returns an enumerable scope object.
121
- def all options = {}
122
- _new_scope.find(:all, options)
123
- end
124
-
125
- # Counts records in SimpleDB.
126
- #
127
- # With no arguments, counts all records:
128
- #
129
- # People.count
130
- #
131
- # Accepts query options to count a subset of records:
132
- #
133
- # People.count(:where => { :boss => true })
134
- #
135
- # You can also count records on a scope object:
136
- #
137
- # People.find(:all).where(:boss => true).count
138
- #
139
- # See {#find} and {Scope#count} for more details.
140
- #
141
- # @param [Hash] options (<code>{}</code>) Options for counting
142
- # records.
143
- #
144
- # @option options [Mixed] :where Conditions that determine what
145
- # records are counted.
146
- # @option options [Integer] :limit The max number of records to count.
147
- def count(options = {})
148
- _new_scope.count(options)
149
- end
150
- alias_method :size, :count
151
-
152
- # @return [Object,nil] Returns the first record found for the current
153
- # class. If there are no records in the current classes domain, then
154
- # nil is returned.
155
- def first options = {}
156
- _new_scope.first(options)
157
- end
158
-
159
- # Limits which records are retried from SimpleDB when performing a find.
160
- #
161
- # Simple string condition
162
- #
163
- # Car.where('color = "red" or color = "blue"').each {|car| ... }
164
- #
165
- # String with placeholders for quoting params
166
- #
167
- # Car.where('color = ?', 'red')
168
- #
169
- # Car.where('color = ? OR style = ?', 'red', 'compact')
170
- #
171
- # # produces a condition using in, like: WHERE color IN ('red', 'blue')
172
- # Car.where('color IN ?', ['red','blue'])
173
- #
174
- # Hash arguments
175
- #
176
- # # WHERE age = '40' AND gender = 'male'
177
- # People.where(:age => 40, :gender => 'male').each {|person| ... }
178
- #
179
- # # WHERE name IN ('John', 'Jane')
180
- # People.where(:name => ['John', 'Jane']).each{|person| ... }
181
- #
182
- # Chaining where with other scope modifiers
183
- #
184
- # # 10 most expensive red cars
185
- # Car.where(:color => 'red').order(:price, :desc).limit(10)
186
- #
187
- # @overload where(conditions_hash)
188
- # @overload where(sql_fragment[, quote_params, ...])
189
- #
190
- # @param [Hash] conditions_hash A hash of attributes to values. Each
191
- # key/value pair from the hash becomes a find condition. All conditions
192
- # are joined by AND.
193
- def where *args
194
- _new_scope.where(*args)
195
- end
196
-
197
- # Defines the order in which records are returned when performing a find.
198
- # SimpleDB only allows sorting by one attribute per request.
199
- #
200
- # # oldest to youngest
201
- # People.order(:age, :desc).each {|person| ... }
202
- #
203
- # You can chain order with the other scope modifiers:
204
- #
205
- # Pepole.order(:age, :desc).limit(10).each {|person| ... }
206
- #
207
- # @overload order(attribute, direction = :asc)
208
- # @param [String,Symbol] attribute The attribute in SimpleDB to sort by.
209
- # @param [:asc,:desc] direction (:asc) The direction to sort, ascending
210
- # or descending order.
211
- def order *args
212
- _new_scope.order(*args)
213
- end
214
-
215
- # The maximum number of records to return. By default, all records
216
- # matching the where conditions will be returned from a find.
217
- #
218
- # People.limit(10).each {|person| ... }
219
- #
220
- # Limit can be chained with other scope modifiers:
221
- #
222
- # People.where(:age => 40).limit(10).each {|person| ... }
223
- #
224
- def limit limit
225
- _new_scope.limit(limit)
226
- end
227
-
228
- end
229
- end
230
- end
@@ -1,55 +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/simple_db'
15
- require 'aws/record/scope'
16
-
17
- module AWS
18
- module Record
19
-
20
- module Scopes
21
-
22
- # Adds a scoped finder method to this class. Given a call
23
- # to scope like:
24
- #
25
- # scope :top_10, order(:popularity, :desc).limit(10)
26
- #
27
- # Then you can call the method +top_10+ on the class and it will
28
- # return an enumerable scope object with the given find conditions.
29
- #
30
- # @param [Symbol] name The name of the scope. Scope names should be
31
- # method-safe and should not conflict with any other class methods.
32
- #
33
- def scope name, scope = nil, &block
34
-
35
- raise ArgumentError, "only a scope or block may be passed, not both" if
36
- scope and block_given?
37
-
38
- method_definition = scope ?
39
- lambda{ scope } :
40
- block
41
-
42
- extend(Module.new { define_method(name, &method_definition) })
43
-
44
- end
45
-
46
- # @return [Scope] Returns a new scope object for this class.
47
- # @private
48
- private
49
- def _new_scope
50
- Scope.new(self)
51
- end
52
-
53
- end
54
- end
55
- end