dynamoid 3.10.0 → 3.12.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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +37 -1
  3. data/README.md +268 -8
  4. data/dynamoid.gemspec +4 -4
  5. data/lib/dynamoid/adapter.rb +1 -1
  6. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/filter_expression_convertor.rb +53 -18
  7. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/item_updater.rb +5 -4
  8. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/projection_expression_convertor.rb +9 -7
  9. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb +1 -1
  10. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/scan.rb +1 -1
  11. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/transact.rb +31 -0
  12. data/lib/dynamoid/adapter_plugin/aws_sdk_v3.rb +17 -5
  13. data/lib/dynamoid/components.rb +1 -0
  14. data/lib/dynamoid/config.rb +3 -0
  15. data/lib/dynamoid/criteria/chain.rb +74 -21
  16. data/lib/dynamoid/criteria/where_conditions.rb +13 -6
  17. data/lib/dynamoid/dirty.rb +97 -11
  18. data/lib/dynamoid/dumping.rb +39 -17
  19. data/lib/dynamoid/errors.rb +30 -3
  20. data/lib/dynamoid/fields.rb +13 -3
  21. data/lib/dynamoid/finders.rb +44 -23
  22. data/lib/dynamoid/loadable.rb +1 -0
  23. data/lib/dynamoid/persistence/inc.rb +35 -19
  24. data/lib/dynamoid/persistence/item_updater_with_casting_and_dumping.rb +36 -0
  25. data/lib/dynamoid/persistence/item_updater_with_dumping.rb +33 -0
  26. data/lib/dynamoid/persistence/save.rb +29 -14
  27. data/lib/dynamoid/persistence/update_fields.rb +23 -8
  28. data/lib/dynamoid/persistence/update_validations.rb +3 -3
  29. data/lib/dynamoid/persistence/upsert.rb +22 -8
  30. data/lib/dynamoid/persistence.rb +184 -28
  31. data/lib/dynamoid/transaction_read/find.rb +137 -0
  32. data/lib/dynamoid/transaction_read.rb +146 -0
  33. data/lib/dynamoid/transaction_write/base.rb +47 -0
  34. data/lib/dynamoid/transaction_write/create.rb +49 -0
  35. data/lib/dynamoid/transaction_write/delete_with_instance.rb +65 -0
  36. data/lib/dynamoid/transaction_write/delete_with_primary_key.rb +64 -0
  37. data/lib/dynamoid/transaction_write/destroy.rb +84 -0
  38. data/lib/dynamoid/transaction_write/item_updater.rb +55 -0
  39. data/lib/dynamoid/transaction_write/save.rb +169 -0
  40. data/lib/dynamoid/transaction_write/update_attributes.rb +46 -0
  41. data/lib/dynamoid/transaction_write/update_fields.rb +239 -0
  42. data/lib/dynamoid/transaction_write/upsert.rb +106 -0
  43. data/lib/dynamoid/transaction_write.rb +673 -0
  44. data/lib/dynamoid/type_casting.rb +3 -1
  45. data/lib/dynamoid/undumping.rb +13 -2
  46. data/lib/dynamoid/validations.rb +8 -5
  47. data/lib/dynamoid/version.rb +1 -1
  48. data/lib/dynamoid.rb +8 -0
  49. metadata +21 -5
@@ -238,7 +238,8 @@ module Dynamoid
238
238
  class SerializedUndumper < Base
239
239
  # We must use YAML.safe_load in Ruby 3.1 to handle serialized Set class
240
240
  minimum_ruby_version = ->(version) { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new(version) }
241
- # Once we drop support for Rubies older than 2.6 we can remove this conditional (with major version bump)!
241
+
242
+ # Once we drop support for Rubies older than 2.6 we can remove this condition (with major version bump)!
242
243
  # YAML_SAFE_LOAD = minimum_ruby_version.call("2.6")
243
244
  # But we don't want to change behavior for Ruby <= 3.0 that has been using the gem, without a major version bump
244
245
  YAML_SAFE_LOAD = minimum_ruby_version.call('3.1')
@@ -284,7 +285,17 @@ module Dynamoid
284
285
 
285
286
  class BinaryUndumper < Base
286
287
  def process(value)
287
- Base64.strict_decode64(value)
288
+ store_as_binary = if @options[:store_as_native_binary].nil?
289
+ Dynamoid.config.store_binary_as_native
290
+ else
291
+ @options[:store_as_native_binary]
292
+ end
293
+
294
+ if store_as_binary
295
+ value.string # expect StringIO here
296
+ else
297
+ Base64.strict_decode64(value)
298
+ end
288
299
  end
289
300
  end
290
301
 
@@ -24,24 +24,27 @@ module Dynamoid
24
24
  # @since 0.2.0
25
25
  def valid?(context = nil)
26
26
  context ||= (new_record? ? :create : :update)
27
- super(context)
27
+ super
28
28
  end
29
29
 
30
30
  # Raise an error unless this object is valid.
31
31
  #
32
32
  # @private
33
33
  # @since 0.2.0
34
- def save!
35
- raise Dynamoid::Errors::DocumentNotValid, self unless valid?
34
+ def save!(options = {})
35
+ unless valid?
36
+ raise Dynamoid::Errors::DocumentNotValid, self
37
+ end
36
38
 
37
- save(validate: false)
38
- self
39
+ super
39
40
  end
40
41
 
41
42
  def update_attribute(attribute, value)
42
43
  write_attribute(attribute, value)
43
44
  save(validate: false)
44
45
  self
46
+ rescue Dynamoid::Errors::StaleObjectError
47
+ self
45
48
  end
46
49
 
47
50
  module ClassMethods
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dynamoid
4
- VERSION = '3.10.0'
4
+ VERSION = '3.12.1'
5
5
  end
data/lib/dynamoid.rb CHANGED
@@ -35,6 +35,8 @@ require 'dynamoid/loadable'
35
35
  require 'dynamoid/components'
36
36
  require 'dynamoid/document'
37
37
  require 'dynamoid/adapter'
38
+ require 'dynamoid/transaction_read'
39
+ require 'dynamoid/transaction_write'
38
40
 
39
41
  require 'dynamoid/tasks/database'
40
42
 
@@ -62,4 +64,10 @@ module Dynamoid
62
64
  def adapter
63
65
  @adapter ||= Adapter.new
64
66
  end
67
+
68
+ # @private
69
+ def deprecator
70
+ # all the deprecated behavior will be removed in the next major version
71
+ @deprecator ||= ActiveSupport::Deprecation.new('4.0', 'Dynamoid')
72
+ end
65
73
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.10.0
4
+ version: 3.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Symonds
@@ -21,7 +21,7 @@ authors:
21
21
  autorequire:
22
22
  bindir: bin
23
23
  cert_chain: []
24
- date: 2024-02-10 00:00:00.000000000 Z
24
+ date: 2025-08-23 00:00:00.000000000 Z
25
25
  dependencies:
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activemodel
@@ -194,6 +194,7 @@ files:
194
194
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb
195
195
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/scan.rb
196
196
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/table.rb
197
+ - lib/dynamoid/adapter_plugin/aws_sdk_v3/transact.rb
197
198
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/until_past_table_status.rb
198
199
  - lib/dynamoid/application_time_zone.rb
199
200
  - lib/dynamoid/associations.rb
@@ -230,6 +231,8 @@ files:
230
231
  - lib/dynamoid/persistence.rb
231
232
  - lib/dynamoid/persistence/import.rb
232
233
  - lib/dynamoid/persistence/inc.rb
234
+ - lib/dynamoid/persistence/item_updater_with_casting_and_dumping.rb
235
+ - lib/dynamoid/persistence/item_updater_with_dumping.rb
233
236
  - lib/dynamoid/persistence/save.rb
234
237
  - lib/dynamoid/persistence/update_fields.rb
235
238
  - lib/dynamoid/persistence/update_validations.rb
@@ -239,6 +242,19 @@ files:
239
242
  - lib/dynamoid/tasks.rb
240
243
  - lib/dynamoid/tasks/database.rake
241
244
  - lib/dynamoid/tasks/database.rb
245
+ - lib/dynamoid/transaction_read.rb
246
+ - lib/dynamoid/transaction_read/find.rb
247
+ - lib/dynamoid/transaction_write.rb
248
+ - lib/dynamoid/transaction_write/base.rb
249
+ - lib/dynamoid/transaction_write/create.rb
250
+ - lib/dynamoid/transaction_write/delete_with_instance.rb
251
+ - lib/dynamoid/transaction_write/delete_with_primary_key.rb
252
+ - lib/dynamoid/transaction_write/destroy.rb
253
+ - lib/dynamoid/transaction_write/item_updater.rb
254
+ - lib/dynamoid/transaction_write/save.rb
255
+ - lib/dynamoid/transaction_write/update_attributes.rb
256
+ - lib/dynamoid/transaction_write/update_fields.rb
257
+ - lib/dynamoid/transaction_write/upsert.rb
242
258
  - lib/dynamoid/type_casting.rb
243
259
  - lib/dynamoid/undumping.rb
244
260
  - lib/dynamoid/validations.rb
@@ -248,10 +264,10 @@ licenses:
248
264
  - MIT
249
265
  metadata:
250
266
  homepage_uri: http://github.com/Dynamoid/dynamoid
251
- source_code_uri: https://github.com/Dynamoid/dynamoid/tree/v3.10.0
252
- changelog_uri: https://github.com/Dynamoid/dynamoid/blob/v3.10.0/CHANGELOG.md
267
+ source_code_uri: https://github.com/Dynamoid/dynamoid/tree/v3.12.1
268
+ changelog_uri: https://github.com/Dynamoid/dynamoid/blob/v3.12.1/CHANGELOG.md
253
269
  bug_tracker_uri: https://github.com/Dynamoid/dynamoid/issues
254
- documentation_uri: https://www.rubydoc.info/gems/dynamoid/3.10.0
270
+ documentation_uri: https://www.rubydoc.info/gems/dynamoid/3.12.1
255
271
  funding_uri: https://opencollective.com/dynamoid
256
272
  wiki_uri: https://github.com/Dynamoid/dynamoid/wiki
257
273
  rubygems_mfa_required: 'true'