activemodel-datastore 0.2.3 → 0.5.0

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
- 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: []