aws-record 2.12.0 → 2.13.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/VERSION +1 -1
- data/lib/aws-record/record/batch_read.rb +3 -0
- data/lib/aws-record/record/errors.rb +7 -0
- data/lib/aws-record/record/item_operations.rb +39 -35
- data/lib/aws-record/record/transactions.rb +9 -15
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe251cd0c7fc4eabda02c7d02e0f68443027b21bf925733badf8f8fd7c8540e2
|
4
|
+
data.tar.gz: 6107ea30546f5fb894a9f963b184b5414b1e6d6e0c6e073c57acfdaaf31c94fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f67f857fe7837e662b05ba74f040fb0460275596981b0100edae2efd92349828f129a9836e7a0c2551efd8e2330da4175e3ae61a3d4bfa45a059ef94da4cb5a
|
7
|
+
data.tar.gz: c75497be6b3f37fa84f65267f58bc098cdbc86ec08bdb6be549fe5407035582d797d2cc7e43eec5ff8d7c7b5f248a36b7939505dac4f89fc6b2149c951038234
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
2.13.1 (2024-07-18)
|
2
|
+
------------------
|
3
|
+
|
4
|
+
* Issue - Do not try to hydrate undeclared attributes from storage on `batch_read`. (#139)
|
5
|
+
|
6
|
+
2.13.0 (2023-10-17)
|
7
|
+
------------------
|
8
|
+
|
9
|
+
* Feature - Allow custom `update_expression` to be passed through to the
|
10
|
+
underlying client calls. (#137)
|
11
|
+
|
1
12
|
2.12.0 (2023-09-28)
|
2
13
|
------------------
|
3
14
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.13.1
|
@@ -60,6 +60,13 @@ module Aws
|
|
60
60
|
# the key existance check yourself in your condition expression if you
|
61
61
|
# wish to do so.
|
62
62
|
class TransactionalSaveConditionCollision < RuntimeError; end
|
63
|
+
|
64
|
+
# Raised when you attempt to combine your own update expression with
|
65
|
+
# the update expression auto-generated from updates to an item's
|
66
|
+
# attributes. The path forward until this case is supported is to
|
67
|
+
# perform attribute updates yourself in your update expression if you
|
68
|
+
# wish to do so.
|
69
|
+
class UpdateExpressionCollision < RuntimeError; end
|
63
70
|
end
|
64
71
|
end
|
65
72
|
end
|
@@ -269,27 +269,22 @@ module Aws
|
|
269
269
|
)
|
270
270
|
end
|
271
271
|
else
|
272
|
+
update_opts = {
|
273
|
+
table_name: self.class.table_name,
|
274
|
+
key: key_values
|
275
|
+
}
|
272
276
|
update_pairs = _dirty_changes_for_update
|
273
|
-
|
277
|
+
update_expression_opts = self.class.send(
|
274
278
|
:_build_update_expression,
|
275
279
|
update_pairs
|
276
280
|
)
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
}
|
285
|
-
update_opts[:expression_attribute_values] = exp_attr_values unless exp_attr_values.empty?
|
286
|
-
else
|
287
|
-
update_opts = {
|
288
|
-
table_name: self.class.table_name,
|
289
|
-
key: key_values
|
290
|
-
}
|
291
|
-
end
|
292
|
-
dynamodb_client.update_item(opts.merge(update_opts))
|
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]
|
293
288
|
end
|
294
289
|
data = instance_variable_get('@data')
|
295
290
|
data.destroyed = false
|
@@ -581,19 +576,21 @@ module Aws
|
|
581
576
|
# Aws::DynamoDB::Client#update_item} call immediately on the table,
|
582
577
|
# using the attribute key/value pairs provided.
|
583
578
|
#
|
584
|
-
# @param [Hash]
|
585
|
-
# 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
|
586
581
|
# call, then you may optionally include any other attributes that you
|
587
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.
|
588
586
|
#
|
589
587
|
# @raise [Aws::Record::Errors::KeyMissing] if your option parameters do
|
590
588
|
# not include all table keys.
|
591
|
-
def update(opts)
|
589
|
+
def update(new_params, opts = {})
|
592
590
|
key = {}
|
593
591
|
@keys.keys.each_value do |attr_sym|
|
594
|
-
unless (value =
|
595
|
-
raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{
|
596
|
-
|
592
|
+
unless (value = new_params.delete(attr_sym))
|
593
|
+
raise Errors::KeyMissing, "Missing required key #{attr_sym} in #{new_params}"
|
597
594
|
end
|
598
595
|
|
599
596
|
attr_name = attributes.storage_name_for(attr_sym)
|
@@ -603,14 +600,9 @@ module Aws
|
|
603
600
|
table_name: table_name,
|
604
601
|
key: key
|
605
602
|
}
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
update_opts[:update_expression] = uex
|
610
|
-
update_opts[:expression_attribute_names] = exp_attr_names
|
611
|
-
update_opts[:expression_attribute_values] = exp_attr_values unless exp_attr_values.empty?
|
612
|
-
end
|
613
|
-
dynamodb_client.update_item(update_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))
|
614
606
|
end
|
615
607
|
|
616
608
|
private
|
@@ -641,10 +633,22 @@ module Aws
|
|
641
633
|
update_expressions = []
|
642
634
|
update_expressions << ("SET #{set_expressions.join(', ')}") unless set_expressions.empty?
|
643
635
|
update_expressions << ("REMOVE #{remove_expressions.join(', ')}") unless remove_expressions.empty?
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
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
|
648
652
|
end
|
649
653
|
end
|
650
654
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'ostruct'
|
4
|
+
|
3
5
|
module Aws
|
4
6
|
module Record
|
5
7
|
module Transactions
|
@@ -284,25 +286,17 @@ module Aws
|
|
284
286
|
def _transform_update_record(update_record, opts)
|
285
287
|
# extract dirty attribute changes to perform an update
|
286
288
|
opts[:table_name] = update_record.class.table_name
|
289
|
+
opts[:key] = update_record.send(:key_values)
|
287
290
|
dirty_changes = update_record.send(:_dirty_changes_for_update)
|
288
|
-
|
291
|
+
update_expression_opts = update_record.class.send(
|
289
292
|
:_build_update_expression,
|
290
293
|
dirty_changes
|
291
294
|
)
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
exp_attr_names.merge(names)
|
298
|
-
else
|
299
|
-
exp_attr_names
|
300
|
-
end
|
301
|
-
opts[:expression_attribute_values] = if (values = opts[:expression_attribute_values])
|
302
|
-
exp_attr_values.merge(values)
|
303
|
-
else
|
304
|
-
exp_attr_values
|
305
|
-
end
|
295
|
+
opts = update_record.class.send(
|
296
|
+
:_merge_update_expression_opts,
|
297
|
+
update_expression_opts,
|
298
|
+
opts
|
299
|
+
)
|
306
300
|
{ update: opts }
|
307
301
|
end
|
308
302
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.13.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amazon Web Services
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-dynamodb
|
@@ -93,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0'
|
95
95
|
requirements: []
|
96
|
-
rubygems_version: 3.
|
96
|
+
rubygems_version: 3.5.5
|
97
97
|
signing_key:
|
98
98
|
specification_version: 4
|
99
99
|
summary: AWS Record library for Amazon DynamoDB
|