aws-record 2.12.0 → 2.13.1
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.
- 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
|