act_as_fire_record_beta 0.0.2 → 0.0.4

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
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