dynamoid 3.8.0 → 3.10.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +54 -3
  3. data/README.md +111 -60
  4. data/SECURITY.md +17 -0
  5. data/dynamoid.gemspec +65 -0
  6. data/lib/dynamoid/adapter.rb +20 -13
  7. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/create_table.rb +2 -2
  8. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/execute_statement.rb +62 -0
  9. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/filter_expression_convertor.rb +78 -0
  10. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/item_updater.rb +28 -2
  11. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/middleware/limit.rb +3 -0
  12. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/projection_expression_convertor.rb +38 -0
  13. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb +46 -61
  14. data/lib/dynamoid/adapter_plugin/aws_sdk_v3/scan.rb +33 -27
  15. data/lib/dynamoid/adapter_plugin/aws_sdk_v3.rb +116 -70
  16. data/lib/dynamoid/associations/belongs_to.rb +6 -6
  17. data/lib/dynamoid/associations.rb +1 -1
  18. data/lib/dynamoid/components.rb +2 -3
  19. data/lib/dynamoid/config/options.rb +12 -12
  20. data/lib/dynamoid/config.rb +1 -0
  21. data/lib/dynamoid/criteria/chain.rb +101 -138
  22. data/lib/dynamoid/criteria/key_fields_detector.rb +6 -7
  23. data/lib/dynamoid/criteria/nonexistent_fields_detector.rb +2 -2
  24. data/lib/dynamoid/criteria/where_conditions.rb +29 -0
  25. data/lib/dynamoid/dirty.rb +57 -57
  26. data/lib/dynamoid/document.rb +39 -3
  27. data/lib/dynamoid/dumping.rb +2 -2
  28. data/lib/dynamoid/errors.rb +2 -0
  29. data/lib/dynamoid/fields/declare.rb +6 -6
  30. data/lib/dynamoid/fields.rb +9 -27
  31. data/lib/dynamoid/finders.rb +26 -30
  32. data/lib/dynamoid/indexes.rb +7 -10
  33. data/lib/dynamoid/loadable.rb +2 -2
  34. data/lib/dynamoid/log/formatter.rb +19 -4
  35. data/lib/dynamoid/persistence/import.rb +4 -1
  36. data/lib/dynamoid/persistence/inc.rb +66 -0
  37. data/lib/dynamoid/persistence/save.rb +55 -12
  38. data/lib/dynamoid/persistence/update_fields.rb +2 -2
  39. data/lib/dynamoid/persistence/update_validations.rb +2 -2
  40. data/lib/dynamoid/persistence.rb +128 -48
  41. data/lib/dynamoid/type_casting.rb +15 -14
  42. data/lib/dynamoid/undumping.rb +1 -1
  43. data/lib/dynamoid/version.rb +1 -1
  44. metadata +27 -49
  45. data/lib/dynamoid/criteria/ignored_conditions_detector.rb +0 -41
  46. data/lib/dynamoid/criteria/overwritten_conditions_detector.rb +0 -40
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.8.0
4
+ version: 3.10.0
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: 2022-11-09 00:00:00.000000000 Z
24
+ date: 2024-02-10 00:00:00.000000000 Z
25
25
  dependencies:
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activemodel
@@ -93,64 +93,36 @@ dependencies:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
- - !ruby/object:Gem::Dependency
97
- name: coveralls
98
- requirement: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
- type: :development
104
- prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: overcommit
112
- requirement: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
- type: :development
118
- prerelease: false
119
- version_requirements: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: '0'
124
96
  - !ruby/object:Gem::Dependency
125
97
  name: pry
126
98
  requirement: !ruby/object:Gem::Requirement
127
99
  requirements:
128
100
  - - "~>"
129
101
  - !ruby/object:Gem::Version
130
- version: 0.12.0
102
+ version: '0.14'
131
103
  type: :development
132
104
  prerelease: false
133
105
  version_requirements: !ruby/object:Gem::Requirement
134
106
  requirements:
135
107
  - - "~>"
136
108
  - !ruby/object:Gem::Version
137
- version: 0.12.0
109
+ version: '0.14'
138
110
  - !ruby/object:Gem::Dependency
139
111
  name: rake
140
112
  requirement: !ruby/object:Gem::Requirement
141
113
  requirements:
142
- - - ">="
114
+ - - "~>"
143
115
  - !ruby/object:Gem::Version
144
- version: '0'
116
+ version: '13.0'
145
117
  type: :development
146
118
  prerelease: false
147
119
  version_requirements: !ruby/object:Gem::Requirement
148
120
  requirements:
149
- - - ">="
121
+ - - "~>"
150
122
  - !ruby/object:Gem::Version
151
- version: '0'
123
+ version: '13.0'
152
124
  - !ruby/object:Gem::Dependency
153
- name: rspec
125
+ name: rexml
154
126
  requirement: !ruby/object:Gem::Requirement
155
127
  requirements:
156
128
  - - ">="
@@ -164,19 +136,19 @@ dependencies:
164
136
  - !ruby/object:Gem::Version
165
137
  version: '0'
166
138
  - !ruby/object:Gem::Dependency
167
- name: rubocop
139
+ name: rspec
168
140
  requirement: !ruby/object:Gem::Requirement
169
141
  requirements:
170
- - - '='
142
+ - - "~>"
171
143
  - !ruby/object:Gem::Version
172
- version: 0.81.0
144
+ version: '3.12'
173
145
  type: :development
174
146
  prerelease: false
175
147
  version_requirements: !ruby/object:Gem::Requirement
176
148
  requirements:
177
- - - '='
149
+ - - "~>"
178
150
  - !ruby/object:Gem::Version
179
- version: 0.81.0
151
+ version: '3.12'
180
152
  - !ruby/object:Gem::Dependency
181
153
  name: yard
182
154
  requirement: !ruby/object:Gem::Requirement
@@ -195,9 +167,9 @@ description: Dynamoid is an ORM for Amazon's DynamoDB that supports offline deve
195
167
  associations, querying, and everything else you'd expect from an ActiveRecord-style
196
168
  replacement.
197
169
  email:
170
+ - andry.konchin@gmail.com
198
171
  - peter.boling@gmail.com
199
172
  - brian@stellaservice.com
200
- - andry.konchin@gmail.com
201
173
  executables: []
202
174
  extensions: []
203
175
  extra_rdoc_files: []
@@ -205,15 +177,20 @@ files:
205
177
  - CHANGELOG.md
206
178
  - LICENSE.txt
207
179
  - README.md
180
+ - SECURITY.md
181
+ - dynamoid.gemspec
208
182
  - lib/dynamoid.rb
209
183
  - lib/dynamoid/adapter.rb
210
184
  - lib/dynamoid/adapter_plugin/aws_sdk_v3.rb
211
185
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/batch_get_item.rb
212
186
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/create_table.rb
187
+ - lib/dynamoid/adapter_plugin/aws_sdk_v3/execute_statement.rb
188
+ - lib/dynamoid/adapter_plugin/aws_sdk_v3/filter_expression_convertor.rb
213
189
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/item_updater.rb
214
190
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/middleware/backoff.rb
215
191
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/middleware/limit.rb
216
192
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/middleware/start_key.rb
193
+ - lib/dynamoid/adapter_plugin/aws_sdk_v3/projection_expression_convertor.rb
217
194
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb
218
195
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/scan.rb
219
196
  - lib/dynamoid/adapter_plugin/aws_sdk_v3/table.rb
@@ -234,10 +211,9 @@ files:
234
211
  - lib/dynamoid/config/options.rb
235
212
  - lib/dynamoid/criteria.rb
236
213
  - lib/dynamoid/criteria/chain.rb
237
- - lib/dynamoid/criteria/ignored_conditions_detector.rb
238
214
  - lib/dynamoid/criteria/key_fields_detector.rb
239
215
  - lib/dynamoid/criteria/nonexistent_fields_detector.rb
240
- - lib/dynamoid/criteria/overwritten_conditions_detector.rb
216
+ - lib/dynamoid/criteria/where_conditions.rb
241
217
  - lib/dynamoid/dirty.rb
242
218
  - lib/dynamoid/document.rb
243
219
  - lib/dynamoid/dumping.rb
@@ -253,6 +229,7 @@ files:
253
229
  - lib/dynamoid/middleware/identity_map.rb
254
230
  - lib/dynamoid/persistence.rb
255
231
  - lib/dynamoid/persistence/import.rb
232
+ - lib/dynamoid/persistence/inc.rb
256
233
  - lib/dynamoid/persistence/save.rb
257
234
  - lib/dynamoid/persistence/update_fields.rb
258
235
  - lib/dynamoid/persistence/update_validations.rb
@@ -271,10 +248,11 @@ licenses:
271
248
  - MIT
272
249
  metadata:
273
250
  homepage_uri: http://github.com/Dynamoid/dynamoid
274
- source_code_uri: https://github.com/Dynamoid/dynamoid/tree/v3.8.0
275
- changelog_uri: https://github.com/Dynamoid/dynamoid/blob/v3.8.0/CHANGELOG.md
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
276
253
  bug_tracker_uri: https://github.com/Dynamoid/dynamoid/issues
277
- documentation_uri: https://www.rubydoc.info/gems/dynamoid/3.8.0
254
+ documentation_uri: https://www.rubydoc.info/gems/dynamoid/3.10.0
255
+ funding_uri: https://opencollective.com/dynamoid
278
256
  wiki_uri: https://github.com/Dynamoid/dynamoid/wiki
279
257
  rubygems_mfa_required: 'true'
280
258
  post_install_message:
@@ -292,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
292
270
  - !ruby/object:Gem::Version
293
271
  version: '0'
294
272
  requirements: []
295
- rubygems_version: 3.2.32
273
+ rubygems_version: 3.5.3
296
274
  signing_key:
297
275
  specification_version: 4
298
276
  summary: Dynamoid is an ORM for Amazon's DynamoDB
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dynamoid
4
- module Criteria
5
- # @private
6
- class IgnoredConditionsDetector
7
- def initialize(conditions)
8
- @conditions = conditions
9
- @ignored_keys = ignored_keys
10
- end
11
-
12
- def found?
13
- @ignored_keys.present?
14
- end
15
-
16
- def warning_message
17
- return unless found?
18
-
19
- 'Where conditions may contain only one condition for an attribute. ' \
20
- "Following conditions are ignored: #{ignored_conditions}"
21
- end
22
-
23
- private
24
-
25
- def ignored_keys
26
- @conditions.keys
27
- .group_by(&method(:key_to_field))
28
- .select { |_, ary| ary.size > 1 }
29
- .flat_map { |_, ary| ary[0..-2] }
30
- end
31
-
32
- def key_to_field(key)
33
- key.to_s.split('.')[0]
34
- end
35
-
36
- def ignored_conditions
37
- @conditions.slice(*@ignored_keys)
38
- end
39
- end
40
- end
41
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dynamoid
4
- module Criteria
5
- # @private
6
- class OverwrittenConditionsDetector
7
- def initialize(conditions, conditions_new)
8
- @conditions = conditions
9
- @new_conditions = conditions_new
10
- @overwritten_keys = overwritten_keys
11
- end
12
-
13
- def found?
14
- @overwritten_keys.present?
15
- end
16
-
17
- def warning_message
18
- return unless found?
19
-
20
- 'Where conditions may contain only one condition for an attribute. ' \
21
- "Following conditions are ignored: #{ignored_conditions}"
22
- end
23
-
24
- private
25
-
26
- def overwritten_keys
27
- new_fields = @new_conditions.keys.map(&method(:key_to_field))
28
- @conditions.keys.select { |key| key_to_field(key).in?(new_fields) }
29
- end
30
-
31
- def key_to_field(key)
32
- key.to_s.split('.')[0]
33
- end
34
-
35
- def ignored_conditions
36
- @conditions.slice(*@overwritten_keys.map(&:to_sym))
37
- end
38
- end
39
- end
40
- end