aws-record 2.11.0 → 2.13.0

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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +84 -19
  3. data/VERSION +1 -1
  4. data/lib/aws-record/record/attribute.rb +4 -2
  5. data/lib/aws-record/record/batch_read.rb +8 -13
  6. data/lib/aws-record/record/batch_write.rb +2 -1
  7. data/lib/aws-record/record/buildable_search.rb +15 -20
  8. data/lib/aws-record/record/client_configuration.rb +7 -7
  9. data/lib/aws-record/record/dirty_tracking.rb +3 -11
  10. data/lib/aws-record/record/errors.rb +18 -1
  11. data/lib/aws-record/record/item_collection.rb +5 -5
  12. data/lib/aws-record/record/item_data.rb +10 -11
  13. data/lib/aws-record/record/item_operations.rb +128 -96
  14. data/lib/aws-record/record/marshalers/boolean_marshaler.rb +4 -4
  15. data/lib/aws-record/record/marshalers/date_marshaler.rb +1 -3
  16. data/lib/aws-record/record/marshalers/date_time_marshaler.rb +1 -3
  17. data/lib/aws-record/record/marshalers/epoch_time_marshaler.rb +2 -6
  18. data/lib/aws-record/record/marshalers/float_marshaler.rb +4 -4
  19. data/lib/aws-record/record/marshalers/integer_marshaler.rb +4 -4
  20. data/lib/aws-record/record/marshalers/list_marshaler.rb +6 -6
  21. data/lib/aws-record/record/marshalers/map_marshaler.rb +6 -6
  22. data/lib/aws-record/record/marshalers/numeric_set_marshaler.rb +7 -7
  23. data/lib/aws-record/record/marshalers/string_marshaler.rb +3 -1
  24. data/lib/aws-record/record/marshalers/string_set_marshaler.rb +6 -6
  25. data/lib/aws-record/record/marshalers/time_marshaler.rb +1 -3
  26. data/lib/aws-record/record/model_attributes.rb +14 -16
  27. data/lib/aws-record/record/query.rb +4 -4
  28. data/lib/aws-record/record/secondary_indexes.rb +22 -25
  29. data/lib/aws-record/record/table_config.rb +45 -56
  30. data/lib/aws-record/record/table_migration.rb +32 -36
  31. data/lib/aws-record/record/transactions.rb +15 -23
  32. data/lib/aws-record/record/version.rb +1 -1
  33. data/lib/aws-record/record.rb +8 -8
  34. metadata +4 -5
@@ -11,20 +11,27 @@ module Aws
11
11
  # Saves this instance of an item to Amazon DynamoDB. If this item is "new"
12
12
  # as defined by having new or altered key attributes, will attempt a
13
13
  # conditional
14
- # {http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#put_item-instance_method
14
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#put_item-instance_method
15
15
  # Aws::DynamoDB::Client#put_item} call, which will not overwrite an existing
16
16
  # item. If the item only has altered non-key attributes, will perform an
17
- # {http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#update_item-instance_method
17
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#update_item-instance_method
18
18
  # Aws::DynamoDB::Client#update_item} call. Uses this item instance's attributes
19
19
  # in order to build the request on your behalf.
20
20
  #
21
21
  # You can use the +:force+ option to perform a simple put/overwrite
22
22
  # without conditional validation or update logic.
23
23
  #
24
- # @param [Hash] opts
24
+ # @param [Hash] opts Options to pass through to the
25
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#put_item-instance_method
26
+ # Aws::DynamoDB::Client#put_item} call or the
27
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#update_item-instance_method
28
+ # Aws::DynamoDB::Client#update_item} call. +:put_item+ is used when
29
+ # +:force+ is true or when the item is new. +:update_item+ is used when
30
+ # the item is not new.
25
31
  # @option opts [Boolean] :force if true, will save as a put operation and
26
32
  # overwrite any existing item on the remote end. Otherwise, and by
27
33
  # default, will either perform a conditional put or an update call.
34
+ #
28
35
  # @raise [Aws::Record::Errors::KeyMissing] if a required key attribute
29
36
  # does not have a value within this item instance.
30
37
  # @raise [Aws::Record::Errors::ConditionalWriteFailed] if a conditional
@@ -34,30 +41,35 @@ module Aws
34
41
  # cause is dependent on the validation library you are using.
35
42
  def save!(opts = {})
36
43
  ret = save(opts)
37
- if ret
38
- ret
39
- else
40
- raise Errors::ValidationError, 'Validation hook returned false!'
41
- end
44
+ raise Errors::ValidationError, 'Validation hook returned false!' unless ret
45
+
46
+ ret
42
47
  end
43
48
 
44
49
  # Saves this instance of an item to Amazon DynamoDB. If this item is "new"
45
50
  # as defined by having new or altered key attributes, will attempt a
46
51
  # conditional
47
- # {http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#put_item-instance_method
52
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#put_item-instance_method
48
53
  # Aws::DynamoDB::Client#put_item} call, which will not overwrite an
49
54
  # existing item. If the item only has altered non-key attributes, will perform an
50
- # {http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#update_item-instance_method
55
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#update_item-instance_method
51
56
  # Aws::DynamoDB::Client#update_item} call. Uses this item instance's attributes
52
57
  # in order to build the request on your behalf.
53
58
  #
54
59
  # You can use the +:force+ option to perform a simple put/overwrite
55
60
  # without conditional validation or update logic.
56
61
  #
57
- # @param [Hash] opts
62
+ # @param [Hash] opts Options to pass through to the
63
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#put_item-instance_method
64
+ # Aws::DynamoDB::Client#put_item} call or the
65
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#update_item-instance_method
66
+ # Aws::DynamoDB::Client#update_item} call. +:put_item+ is used when
67
+ # +:force+ is true or when the item is new. +:update_item+ is used when
68
+ # the item is not new.
58
69
  # @option opts [Boolean] :force if true, will save as a put operation and
59
70
  # overwrite any existing item on the remote end. Otherwise, and by
60
71
  # default, will either perform a conditional put or an update call.
72
+ #
61
73
  # @return false if the record is invalid as defined by an attempt to call
62
74
  # +valid?+ on this item, if that method exists. Otherwise, returns client
63
75
  # call return value.
@@ -98,6 +110,7 @@ module Aws
98
110
  field = field.to_sym
99
111
  setter = "#{field}="
100
112
  raise ArgumentError, "Invalid field: #{field} for model" unless respond_to?(setter)
113
+
101
114
  public_send(setter, new_value)
102
115
  end
103
116
  end
@@ -132,12 +145,19 @@ module Aws
132
145
  # model.dirty? # => false
133
146
  #
134
147
  #
135
- # @param [Hash] new_param, contains the new parameters for the model
148
+ # @param [Hash] new_params Contains the new parameters for the model.
136
149
  #
137
- # @param [Hash] opts
150
+ # @param [Hash] opts Options to pass through to the
151
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#put_item-instance_method
152
+ # Aws::DynamoDB::Client#put_item} call or the
153
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#update_item-instance_method
154
+ # Aws::DynamoDB::Client#update_item} call. +:put_item+ is used when
155
+ # +:force+ is true or when the item is new. +:update_item+ is used when
156
+ # the item is not new.
138
157
  # @option opts [Boolean] :force if true, will save as a put operation and
139
158
  # overwrite any existing item on the remote end. Otherwise, and by
140
159
  # default, will either perform a conditional put or an update call.
160
+ #
141
161
  # @return false if the record is invalid as defined by an attempt to call
142
162
  # +valid?+ on this item, if that method exists. Otherwise, returns client
143
163
  # call return value.
@@ -155,12 +175,18 @@ module Aws
155
175
  # but this will be interpreted as persisting a new item to your DynamoDB
156
176
  # table
157
177
  #
158
- # @param [Hash] new_param, contains the new parameters for the model
159
- #
160
- # @param [Hash] opts
178
+ # @param [Hash] new_params Contains the new parameters for the model.
179
+ # @param [Hash] opts Options to pass through to the
180
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#put_item-instance_method
181
+ # Aws::DynamoDB::Client#put_item} call or the
182
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#update_item-instance_method
183
+ # Aws::DynamoDB::Client#update_item} call. +:put_item+ is used when
184
+ # +:force+ is true or when the item is new. +:update_item+ is used when
185
+ # the item is not new.
161
186
  # @option opts [Boolean] :force if true, will save as a put operation and
162
187
  # overwrite any existing item on the remote end. Otherwise, and by
163
188
  # default, will either perform a conditional put or an update call.
189
+ #
164
190
  # @return The update mode if the update is successful
165
191
  #
166
192
  # @raise [Aws::Record::Errors::ValidationError] if any new values
@@ -172,18 +198,23 @@ module Aws
172
198
 
173
199
  # Deletes the item instance that matches the key values of this item
174
200
  # instance in Amazon DynamoDB. Uses the
175
- # {http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#delete_item-instance_method
201
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#delete_item-instance_method
176
202
  # Aws::DynamoDB::Client#delete_item} API.
177
- def delete!
178
- dynamodb_client.delete_item(
203
+ #
204
+ # @param [Hash] opts Options to pass through to the
205
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#delete_item-instance_method
206
+ # Aws::DynamoDB::Client#delete_item} call.
207
+ def delete!(opts = {})
208
+ delete_opts = {
179
209
  table_name: self.class.table_name,
180
210
  key: key_values
181
- )
211
+ }
212
+ dynamodb_client.delete_item(opts.merge(delete_opts))
182
213
  instance_variable_get('@data').destroyed = true
183
214
  end
184
215
 
185
216
  # Validates and generates the key values necessary for API operations such as the
186
- # {http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#delete_item-instance_method
217
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#delete_item-instance_method
187
218
  # Aws::DynamoDB::Client#delete_item} operation.
188
219
  def key_values
189
220
  validate_key_values
@@ -207,59 +238,53 @@ module Aws
207
238
 
208
239
  def _invalid_record?(_opts)
209
240
  if respond_to?(:valid?)
210
- if !valid?
211
- true
212
- else
213
- false
214
- end
241
+ !valid?
215
242
  else
216
243
  false
217
244
  end
218
245
  end
219
246
 
220
247
  def _perform_save(opts)
221
- force = opts[:force]
248
+ force = opts.delete(:force)
222
249
  expect_new = expect_new_item?
223
250
  if force
224
- dynamodb_client.put_item(
251
+ put_opts = {
225
252
  table_name: self.class.table_name,
226
253
  item: _build_item_for_save
227
- )
254
+ }
255
+ dynamodb_client.put_item(opts.merge(put_opts))
228
256
  elsif expect_new
229
257
  put_opts = {
230
258
  table_name: self.class.table_name,
231
259
  item: _build_item_for_save
232
260
  }.merge(prevent_overwrite_expression)
233
261
  begin
234
- dynamodb_client.put_item(put_opts)
235
- rescue Aws::DynamoDB::Errors::ConditionalCheckFailedException
236
- raise Errors::ConditionalWriteFailed,
237
- 'Conditional #put_item call failed! Check that conditional write'\
238
- ' conditions are met, or include the :force option to clobber'\
239
- ' the remote item.'
262
+ dynamodb_client.put_item(opts.merge(put_opts))
263
+ rescue Aws::DynamoDB::Errors::ConditionalCheckFailedException => e
264
+ raise Errors::ConditionalWriteFailed.new(
265
+ 'Conditional #put_item call failed! Check that conditional write ' \
266
+ 'conditions are met, or include the :force option to clobber ' \
267
+ 'the remote item.',
268
+ e
269
+ )
240
270
  end
241
271
  else
272
+ update_opts = {
273
+ table_name: self.class.table_name,
274
+ key: key_values
275
+ }
242
276
  update_pairs = _dirty_changes_for_update
243
- update_tuple = self.class.send(
277
+ update_expression_opts = self.class.send(
244
278
  :_build_update_expression,
245
279
  update_pairs
246
280
  )
247
- if update_tuple
248
- uex, exp_attr_names, exp_attr_values = update_tuple
249
- request_opts = {
250
- table_name: self.class.table_name,
251
- key: key_values,
252
- update_expression: uex,
253
- expression_attribute_names: exp_attr_names
254
- }
255
- request_opts[:expression_attribute_values] = exp_attr_values unless exp_attr_values.empty?
256
- dynamodb_client.update_item(request_opts)
257
- else
258
- dynamodb_client.update_item(
259
- table_name: self.class.table_name,
260
- key: key_values
261
- )
262
- end
281
+ opts = self.class.send(
282
+ :_merge_update_expression_opts,
283
+ update_expression_opts,
284
+ opts
285
+ )
286
+ resp = dynamodb_client.update_item(opts.merge(update_opts))
287
+ assign_attributes(resp[:attributes]) if resp[:attributes]
263
288
  end
264
289
  data = instance_variable_get('@data')
265
290
  data.destroyed = false
@@ -311,11 +336,10 @@ module Aws
311
336
  end
312
337
 
313
338
  def _dirty_changes_for_update
314
- ret = dirty.each_with_object({}) do |attr_name, acc|
339
+ dirty.each_with_object({}) do |attr_name, acc|
315
340
  acc[attr_name] = @data.raw_value(attr_name)
316
341
  acc
317
342
  end
318
- ret
319
343
  end
320
344
 
321
345
  module ItemOperationsClassMethods
@@ -350,9 +374,8 @@ module Aws
350
374
  key = opts.delete(:key)
351
375
  check_key = {}
352
376
  @keys.keys.each_value do |attr_sym|
353
- unless key[attr_sym]
354
- raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{key}"
355
- end
377
+ raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{key}" unless key[attr_sym]
378
+
356
379
  attr_name = attributes.storage_name_for(attr_sym)
357
380
  check_key[attr_name] = attributes.attribute_for(attr_sym)
358
381
  .serialize(key[attr_sym])
@@ -374,9 +397,8 @@ module Aws
374
397
  key = opts.delete(:key)
375
398
  request_key = {}
376
399
  @keys.keys.each_value do |attr_sym|
377
- unless key[attr_sym]
378
- raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{key}"
379
- end
400
+ raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{key}" unless key[attr_sym]
401
+
380
402
  attr_name = attributes.storage_name_for(attr_sym)
381
403
  request_key[attr_name] = attributes.attribute_for(attr_sym)
382
404
  .serialize(key[attr_sym])
@@ -468,30 +490,33 @@ module Aws
468
490
  # supports the options you are including, and avoid adding options not
469
491
  # recognized by the underlying client to avoid runtime exceptions.
470
492
  #
471
- # @param [Hash] opts Options to pass through to the DynamoDB #get_item
472
- # request. The +:key+ option is a special case where attributes are
473
- # serialized and translated for you similar to the #find method.
493
+ # @param [Hash] opts Options to pass through to the
494
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#get_item-instance_method
495
+ # Aws::DynamoDB::Client#get_item} request. The +:key+ option is a
496
+ # special case where attributes are serialized and translated for you
497
+ # similar to the #find method.
474
498
  # @option opts [Hash] :key attribute-value pairs for the key you wish to
475
499
  # search for.
500
+ #
476
501
  # @return [Aws::Record] builds and returns an instance of your model.
502
+ #
477
503
  # @raise [Aws::Record::Errors::KeyMissing] if your option parameters do
478
504
  # not include all table keys.
479
505
  def find_with_opts(opts)
480
506
  key = opts.delete(:key)
481
507
  request_key = {}
482
508
  @keys.keys.each_value do |attr_sym|
483
- unless key[attr_sym]
484
- raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{key}"
485
- end
509
+ raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{key}" unless key[attr_sym]
510
+
486
511
  attr_name = attributes.storage_name_for(attr_sym)
487
512
  request_key[attr_name] = attributes.attribute_for(attr_sym)
488
513
  .serialize(key[attr_sym])
489
514
  end
490
- request_opts = {
515
+ get_opts = {
491
516
  table_name: table_name,
492
517
  key: request_key
493
518
  }.merge(opts)
494
- resp = dynamodb_client.get_item(request_opts)
519
+ resp = dynamodb_client.get_item(get_opts)
495
520
  if resp.item.nil?
496
521
  nil
497
522
  else
@@ -547,38 +572,37 @@ module Aws
547
572
  # MyModel.update(id: 1, name: "First", body: "Hello!")
548
573
  #
549
574
  # Performs an
550
- # {http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#update_item-instance_method
575
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#update_item-instance_method
551
576
  # Aws::DynamoDB::Client#update_item} call immediately on the table,
552
577
  # using the attribute key/value pairs provided.
553
578
  #
554
- # @param [Hash] opts attribute-value pairs for the update operation you
555
- # wish to perform. You must include all key attributes for a valid
579
+ # @param [Hash] new_params attribute-value pairs for the update operation
580
+ # you wish to perform. You must include all key attributes for a valid
556
581
  # call, then you may optionally include any other attributes that you
557
582
  # wish to update.
583
+ # @param [Hash] opts Options to pass through to the
584
+ # {http://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#update_item-instance_method
585
+ # Aws::DynamoDB::Client#update_item} call.
586
+ #
558
587
  # @raise [Aws::Record::Errors::KeyMissing] if your option parameters do
559
588
  # not include all table keys.
560
- def update(opts)
589
+ def update(new_params, opts = {})
561
590
  key = {}
562
591
  @keys.keys.each_value do |attr_sym|
563
- unless (value = opts.delete(attr_sym))
564
- raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{opts}"
565
-
592
+ unless (value = new_params.delete(attr_sym))
593
+ raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{new_params}"
566
594
  end
595
+
567
596
  attr_name = attributes.storage_name_for(attr_sym)
568
597
  key[attr_name] = attributes.attribute_for(attr_sym).serialize(value)
569
598
  end
570
- request_opts = {
599
+ update_opts = {
571
600
  table_name: table_name,
572
601
  key: key
573
602
  }
574
- update_tuple = _build_update_expression(opts)
575
- unless update_tuple.nil?
576
- uex, exp_attr_names, exp_attr_values = update_tuple
577
- request_opts[:update_expression] = uex
578
- request_opts[:expression_attribute_names] = exp_attr_names
579
- request_opts[:expression_attribute_values] = exp_attr_values unless exp_attr_values.empty?
580
- end
581
- dynamodb_client.update_item(request_opts)
603
+ update_expression_opts = _build_update_expression(new_params)
604
+ opts = _merge_update_expression_opts(update_expression_opts, opts)
605
+ dynamodb_client.update_item(opts.merge(update_opts))
582
606
  end
583
607
 
584
608
  private
@@ -591,8 +615,8 @@ module Aws
591
615
  name_sub_token = 'UE_A'
592
616
  value_sub_token = 'ue_a'
593
617
  attr_value_pairs.each do |attr_sym, value|
594
- name_sub = '#' + name_sub_token
595
- value_sub = ':' + value_sub_token
618
+ name_sub = "##{name_sub_token}"
619
+ value_sub = ":#{value_sub_token}"
596
620
  name_sub_token = name_sub_token.succ
597
621
  value_sub_token = value_sub_token.succ
598
622
 
@@ -607,16 +631,24 @@ module Aws
607
631
  end
608
632
  end
609
633
  update_expressions = []
610
- unless set_expressions.empty?
611
- update_expressions << 'SET ' + set_expressions.join(', ')
612
- end
613
- unless remove_expressions.empty?
614
- update_expressions << 'REMOVE ' + remove_expressions.join(', ')
615
- end
616
- if update_expressions.empty?
617
- nil
618
- else
619
- [update_expressions.join(' '), exp_attr_names, exp_attr_values]
634
+ update_expressions << ("SET #{set_expressions.join(', ')}") unless set_expressions.empty?
635
+ update_expressions << ("REMOVE #{remove_expressions.join(', ')}") unless remove_expressions.empty?
636
+ {
637
+ update_expression: update_expressions.join(' '),
638
+ expression_attribute_names: exp_attr_names,
639
+ expression_attribute_values: exp_attr_values
640
+ }.reject { |_, value| value.nil? || value.empty? }
641
+ end
642
+
643
+ def _merge_update_expression_opts(update_expression_opts, pass_through_opts)
644
+ update_expression_opts.merge(pass_through_opts) do |key, expression_value, pass_through_value|
645
+ case key
646
+ when :update_expression
647
+ msg = 'Using pass-through update expression with attribute updates is not supported.'
648
+ raise Errors::UpdateExpressionCollision, msg
649
+ else
650
+ expression_value.merge(pass_through_value)
651
+ end
620
652
  end
621
653
  end
622
654
 
@@ -4,13 +4,13 @@ module Aws
4
4
  module Record
5
5
  module Marshalers
6
6
  class BooleanMarshaler
7
- def initialize(opts = {}); end
7
+ def initialize(opts = {})
8
+ # pass
9
+ end
8
10
 
9
11
  def type_cast(raw_value)
10
12
  case raw_value
11
- when nil
12
- nil
13
- when ''
13
+ when nil, ''
14
14
  nil
15
15
  when false, 'false', '0', 0
16
16
  false
@@ -12,9 +12,7 @@ module Aws
12
12
 
13
13
  def type_cast(raw_value)
14
14
  case raw_value
15
- when nil
16
- nil
17
- when ''
15
+ when nil, ''
18
16
  nil
19
17
  when Date
20
18
  raw_value
@@ -36,9 +36,7 @@ module Aws
36
36
 
37
37
  def _format(raw_value)
38
38
  case raw_value
39
- when nil
40
- nil
41
- when ''
39
+ when nil, ''
42
40
  nil
43
41
  when ::DateTime
44
42
  raw_value
@@ -35,15 +35,11 @@ module Aws
35
35
 
36
36
  def _format(raw_value)
37
37
  case raw_value
38
- when nil
39
- nil
40
- when ''
38
+ when nil, ''
41
39
  nil
42
40
  when ::Time
43
41
  raw_value
44
- when Integer # timestamp
45
- ::Time.at(raw_value)
46
- when BigDecimal
42
+ when Integer, BigDecimal # timestamp
47
43
  ::Time.at(raw_value)
48
44
  else # Date, DateTime, or String
49
45
  ::Time.parse(raw_value.to_s)
@@ -4,13 +4,13 @@ module Aws
4
4
  module Record
5
5
  module Marshalers
6
6
  class FloatMarshaler
7
- def initialize(opts = {}); end
7
+ def initialize(opts = {})
8
+ # pass
9
+ end
8
10
 
9
11
  def type_cast(raw_value)
10
12
  case raw_value
11
- when nil
12
- nil
13
- when ''
13
+ when nil, ''
14
14
  nil
15
15
  when Float
16
16
  raw_value
@@ -4,13 +4,13 @@ module Aws
4
4
  module Record
5
5
  module Marshalers
6
6
  class IntegerMarshaler
7
- def initialize(opts = {}); end
7
+ def initialize(opts = {})
8
+ # pass
9
+ end
8
10
 
9
11
  def type_cast(raw_value)
10
12
  case raw_value
11
- when nil
12
- nil
13
- when ''
13
+ when nil, ''
14
14
  nil
15
15
  when Integer
16
16
  raw_value
@@ -4,13 +4,13 @@ module Aws
4
4
  module Record
5
5
  module Marshalers
6
6
  class ListMarshaler
7
- def initialize(opts = {}); end
7
+ def initialize(opts = {})
8
+ # pass
9
+ end
8
10
 
9
11
  def type_cast(raw_value)
10
12
  case raw_value
11
- when nil
12
- nil
13
- when ''
13
+ when nil, ''
14
14
  nil
15
15
  when Array
16
16
  raw_value
@@ -18,8 +18,8 @@ module Aws
18
18
  if raw_value.respond_to?(:to_a)
19
19
  raw_value.to_a
20
20
  else
21
- msg = "Don't know how to make #{raw_value} of type"\
22
- " #{raw_value.class} into an array!"
21
+ msg = "Don't know how to make #{raw_value} of type " \
22
+ "#{raw_value.class} into an array!"
23
23
  raise ArgumentError, msg
24
24
  end
25
25
  end
@@ -4,13 +4,13 @@ module Aws
4
4
  module Record
5
5
  module Marshalers
6
6
  class MapMarshaler
7
- def initialize(opts = {}); end
7
+ def initialize(opts = {})
8
+ # pass
9
+ end
8
10
 
9
11
  def type_cast(raw_value)
10
12
  case raw_value
11
- when nil
12
- nil
13
- when ''
13
+ when nil, ''
14
14
  nil
15
15
  when Hash
16
16
  raw_value
@@ -18,8 +18,8 @@ module Aws
18
18
  if raw_value.respond_to?(:to_h)
19
19
  raw_value.to_h
20
20
  else
21
- msg = "Don't know how to make #{raw_value} of type"\
22
- " #{raw_value.class} into a hash!"
21
+ msg = "Don't know how to make #{raw_value} of type " \
22
+ "#{raw_value.class} into a hash!"
23
23
  raise ArgumentError, msg
24
24
  end
25
25
  end
@@ -3,14 +3,14 @@
3
3
  module Aws
4
4
  module Record
5
5
  module Marshalers
6
- class NumericSetMarshaler
7
- def initialize(opts = {}); end
6
+ def initialize(opts = {})
7
+ # pass
8
+ end
8
9
 
10
+ class NumericSetMarshaler
9
11
  def type_cast(raw_value)
10
12
  case raw_value
11
- when nil
12
- Set.new
13
- when ''
13
+ when nil, ''
14
14
  Set.new
15
15
  when Set
16
16
  _as_numeric(raw_value)
@@ -18,8 +18,8 @@ module Aws
18
18
  if raw_value.respond_to?(:to_set)
19
19
  _as_numeric(raw_value.to_set)
20
20
  else
21
- msg = "Don't know how to make #{raw_value} of type"\
22
- " #{raw_value.class} into a Numeric Set!"
21
+ msg = "Don't know how to make #{raw_value} of type " \
22
+ "#{raw_value.class} into a Numeric Set!"
23
23
  raise ArgumentError, msg
24
24
  end
25
25
  end
@@ -4,7 +4,9 @@ module Aws
4
4
  module Record
5
5
  module Marshalers
6
6
  class StringMarshaler
7
- def initialize(opts = {}); end
7
+ def initialize(opts = {})
8
+ # pass
9
+ end
8
10
 
9
11
  def type_cast(raw_value)
10
12
  case raw_value
@@ -4,13 +4,13 @@ module Aws
4
4
  module Record
5
5
  module Marshalers
6
6
  class StringSetMarshaler
7
- def initialize(opts = {}); end
7
+ def initialize(opts = {})
8
+ # pass
9
+ end
8
10
 
9
11
  def type_cast(raw_value)
10
12
  case raw_value
11
- when nil
12
- Set.new
13
- when ''
13
+ when nil, ''
14
14
  Set.new
15
15
  when Set
16
16
  _as_strings(raw_value)
@@ -18,8 +18,8 @@ module Aws
18
18
  if raw_value.respond_to?(:to_set)
19
19
  _as_strings(raw_value.to_set)
20
20
  else
21
- msg = "Don't know how to make #{raw_value} of type"\
22
- " #{raw_value.class} into a String Set!"
21
+ msg = "Don't know how to make #{raw_value} of type " \
22
+ "#{raw_value.class} into a String Set!"
23
23
  raise ArgumentError, msg
24
24
  end
25
25
  end
@@ -36,9 +36,7 @@ module Aws
36
36
 
37
37
  def _format(raw_value)
38
38
  case raw_value
39
- when nil
40
- nil
41
- when ''
39
+ when nil, ''
42
40
  nil
43
41
  when ::Time
44
42
  raw_value