activemodel-datastore 0.3.0 → 0.7.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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +12 -0
- data/README.md +2 -1
- data/lib/active_model/datastore/connection.rb +2 -1
- data/lib/active_model/datastore/nested_attr.rb +4 -1
- data/lib/active_model/datastore/property_values.rb +1 -0
- data/lib/active_model/datastore/track_changes.rb +3 -0
- data/lib/active_model/datastore/version.rb +1 -1
- data/lib/active_model/datastore.rb +10 -0
- metadata +30 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9b42d53d2541bb4b6195b830a9702d7276976ffe8b2a18fccf8591184225dc01
|
4
|
+
data.tar.gz: 4d0639726343a339d1192ac802f5321662e72afb2bc66b0f0a0f3b855fc93cc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2714fbfe7c92f1351275bd15e464441b25c4a380f086bc03375525a8aa96de11d916739f5de522eaf1546dab18de4546bd6234385bf09ffb32056ae1aca8ec23
|
7
|
+
data.tar.gz: 26eaa3c1d30ca938c4ee25b6ae71a66a611fe0ae84a1afa44d93d7620de3826c18364b68c288bdac63833859b2260ae6a030ed3d304d3c0eaae2a3c03fdfd988
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
### 0.7.0 / 2021-11-04
|
2
|
+
* adding support for Ruby 3
|
3
|
+
|
4
|
+
### 0.6.0 / 2021-09-20
|
5
|
+
* defaulting the Google::Cloud.datastore network timeout to 15 sec and providing the env var DATASTORE_NETWORK_TIMEOUT as an override.
|
6
|
+
|
7
|
+
### 0.5.0 / 2020-08-17
|
8
|
+
* adding support Google::Cloud::Datastore 2.0.0 (rewritten low-level client, with improved performance and stability).
|
9
|
+
|
10
|
+
### 0.4.0 / 2019-08-23
|
11
|
+
* adding support for Rails 6
|
12
|
+
|
1
13
|
### 0.3.0 / 2018-04-17
|
2
14
|
* adding Travis CI configuration (rud)
|
3
15
|
* no longer override connection related environment variables if already defined(shao1555)
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Active Model Datastore
|
2
2
|
===================================
|
3
3
|
|
4
|
-
Makes the [google-cloud-datastore](https://github.com/GoogleCloudPlatform/google-cloud-ruby/tree/master/google-cloud-datastore) gem compliant with [active_model](https://github.com/rails/rails/tree/master/activemodel) conventions and compatible with your Rails 5 applications.
|
4
|
+
Makes the [google-cloud-datastore](https://github.com/GoogleCloudPlatform/google-cloud-ruby/tree/master/google-cloud-datastore) gem compliant with [active_model](https://github.com/rails/rails/tree/master/activemodel) conventions and compatible with your Rails 5+ applications.
|
5
5
|
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
6
6
|
|
7
7
|
Why would you want to use Google's NoSQL [Cloud Datastore](https://cloud.google.com/datastore)
|
@@ -255,6 +255,7 @@ users, cursor = User.all(limit: 7)
|
|
255
255
|
# @option options [String] :order Sort the results by property name.
|
256
256
|
# @option options [String] :desc_order Sort the results by descending property name.
|
257
257
|
# @option options [Array] :select Retrieve only select properties from the matched entities.
|
258
|
+
# @option options [Array] :distinct_on Group results by a list of properties.
|
258
259
|
# @option options [Array] :where Adds a property filter of arrays in the format[name, operator, value].
|
259
260
|
```
|
260
261
|
|
@@ -180,6 +180,7 @@ module ActiveModel::Datastore
|
|
180
180
|
unless attributes.is_a?(Hash)
|
181
181
|
raise ArgumentError, "Hash expected, got #{attributes.class.name} (#{attributes.inspect})"
|
182
182
|
end
|
183
|
+
|
183
184
|
attributes
|
184
185
|
end
|
185
186
|
|
@@ -214,6 +215,7 @@ module ActiveModel::Datastore
|
|
214
215
|
#
|
215
216
|
def call_reject_if(attributes, options)
|
216
217
|
return false if destroy_flag?(attributes)
|
218
|
+
|
217
219
|
attributes = attributes.with_indifferent_access
|
218
220
|
blank_proc = proc { |attrs| attrs.all? { |_key, value| value.blank? } }
|
219
221
|
options[:reject_if] = blank_proc if options[:reject_if] == :all_blank
|
@@ -245,7 +247,8 @@ module ActiveModel::Datastore
|
|
245
247
|
class AssociatedValidator < ActiveModel::EachValidator
|
246
248
|
def validate_each(record, attribute, value)
|
247
249
|
return unless Array(value).reject(&:valid?).any?
|
248
|
-
|
250
|
+
|
251
|
+
record.errors.add(attribute, :invalid, **options.merge(value: value))
|
249
252
|
end
|
250
253
|
end
|
251
254
|
end
|
@@ -70,9 +70,11 @@ module ActiveModel::Datastore
|
|
70
70
|
unless tracked_attributes.present?
|
71
71
|
raise TrackChangesError, 'Object has not been configured for change tracking.'
|
72
72
|
end
|
73
|
+
|
73
74
|
changed = marked_for_destruction? ? true : false
|
74
75
|
tracked_attributes.each do |attr|
|
75
76
|
break if changed
|
77
|
+
|
76
78
|
changed = send(attr) != send("#{attr}_was") if send("#{attr}_changed?")
|
77
79
|
end
|
78
80
|
self.exclude_from_save = !changed
|
@@ -81,6 +83,7 @@ module ActiveModel::Datastore
|
|
81
83
|
|
82
84
|
def remove_unmodified_children
|
83
85
|
return unless tracked_attributes.present? && nested_attributes?
|
86
|
+
|
84
87
|
nested_attributes.each do |attr|
|
85
88
|
with_changes = Array(send(attr.to_sym)).select(&:values_changed?)
|
86
89
|
send("#{attr}=", with_changes)
|
@@ -154,6 +154,7 @@ module ActiveModel::Datastore
|
|
154
154
|
entity = CloudDatastore.dataset.entity self.class.name, id
|
155
155
|
if parent.present?
|
156
156
|
raise ArgumentError, 'Must be a Key' unless parent.is_a? Google::Cloud::Datastore::Key
|
157
|
+
|
157
158
|
entity.key.parent = parent
|
158
159
|
elsif parent?
|
159
160
|
entity.key.parent = self.class.parent_key(parent_key_id)
|
@@ -179,6 +180,7 @@ module ActiveModel::Datastore
|
|
179
180
|
def update(params)
|
180
181
|
assign_attributes(params)
|
181
182
|
return unless valid?
|
183
|
+
|
182
184
|
run_callbacks :update do
|
183
185
|
entity = build_entity
|
184
186
|
self.class.retry_on_exception? { CloudDatastore.dataset.save entity }
|
@@ -197,6 +199,7 @@ module ActiveModel::Datastore
|
|
197
199
|
|
198
200
|
def save_entity(parent = nil)
|
199
201
|
return unless valid?
|
202
|
+
|
200
203
|
run_callbacks :save do
|
201
204
|
entity = build_entity(parent)
|
202
205
|
success = self.class.retry_on_exception? { CloudDatastore.dataset.save entity }
|
@@ -273,6 +276,7 @@ module ActiveModel::Datastore
|
|
273
276
|
# @option options [String] :order Sort the results by property name.
|
274
277
|
# @option options [String] :desc_order Sort the results by descending property name.
|
275
278
|
# @option options [Array] :select Retrieve only select properties from the matched entities.
|
279
|
+
# @option options [Array] :distinct_on Group results by a list of properties.
|
276
280
|
# @option options [Array] :where Adds a property filter of arrays in the format
|
277
281
|
# [name, operator, value].
|
278
282
|
#
|
@@ -352,6 +356,7 @@ module ActiveModel::Datastore
|
|
352
356
|
#
|
353
357
|
def from_entities(entities)
|
354
358
|
raise ArgumentError, 'Entities param must be an Enumerator' unless entities.is_a? Enumerator
|
359
|
+
|
355
360
|
entities.map { |entity| from_entity(entity) }
|
356
361
|
end
|
357
362
|
|
@@ -363,6 +368,7 @@ module ActiveModel::Datastore
|
|
363
368
|
#
|
364
369
|
def from_entity(entity)
|
365
370
|
return if entity.nil?
|
371
|
+
|
366
372
|
model_entity = build_model(entity)
|
367
373
|
model_entity.entity_property_values = entity.properties.to_h
|
368
374
|
entity.properties.to_h.each do |name, value|
|
@@ -383,6 +389,7 @@ module ActiveModel::Datastore
|
|
383
389
|
# @option options [String] :order Sort the results by property name.
|
384
390
|
# @option options [String] :desc_order Sort the results by descending property name.
|
385
391
|
# @option options [Array] :select Retrieve only select properties from the matched entities.
|
392
|
+
# @option options [Array] :distinct_on Group results by a list of properties.
|
386
393
|
# @option options [Array] :where Adds a property filter of arrays in the format
|
387
394
|
# [name, operator, value].
|
388
395
|
#
|
@@ -400,6 +407,7 @@ module ActiveModel::Datastore
|
|
400
407
|
yield
|
401
408
|
rescue Google::Cloud::Error => e
|
402
409
|
return false if retries >= max_retry_count
|
410
|
+
|
403
411
|
puts "\e[33mRescued exception #{e.message.inspect}, retrying in #{sleep_time}\e[0m"
|
404
412
|
# 0.25, 0.5, 1, 2, and 4 second between retries.
|
405
413
|
sleep sleep_time
|
@@ -416,6 +424,7 @@ module ActiveModel::Datastore
|
|
416
424
|
yield
|
417
425
|
rescue Google::Cloud::Error => e
|
418
426
|
raise e if retries >= max_retry_count
|
427
|
+
|
419
428
|
puts "\e[33mRescued exception #{e.message.inspect}, retrying in #{sleep_time}\e[0m"
|
420
429
|
# 0.25, 0.5, 1, 2, and 4 second between retries.
|
421
430
|
sleep sleep_time
|
@@ -440,6 +449,7 @@ module ActiveModel::Datastore
|
|
440
449
|
query.limit(options[:limit]) if options[:limit]
|
441
450
|
query_sort(query, options)
|
442
451
|
query.select(*options[:select]) if options[:select]
|
452
|
+
query.distinct_on(*options[:distinct_on]) if options[:distinct_on]
|
443
453
|
query_property_filter(query, options)
|
444
454
|
end
|
445
455
|
|
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activemodel-datastore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryce McLean
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 5.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 5.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 5.0.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 5.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: google-cloud-datastore
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,50 +70,50 @@ dependencies:
|
|
70
70
|
name: actionpack
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 5.0.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 5.0.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: factory_bot
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '6.1'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '6.1'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: faker
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '1
|
103
|
+
version: '2.1'
|
104
104
|
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
version: 1.
|
106
|
+
version: 2.1.2
|
107
107
|
type: :development
|
108
108
|
prerelease: false
|
109
109
|
version_requirements: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
111
|
- - "~>"
|
112
112
|
- !ruby/object:Gem::Version
|
113
|
-
version: '1
|
113
|
+
version: '2.1'
|
114
114
|
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: 1.
|
116
|
+
version: 2.1.2
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
118
|
name: minitest
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,28 +134,28 @@ dependencies:
|
|
134
134
|
requirements:
|
135
135
|
- - "~>"
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
137
|
+
version: '1.14'
|
138
138
|
type: :development
|
139
139
|
prerelease: false
|
140
140
|
version_requirements: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
142
|
- - "~>"
|
143
143
|
- !ruby/object:Gem::Version
|
144
|
-
version: '
|
144
|
+
version: '1.14'
|
145
145
|
- !ruby/object:Gem::Dependency
|
146
146
|
name: carrierwave
|
147
147
|
requirement: !ruby/object:Gem::Requirement
|
148
148
|
requirements:
|
149
149
|
- - "~>"
|
150
150
|
- !ruby/object:Gem::Version
|
151
|
-
version: '
|
151
|
+
version: '2.1'
|
152
152
|
type: :development
|
153
153
|
prerelease: false
|
154
154
|
version_requirements: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
156
|
- - "~>"
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version: '
|
158
|
+
version: '2.1'
|
159
159
|
description: Makes the google-cloud-datastore gem compliant with active_model conventions
|
160
160
|
and compatible with your Rails 5+ applications.
|
161
161
|
email:
|
@@ -185,7 +185,7 @@ metadata:
|
|
185
185
|
changelog_uri: https://github.com/Agrimatics/activemodel-datastore/blob/master/CHANGELOG.md
|
186
186
|
source_code_uri: https://github.com/Agrimatics/activemodel-datastore/
|
187
187
|
bug_tracker_uri: https://github.com/Agrimatics/activemodel-datastore/issues
|
188
|
-
post_install_message:
|
188
|
+
post_install_message:
|
189
189
|
rdoc_options: []
|
190
190
|
require_paths:
|
191
191
|
- lib
|
@@ -200,9 +200,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
200
|
- !ruby/object:Gem::Version
|
201
201
|
version: '0'
|
202
202
|
requirements: []
|
203
|
-
|
204
|
-
|
205
|
-
signing_key:
|
203
|
+
rubygems_version: 3.2.22
|
204
|
+
signing_key:
|
206
205
|
specification_version: 4
|
207
206
|
summary: Cloud Datastore integration with Active Model
|
208
207
|
test_files: []
|