activemodel-datastore 0.2.3 → 0.5.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 +20 -0
- data/README.md +4 -2
- data/lib/active_model/datastore.rb +16 -10
- data/lib/active_model/datastore/connection.rb +6 -9
- data/lib/active_model/datastore/excluded_indexes.rb +38 -0
- data/lib/active_model/datastore/nested_attr.rb +5 -4
- data/lib/active_model/datastore/property_values.rb +1 -0
- data/lib/active_model/datastore/track_changes.rb +4 -3
- data/lib/active_model/datastore/version.rb +1 -1
- data/lib/activemodel/datastore.rb +1 -0
- metadata +35 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c8befe5fdd25af32f0024fe2b4c2ce59c15bd153af554bf2941e7cabc2724e84
|
4
|
+
data.tar.gz: d189bd5a085a3fb18de7afff018f7a9db64ed6122aeb38ab120f272cc49ec6c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca3683674b1066054f609751dc89f55b500c50b3aae1a84c1b49026bdfb169e0002a62a3cfa101f1c97e78231297ecba4ccf0bc940c192d421a1fb185d39372f
|
7
|
+
data.tar.gz: f9b0e617008082832350f11dffa172b6861a2ff586a1ef4c0a638c2187a5f9a3e98088c596b40fc098ecf3d7df4a0dddf142b59876d6b3a1a6fbb34eb5705b10
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
### 0.5.0 / 2020-08-17
|
2
|
+
* adding support Google::Cloud::Datastore 2.0.0 (rewritten low-level client, with improved performance and stability).
|
3
|
+
|
4
|
+
### 0.4.0 / 2019-08-23
|
5
|
+
* adding support for Rails 6
|
6
|
+
|
7
|
+
### 0.3.0 / 2018-04-17
|
8
|
+
* adding Travis CI configuration (rud)
|
9
|
+
* no longer override connection related environment variables if already defined(shao1555)
|
10
|
+
* adding support for passing query an array of select properties
|
11
|
+
|
12
|
+
### 0.2.5 / 2017-11-06
|
13
|
+
* adding support for setting indexed false on individual entity properties
|
14
|
+
* updating example Cloud Datastore Rails app to 5.1.4
|
15
|
+
* retry on exceptions are now specific to Google::Cloud::Error
|
16
|
+
|
17
|
+
### 0.2.4 / 2017-10-31
|
18
|
+
* non-Rails projects now source client authentication settings automatically (rjmooney)
|
19
|
+
* documentation improvements
|
20
|
+
|
1
21
|
### 0.2.3 / 2017-05-24
|
2
22
|
* adding CarrierWave file upload support
|
3
23
|
* updating example Cloud Datastore Rails app to 5.1
|
data/README.md
CHANGED
@@ -13,6 +13,7 @@ automatically scales to handle your applications' load. Cloud Datastore is a sch
|
|
13
13
|
suited for unstructured or semi-structured application data.
|
14
14
|
|
15
15
|
[![Gem Version](https://badge.fury.io/rb/activemodel-datastore.svg)](https://badge.fury.io/rb/activemodel-datastore)
|
16
|
+
[![Build Status](https://travis-ci.org/Agrimatics/activemodel-datastore.svg?branch=master)](https://travis-ci.org/Agrimatics/activemodel-datastore)
|
16
17
|
|
17
18
|
## Table of contents
|
18
19
|
|
@@ -126,8 +127,8 @@ end
|
|
126
127
|
```
|
127
128
|
|
128
129
|
Callbacks work as you would expect. We have also added the ability to set default values through
|
129
|
-
[`default_property_value`](http://www.rubydoc.info/gems/activemodel-datastore/ActiveModel
|
130
|
-
and type cast the format of values through [`format_property_value`](http://www.rubydoc.info/gems/activemodel-datastore/ActiveModel
|
130
|
+
[`default_property_value`](http://www.rubydoc.info/gems/activemodel-datastore/ActiveModel/Datastore/PropertyValues#default_property_value-instance_method)
|
131
|
+
and type cast the format of values through [`format_property_value`](http://www.rubydoc.info/gems/activemodel-datastore/ActiveModel/Datastore/PropertyValues#format_property_value-instance_method):
|
131
132
|
|
132
133
|
```ruby
|
133
134
|
class User
|
@@ -254,6 +255,7 @@ users, cursor = User.all(limit: 7)
|
|
254
255
|
# @option options [String] :order Sort the results by property name.
|
255
256
|
# @option options [String] :desc_order Sort the results by descending property name.
|
256
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.
|
257
259
|
# @option options [Array] :where Adds a property filter of arrays in the format[name, operator, value].
|
258
260
|
```
|
259
261
|
|
@@ -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
|
@@ -153,12 +154,14 @@ module ActiveModel::Datastore
|
|
153
154
|
entity = CloudDatastore.dataset.entity self.class.name, id
|
154
155
|
if parent.present?
|
155
156
|
raise ArgumentError, 'Must be a Key' unless parent.is_a? Google::Cloud::Datastore::Key
|
157
|
+
|
156
158
|
entity.key.parent = parent
|
157
159
|
elsif parent?
|
158
160
|
entity.key.parent = self.class.parent_key(parent_key_id)
|
159
161
|
end
|
160
162
|
entity_properties.each do |attr|
|
161
163
|
entity[attr] = instance_variable_get("@#{attr}")
|
164
|
+
entity.exclude_from_indexes!(attr, true) if no_index_attributes.include? attr
|
162
165
|
end
|
163
166
|
entity
|
164
167
|
end
|
@@ -168,7 +171,7 @@ module ActiveModel::Datastore
|
|
168
171
|
end
|
169
172
|
|
170
173
|
##
|
171
|
-
# For compatibility with libraries that require the bang method version (example,
|
174
|
+
# For compatibility with libraries that require the bang method version (example, factory_bot).
|
172
175
|
#
|
173
176
|
def save!
|
174
177
|
save_entity || raise(EntityNotSavedError, 'Failed to save the entity')
|
@@ -177,6 +180,7 @@ module ActiveModel::Datastore
|
|
177
180
|
def update(params)
|
178
181
|
assign_attributes(params)
|
179
182
|
return unless valid?
|
183
|
+
|
180
184
|
run_callbacks :update do
|
181
185
|
entity = build_entity
|
182
186
|
self.class.retry_on_exception? { CloudDatastore.dataset.save entity }
|
@@ -195,6 +199,7 @@ module ActiveModel::Datastore
|
|
195
199
|
|
196
200
|
def save_entity(parent = nil)
|
197
201
|
return unless valid?
|
202
|
+
|
198
203
|
run_callbacks :save do
|
199
204
|
entity = build_entity(parent)
|
200
205
|
success = self.class.retry_on_exception? { CloudDatastore.dataset.save entity }
|
@@ -271,6 +276,7 @@ module ActiveModel::Datastore
|
|
271
276
|
# @option options [String] :order Sort the results by property name.
|
272
277
|
# @option options [String] :desc_order Sort the results by descending property name.
|
273
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.
|
274
280
|
# @option options [Array] :where Adds a property filter of arrays in the format
|
275
281
|
# [name, operator, value].
|
276
282
|
#
|
@@ -350,6 +356,7 @@ module ActiveModel::Datastore
|
|
350
356
|
#
|
351
357
|
def from_entities(entities)
|
352
358
|
raise ArgumentError, 'Entities param must be an Enumerator' unless entities.is_a? Enumerator
|
359
|
+
|
353
360
|
entities.map { |entity| from_entity(entity) }
|
354
361
|
end
|
355
362
|
|
@@ -361,6 +368,7 @@ module ActiveModel::Datastore
|
|
361
368
|
#
|
362
369
|
def from_entity(entity)
|
363
370
|
return if entity.nil?
|
371
|
+
|
364
372
|
model_entity = build_model(entity)
|
365
373
|
model_entity.entity_property_values = entity.properties.to_h
|
366
374
|
entity.properties.to_h.each do |name, value|
|
@@ -370,12 +378,6 @@ module ActiveModel::Datastore
|
|
370
378
|
model_entity
|
371
379
|
end
|
372
380
|
|
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
381
|
##
|
380
382
|
# Constructs a Google::Cloud::Datastore::Query.
|
381
383
|
#
|
@@ -387,6 +389,7 @@ module ActiveModel::Datastore
|
|
387
389
|
# @option options [String] :order Sort the results by property name.
|
388
390
|
# @option options [String] :desc_order Sort the results by descending property name.
|
389
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.
|
390
393
|
# @option options [Array] :where Adds a property filter of arrays in the format
|
391
394
|
# [name, operator, value].
|
392
395
|
#
|
@@ -402,8 +405,9 @@ module ActiveModel::Datastore
|
|
402
405
|
sleep_time = 0.25
|
403
406
|
begin
|
404
407
|
yield
|
405
|
-
rescue => e
|
408
|
+
rescue Google::Cloud::Error => e
|
406
409
|
return false if retries >= max_retry_count
|
410
|
+
|
407
411
|
puts "\e[33mRescued exception #{e.message.inspect}, retrying in #{sleep_time}\e[0m"
|
408
412
|
# 0.25, 0.5, 1, 2, and 4 second between retries.
|
409
413
|
sleep sleep_time
|
@@ -418,8 +422,9 @@ module ActiveModel::Datastore
|
|
418
422
|
sleep_time = 0.25
|
419
423
|
begin
|
420
424
|
yield
|
421
|
-
rescue => e
|
425
|
+
rescue Google::Cloud::Error => e
|
422
426
|
raise e if retries >= max_retry_count
|
427
|
+
|
423
428
|
puts "\e[33mRescued exception #{e.message.inspect}, retrying in #{sleep_time}\e[0m"
|
424
429
|
# 0.25, 0.5, 1, 2, and 4 second between retries.
|
425
430
|
sleep sleep_time
|
@@ -443,7 +448,8 @@ module ActiveModel::Datastore
|
|
443
448
|
query.cursor(options[:cursor]) if options[:cursor]
|
444
449
|
query.limit(options[:limit]) if options[:limit]
|
445
450
|
query_sort(query, options)
|
446
|
-
query.select(options[:select]) if options[:select]
|
451
|
+
query.select(*options[:select]) if options[:select]
|
452
|
+
query.distinct_on(*options[:distinct_on]) if options[:distinct_on]
|
447
453
|
query_property_filter(query, options)
|
448
454
|
end
|
449
455
|
|
@@ -14,23 +14,20 @@
|
|
14
14
|
module CloudDatastore
|
15
15
|
if defined?(Rails) == 'constant'
|
16
16
|
if Rails.env.development?
|
17
|
-
ENV['DATASTORE_EMULATOR_HOST']
|
18
|
-
ENV['GCLOUD_PROJECT']
|
17
|
+
ENV['DATASTORE_EMULATOR_HOST'] ||= 'localhost:8180'
|
18
|
+
ENV['GCLOUD_PROJECT'] ||= 'local-datastore'
|
19
19
|
elsif Rails.env.test?
|
20
|
-
ENV['DATASTORE_EMULATOR_HOST']
|
21
|
-
ENV['GCLOUD_PROJECT']
|
20
|
+
ENV['DATASTORE_EMULATOR_HOST'] ||= 'localhost:8181'
|
21
|
+
ENV['GCLOUD_PROJECT'] ||= 'test-datastore'
|
22
22
|
elsif ENV['SERVICE_ACCOUNT_PRIVATE_KEY'].present? &&
|
23
23
|
ENV['SERVICE_ACCOUNT_CLIENT_EMAIL'].present?
|
24
|
-
ENV['GCLOUD_KEYFILE_JSON']
|
24
|
+
ENV['GCLOUD_KEYFILE_JSON'] ||= '{"private_key": "' + ENV['SERVICE_ACCOUNT_PRIVATE_KEY'] + '",
|
25
25
|
"client_email": "' + ENV['SERVICE_ACCOUNT_CLIENT_EMAIL'] + '"}'
|
26
26
|
end
|
27
|
-
else
|
28
|
-
ENV['DATASTORE_EMULATOR_HOST'] = 'localhost:8181'
|
29
|
-
ENV['GCLOUD_PROJECT'] = 'test-datastore'
|
30
27
|
end
|
31
28
|
|
32
29
|
def self.dataset
|
33
|
-
@dataset ||= Google::Cloud.datastore
|
30
|
+
@dataset ||= Google::Cloud.datastore
|
34
31
|
end
|
35
32
|
|
36
33
|
def self.reset_dataset
|
@@ -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
|
@@ -105,9 +105,7 @@ module ActiveModel::Datastore
|
|
105
105
|
|
106
106
|
def nested_model_class_names
|
107
107
|
entity_kinds = []
|
108
|
-
if nested_attributes?
|
109
|
-
nested_models.each { |x| entity_kinds << x.class.name }
|
110
|
-
end
|
108
|
+
nested_models.each { |x| entity_kinds << x.class.name } if nested_attributes?
|
111
109
|
entity_kinds.uniq
|
112
110
|
end
|
113
111
|
|
@@ -159,7 +157,7 @@ module ActiveModel::Datastore
|
|
159
157
|
association_name = association_name.to_sym
|
160
158
|
send("#{association_name}=", []) if send(association_name).nil?
|
161
159
|
|
162
|
-
attributes.
|
160
|
+
attributes.each_value do |params|
|
163
161
|
if params['id'].blank?
|
164
162
|
unless reject_new_record?(params, options)
|
165
163
|
new = association_name.to_c.new(params.except(*UNASSIGNABLE_KEYS))
|
@@ -182,6 +180,7 @@ module ActiveModel::Datastore
|
|
182
180
|
unless attributes.is_a?(Hash)
|
183
181
|
raise ArgumentError, "Hash expected, got #{attributes.class.name} (#{attributes.inspect})"
|
184
182
|
end
|
183
|
+
|
185
184
|
attributes
|
186
185
|
end
|
187
186
|
|
@@ -216,6 +215,7 @@ module ActiveModel::Datastore
|
|
216
215
|
#
|
217
216
|
def call_reject_if(attributes, options)
|
218
217
|
return false if destroy_flag?(attributes)
|
218
|
+
|
219
219
|
attributes = attributes.with_indifferent_access
|
220
220
|
blank_proc = proc { |attrs| attrs.all? { |_key, value| value.blank? } }
|
221
221
|
options[:reject_if] = blank_proc if options[:reject_if] == :all_blank
|
@@ -247,6 +247,7 @@ module ActiveModel::Datastore
|
|
247
247
|
class AssociatedValidator < ActiveModel::EachValidator
|
248
248
|
def validate_each(record, attribute, value)
|
249
249
|
return unless Array(value).reject(&:valid?).any?
|
250
|
+
|
250
251
|
record.errors.add(attribute, :invalid, options.merge(value: value))
|
251
252
|
end
|
252
253
|
end
|
@@ -70,12 +70,12 @@ 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
|
76
|
-
|
77
|
-
|
78
|
-
end
|
77
|
+
|
78
|
+
changed = send(attr) != send("#{attr}_was") if send("#{attr}_changed?")
|
79
79
|
end
|
80
80
|
self.exclude_from_save = !changed
|
81
81
|
changed
|
@@ -83,6 +83,7 @@ module ActiveModel::Datastore
|
|
83
83
|
|
84
84
|
def remove_unmodified_children
|
85
85
|
return unless tracked_attributes.present? && nested_attributes?
|
86
|
+
|
86
87
|
nested_attributes.each do |attr|
|
87
88
|
with_changes = Array(send(attr.to_sym)).select(&:values_changed?)
|
88
89
|
send("#{attr}=", with_changes)
|
@@ -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,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.5.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: 2020-08-18 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
|
-
name:
|
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
|
@@ -128,26 +128,6 @@ dependencies:
|
|
128
128
|
- - "~>"
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '5.10'
|
131
|
-
- !ruby/object:Gem::Dependency
|
132
|
-
name: minitest-reporters
|
133
|
-
requirement: !ruby/object:Gem::Requirement
|
134
|
-
requirements:
|
135
|
-
- - "~>"
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: '1.1'
|
138
|
-
- - ">="
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
version: 1.1.14
|
141
|
-
type: :development
|
142
|
-
prerelease: false
|
143
|
-
version_requirements: !ruby/object:Gem::Requirement
|
144
|
-
requirements:
|
145
|
-
- - "~>"
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
version: '1.1'
|
148
|
-
- - ">="
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: 1.1.14
|
151
131
|
- !ruby/object:Gem::Dependency
|
152
132
|
name: rubocop
|
153
133
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,14 +148,14 @@ dependencies:
|
|
168
148
|
requirements:
|
169
149
|
- - "~>"
|
170
150
|
- !ruby/object:Gem::Version
|
171
|
-
version: '
|
151
|
+
version: '2.1'
|
172
152
|
type: :development
|
173
153
|
prerelease: false
|
174
154
|
version_requirements: !ruby/object:Gem::Requirement
|
175
155
|
requirements:
|
176
156
|
- - "~>"
|
177
157
|
- !ruby/object:Gem::Version
|
178
|
-
version: '
|
158
|
+
version: '2.1'
|
179
159
|
description: Makes the google-cloud-datastore gem compliant with active_model conventions
|
180
160
|
and compatible with your Rails 5+ applications.
|
181
161
|
email:
|
@@ -191,6 +171,7 @@ files:
|
|
191
171
|
- lib/active_model/datastore/carrier_wave_uploader.rb
|
192
172
|
- lib/active_model/datastore/connection.rb
|
193
173
|
- lib/active_model/datastore/errors.rb
|
174
|
+
- lib/active_model/datastore/excluded_indexes.rb
|
194
175
|
- lib/active_model/datastore/nested_attr.rb
|
195
176
|
- lib/active_model/datastore/property_values.rb
|
196
177
|
- lib/active_model/datastore/track_changes.rb
|
@@ -199,8 +180,12 @@ files:
|
|
199
180
|
homepage: https://github.com/Agrimatics/activemodel-datastore
|
200
181
|
licenses:
|
201
182
|
- MIT
|
202
|
-
metadata:
|
203
|
-
|
183
|
+
metadata:
|
184
|
+
homepage_uri: https://github.com/Agrimatics/activemodel-datastore
|
185
|
+
changelog_uri: https://github.com/Agrimatics/activemodel-datastore/blob/master/CHANGELOG.md
|
186
|
+
source_code_uri: https://github.com/Agrimatics/activemodel-datastore/
|
187
|
+
bug_tracker_uri: https://github.com/Agrimatics/activemodel-datastore/issues
|
188
|
+
post_install_message:
|
204
189
|
rdoc_options: []
|
205
190
|
require_paths:
|
206
191
|
- lib
|
@@ -215,9 +200,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
200
|
- !ruby/object:Gem::Version
|
216
201
|
version: '0'
|
217
202
|
requirements: []
|
218
|
-
|
219
|
-
|
220
|
-
signing_key:
|
203
|
+
rubygems_version: 3.0.8
|
204
|
+
signing_key:
|
221
205
|
specification_version: 4
|
222
206
|
summary: Cloud Datastore integration with Active Model
|
223
207
|
test_files: []
|