activemodel-datastore 0.3.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|