activemodel-datastore 0.2.4 → 0.2.5
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 +5 -0
- data/lib/active_model/datastore.rb +5 -9
- data/lib/active_model/datastore/excluded_indexes.rb +38 -0
- data/lib/active_model/datastore/nested_attr.rb +1 -1
- data/lib/active_model/datastore/track_changes.rb +1 -3
- data/lib/active_model/datastore/version.rb +1 -1
- data/lib/activemodel/datastore.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c51e60669ae324f89ee6d6ceb70aedcc1b8f3e1
|
4
|
+
data.tar.gz: a71e2146d58414c7c3251cf5452d65fa11f4613d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 211b19499c3c1523805e4989641d44bb4253afb80fccf0a885e385bfe2ba45abe94cac1a121acb878605da46bc5ac858451642d89d291ee79c85b89269145e4d
|
7
|
+
data.tar.gz: aee1048afd652a79d7cc45fa94d0a4e438c85b08f6b7bf642b149378be1bea1bed23918ad56f225082c074edb00a01ba4647398c7d4a00487c339ead8208107a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
### 0.2.5 / 2017-11-06
|
2
|
+
* adding support for setting indexed false on individual entity properties
|
3
|
+
* updating example Cloud Datastore Rails app to 5.1.4
|
4
|
+
* retry on exceptions are now specific to Google::Cloud::Error
|
5
|
+
|
1
6
|
### 0.2.4 / 2017-10-31
|
2
7
|
* non-Rails projects now source client authentication settings automatically (rjmooney)
|
3
8
|
* documentation improvements
|
@@ -114,6 +114,7 @@ module ActiveModel::Datastore
|
|
114
114
|
include ActiveModel::Dirty
|
115
115
|
include ActiveModel::Validations
|
116
116
|
include ActiveModel::Validations::Callbacks
|
117
|
+
include ActiveModel::Datastore::ExcludedIndexes
|
117
118
|
include ActiveModel::Datastore::NestedAttr
|
118
119
|
include ActiveModel::Datastore::PropertyValues
|
119
120
|
include ActiveModel::Datastore::TrackChanges
|
@@ -159,6 +160,7 @@ module ActiveModel::Datastore
|
|
159
160
|
end
|
160
161
|
entity_properties.each do |attr|
|
161
162
|
entity[attr] = instance_variable_get("@#{attr}")
|
163
|
+
entity.exclude_from_indexes!(attr, true) if no_index_attributes.include? attr
|
162
164
|
end
|
163
165
|
entity
|
164
166
|
end
|
@@ -168,7 +170,7 @@ module ActiveModel::Datastore
|
|
168
170
|
end
|
169
171
|
|
170
172
|
##
|
171
|
-
# For compatibility with libraries that require the bang method version (example,
|
173
|
+
# For compatibility with libraries that require the bang method version (example, factory_bot).
|
172
174
|
#
|
173
175
|
def save!
|
174
176
|
save_entity || raise(EntityNotSavedError, 'Failed to save the entity')
|
@@ -370,12 +372,6 @@ module ActiveModel::Datastore
|
|
370
372
|
model_entity
|
371
373
|
end
|
372
374
|
|
373
|
-
def exclude_from_index(entity, boolean)
|
374
|
-
entity.properties.to_h.keys.each do |value|
|
375
|
-
entity.exclude_from_indexes! value, boolean
|
376
|
-
end
|
377
|
-
end
|
378
|
-
|
379
375
|
##
|
380
376
|
# Constructs a Google::Cloud::Datastore::Query.
|
381
377
|
#
|
@@ -402,7 +398,7 @@ module ActiveModel::Datastore
|
|
402
398
|
sleep_time = 0.25
|
403
399
|
begin
|
404
400
|
yield
|
405
|
-
rescue => e
|
401
|
+
rescue Google::Cloud::Error => e
|
406
402
|
return false if retries >= max_retry_count
|
407
403
|
puts "\e[33mRescued exception #{e.message.inspect}, retrying in #{sleep_time}\e[0m"
|
408
404
|
# 0.25, 0.5, 1, 2, and 4 second between retries.
|
@@ -418,7 +414,7 @@ module ActiveModel::Datastore
|
|
418
414
|
sleep_time = 0.25
|
419
415
|
begin
|
420
416
|
yield
|
421
|
-
rescue => e
|
417
|
+
rescue Google::Cloud::Error => e
|
422
418
|
raise e if retries >= max_retry_count
|
423
419
|
puts "\e[33mRescued exception #{e.message.inspect}, retrying in #{sleep_time}\e[0m"
|
424
420
|
# 0.25, 0.5, 1, 2, and 4 second between retries.
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module ActiveModel::Datastore
|
2
|
+
module ExcludedIndexes
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
def no_index_attributes
|
6
|
+
[]
|
7
|
+
end
|
8
|
+
|
9
|
+
##
|
10
|
+
# Sets all entity properties to be included/excluded from the Datastore indexes.
|
11
|
+
#
|
12
|
+
def exclude_from_index(entity, boolean)
|
13
|
+
entity.properties.to_h.each_key do |value|
|
14
|
+
entity.exclude_from_indexes! value, boolean
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module ClassMethods
|
19
|
+
##
|
20
|
+
# Sets attributes to be excluded from the Datastore indexes.
|
21
|
+
#
|
22
|
+
# Overrides no_index_attributes to return an Array of the attributes configured
|
23
|
+
# to be indexed.
|
24
|
+
#
|
25
|
+
# For example, an indexed string property can not exceed 1500 bytes. String properties
|
26
|
+
# that are not indexed can be up to 1,048,487 bytes. All properties indexed by default.
|
27
|
+
#
|
28
|
+
def no_indexes(*attributes)
|
29
|
+
attributes = attributes.collect(&:to_s)
|
30
|
+
define_method('no_index_attributes') { attributes }
|
31
|
+
end
|
32
|
+
|
33
|
+
def clear_index_exclusions!
|
34
|
+
define_method('no_index_attributes') { [] }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -159,7 +159,7 @@ module ActiveModel::Datastore
|
|
159
159
|
association_name = association_name.to_sym
|
160
160
|
send("#{association_name}=", []) if send(association_name).nil?
|
161
161
|
|
162
|
-
attributes.
|
162
|
+
attributes.each_value do |params|
|
163
163
|
if params['id'].blank?
|
164
164
|
unless reject_new_record?(params, options)
|
165
165
|
new = association_name.to_c.new(params.except(*UNASSIGNABLE_KEYS))
|
@@ -73,9 +73,7 @@ module ActiveModel::Datastore
|
|
73
73
|
changed = marked_for_destruction? ? true : false
|
74
74
|
tracked_attributes.each do |attr|
|
75
75
|
break if changed
|
76
|
-
if send("#{attr}_changed?")
|
77
|
-
changed = send(attr) == send("#{attr}_was") ? false : true
|
78
|
-
end
|
76
|
+
changed = send(attr) != send("#{attr}_was") if send("#{attr}_changed?")
|
79
77
|
end
|
80
78
|
self.exclude_from_save = !changed
|
81
79
|
changed
|
@@ -7,6 +7,7 @@ require 'active_model'
|
|
7
7
|
|
8
8
|
require 'active_model/datastore/connection'
|
9
9
|
require 'active_model/datastore/errors'
|
10
|
+
require 'active_model/datastore/excluded_indexes'
|
10
11
|
require 'active_model/datastore/nested_attr'
|
11
12
|
require 'active_model/datastore/property_values'
|
12
13
|
require 'active_model/datastore/track_changes'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activemodel-datastore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryce McLean
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '5.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: factory_bot
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
@@ -191,6 +191,7 @@ files:
|
|
191
191
|
- lib/active_model/datastore/carrier_wave_uploader.rb
|
192
192
|
- lib/active_model/datastore/connection.rb
|
193
193
|
- lib/active_model/datastore/errors.rb
|
194
|
+
- lib/active_model/datastore/excluded_indexes.rb
|
194
195
|
- lib/active_model/datastore/nested_attr.rb
|
195
196
|
- lib/active_model/datastore/property_values.rb
|
196
197
|
- lib/active_model/datastore/track_changes.rb
|