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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 43c4bfc5e295411cd88d6bdff0897e564dea9e23
4
- data.tar.gz: 4ed3b3a28213026e2c99cb0f616372c82958d78f
2
+ SHA256:
3
+ metadata.gz: c8befe5fdd25af32f0024fe2b4c2ce59c15bd153af554bf2941e7cabc2724e84
4
+ data.tar.gz: d189bd5a085a3fb18de7afff018f7a9db64ed6122aeb38ab120f272cc49ec6c7
5
5
  SHA512:
6
- metadata.gz: ebe8bb990217d55648209e66be3114176d83e85c81fdecf3f4b1396346f1b063cb823e8aed2e7599e9568e1bd0c92bb4e5ae0dd7c2801a8114eeaf6513e41fb1
7
- data.tar.gz: 6b623ad9ccc3094e96b19969df904e844c4659f9b7dbbabebfd97ae6c8e98311c437c9b3ee4cbdaa2b6733ff2ceb085b0d242baf0be8e5a67802dea83d5043dd
6
+ metadata.gz: ca3683674b1066054f609751dc89f55b500c50b3aae1a84c1b49026bdfb169e0002a62a3cfa101f1c97e78231297ecba4ccf0bc940c192d421a1fb185d39372f
7
+ data.tar.gz: f9b0e617008082832350f11dffa172b6861a2ff586a1ef4c0a638c2187a5f9a3e98088c596b40fc098ecf3d7df4a0dddf142b59876d6b3a1a6fbb34eb5705b10
@@ -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%2FDatastore:default_property_value)
130
- and type cast the format of values through [`format_property_value`](http://www.rubydoc.info/gems/activemodel-datastore/ActiveModel%2FDatastore:format_property_value):
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, factory_girl).
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'] = 'localhost:8180'
18
- ENV['GCLOUD_PROJECT'] = 'local-datastore'
17
+ ENV['DATASTORE_EMULATOR_HOST'] ||= 'localhost:8180'
18
+ ENV['GCLOUD_PROJECT'] ||= 'local-datastore'
19
19
  elsif Rails.env.test?
20
- ENV['DATASTORE_EMULATOR_HOST'] = 'localhost:8181'
21
- ENV['GCLOUD_PROJECT'] = 'test-datastore'
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'] = '{"private_key": "' + ENV['SERVICE_ACCOUNT_PRIVATE_KEY'] + '",
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(ENV['GCLOUD_PROJECT'])
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.each do |_i, params|
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
@@ -38,6 +38,7 @@ module ActiveModel::Datastore
38
38
  #
39
39
  def format_property_value(attr, type)
40
40
  return unless send(attr.to_sym).present?
41
+
41
42
  case type.to_sym
42
43
  when :integer
43
44
  send("#{attr.to_sym}=", send(attr.to_sym).to_i)
@@ -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
- if send("#{attr}_changed?")
77
- changed = send(attr) == send("#{attr}_was") ? false : true
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)
@@ -1,5 +1,5 @@
1
1
  module ActiveModel
2
2
  module Datastore
3
- VERSION = '0.2.3'
3
+ VERSION = '0.5.0'
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,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activemodel-datastore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
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: 2017-05-24 00:00:00.000000000 Z
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: '5.0'
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: '5.0'
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: '5.0'
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: '5.0'
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: '1.0'
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: '1.0'
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: '5.0'
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: '5.0'
82
+ version: 5.0.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
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '4.8'
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: '4.8'
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.7'
103
+ version: '2.1'
104
104
  - - ">="
105
105
  - !ruby/object:Gem::Version
106
- version: 1.7.3
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.7'
113
+ version: '2.1'
114
114
  - - ">="
115
115
  - !ruby/object:Gem::Version
116
- version: 1.7.3
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: '1.1'
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: '1.1'
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
- post_install_message:
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
- rubyforge_project:
219
- rubygems_version: 2.6.11
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: []