act_as_fire_record_beta 0.0.2 → 0.0.4

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
  SHA256:
3
- metadata.gz: 7fa5ffce208135ba537f2eba3ae37caf239e6b49446f2d31c77668263ec178c3
4
- data.tar.gz: c4705cc8018288e15a766bd7efde203fdb03d701db208a66cbb46409732b1077
3
+ metadata.gz: 631c8a9418186db9bba40eeed7d122996c161c6f44bba58a230840e3ee063b73
4
+ data.tar.gz: 82a5ae9c0f6aa62920cdba71fb8e31f279aea21fdb8c989b297f15e04e1e06d7
5
5
  SHA512:
6
- metadata.gz: 382202705f5383d954bfd336137b6d74e0bf66879a3a07e8a480e4ec3e1d9427bd35e5d23180a929c39c74ab8d7d2607eff70802a8f8c86f6825a7c6e3fedcfc
7
- data.tar.gz: '01158cd356bae1b962f62ba6575d52fb9e5648d83dc501ab8e3d0aaf2c19bffe6a5f1501aa17206a3f6f8f71a3f841370b5f7295aa8c19a07faecc249de319ab'
6
+ metadata.gz: acab4a53dd1d91888490a537e4b85234c451ac2c57af072a2cb383a63cd7009db6f7130ceb8d2b710b9f012f660727873c897419bd64e98c57e8003cf6118418
7
+ data.tar.gz: c3b124d95d7e1dab694fcb86fb83ed2e90efc4502121a6d87e4263b7b7bf7590f0a1505c47e7d08b6cff49230d1ea40d26eadf98a906a3ab55cc1d9ccf8e7ad3
@@ -5,13 +5,13 @@ module Google
5
5
  def get_records(limit: nil)
6
6
  scope = limit ? limit(limit) : self
7
7
  scope.get.map do |data|
8
- model_lass = ActAsFireRecordBeta.class_mapping[query.from[0].collection_id]
9
- model_lass.to_instance(data)
8
+ fire_record_class.to_instance(data)
10
9
  end
11
10
  end
12
11
 
13
12
  def destroy_all
14
- get_records.each(&:destroy)
13
+ doc_refs = get_records.map(&:doc_ref)
14
+ fire_record_class.delete_in_batch(doc_refs)
15
15
  end
16
16
 
17
17
  def first(limit = 1)
@@ -22,6 +22,10 @@ module Google
22
22
  def exists?
23
23
  !!first
24
24
  end
25
+
26
+ def fire_record_class
27
+ @_fire_record_class ||= ActAsFireRecordBeta.class_mapping[query.from[0].collection_id]
28
+ end
25
29
  end
26
30
  end
27
31
  end
@@ -1,3 +1,3 @@
1
1
  module ActAsFireRecordBeta
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -23,6 +23,8 @@ module ActAsFireRecordBeta
23
23
  attribute :created_at, :time
24
24
  attribute :updated_at, :time
25
25
 
26
+ attr_accessor :doc_ref
27
+
26
28
  ActAsFireRecordBeta.class_mapping[collection_name_with_env] = self
27
29
  end
28
30
 
@@ -30,9 +32,16 @@ module ActAsFireRecordBeta
30
32
  extend Forwardable
31
33
  delegate :logger => Rails
32
34
 
33
- def firestore_attributes(*names)
35
+ # Copied from activemodel-7.0.4/lib/active_model/attributes.rb
36
+ NO_DEFAULT_PROVIDED = Object.new
37
+
38
+ def firestore_attribute(name, cast_type = nil, default: NO_DEFAULT_PROVIDED, **options)
39
+ attribute(name, cast_type, default: default, **options)
40
+ firestore_attributes << name.to_sym
41
+ end
42
+
43
+ def firestore_attributes
34
44
  @_firestore_attributes ||= []
35
- @_firestore_attributes += names.map(&:to_sym)
36
45
  end
37
46
 
38
47
  def col
@@ -91,7 +100,20 @@ module ActAsFireRecordBeta
91
100
  end
92
101
 
93
102
  def destroy_all
94
- col.list_documents.each(&:delete)
103
+ delete_in_batch(col.list_documents)
104
+ end
105
+
106
+ def delete_in_batch(doc_refs)
107
+ max_batch_size = 500
108
+ nested_doc_refs = doc_refs.each_slice(max_batch_size)
109
+ firestore = Google::Cloud::Firestore.new
110
+ nested_doc_refs.each do |doc_refs|
111
+ firestore.batch do |b|
112
+ doc_refs.each do |doc_ref|
113
+ b.delete(doc_ref)
114
+ end
115
+ end
116
+ end
95
117
  end
96
118
 
97
119
  def save_params(record)
@@ -107,7 +129,7 @@ module ActAsFireRecordBeta
107
129
  @_firestore_attributes.each do |key|
108
130
  params[key] = data[key]
109
131
  end
110
- new(params)
132
+ new(params).tap { |record| record.doc_ref = data }
111
133
  end
112
134
 
113
135
  private
@@ -165,6 +187,13 @@ module ActAsFireRecordBeta
165
187
  true
166
188
  end
167
189
 
190
+ # Override
191
+ def inspect
192
+ hash = attributes.transform_keys(&:to_sym)
193
+ hash_text = hash.to_s[1..-2]
194
+ "#<#{self.class} #{hash_text}>"
195
+ end
196
+
168
197
  private
169
198
 
170
199
  def save_params
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: act_as_fire_record_beta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Junichi Ito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-22 00:00:00.000000000 Z
11
+ date: 2022-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -76,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
78
  requirements: []
79
- rubygems_version: 3.3.7
79
+ rubygems_version: 3.2.33
80
80
  signing_key:
81
81
  specification_version: 4
82
82
  summary: ActiveRecord like interface for Firestore