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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7cd72c0b2cf1855d6318ed72469e49010f79e30d
4
- data.tar.gz: 3ce0b65d84b608e041a155154d36b70d8d566ce2
3
+ metadata.gz: 1c51e60669ae324f89ee6d6ceb70aedcc1b8f3e1
4
+ data.tar.gz: a71e2146d58414c7c3251cf5452d65fa11f4613d
5
5
  SHA512:
6
- metadata.gz: 196767913b8dc1fa292feca091217c3f6b518efdfddb0b28641d29a10309461058994281d310eca6fba81dc747de204db25657cdd56a9e98d6166c3ca7e59ec1
7
- data.tar.gz: 3b747dc5d543ab8a358473328bb459c531ea486a29c60fd8493b1461ef2e033ccbfaa430e6b96a78f203a3bd745114c13687507cd4b7b77bcbb391ff0c3249ee
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, factory_girl).
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.each do |_i, params|
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
@@ -1,5 +1,5 @@
1
1
  module ActiveModel
2
2
  module Datastore
3
- VERSION = '0.2.4'
3
+ VERSION = '0.2.5'
4
4
  end
5
5
  end
@@ -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
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-10-31 00:00:00.000000000 Z
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: factory_girl
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