act_as_fire_record_beta 0.0.1 → 0.0.3

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: f91046f509170198a4f91b0530f583bfe4dcf525d860f4951dd42c53d8511cd3
4
- data.tar.gz: 8ffec0b70b05f93b64a8f6ebe4399d8d85478782f43d8dcb8adf8f49d8ce463b
3
+ metadata.gz: 0d8ee306c4e6bccb39cdd7cfa2c84dbe0a89c13a011354619bdf99ed1151227b
4
+ data.tar.gz: 5b969ad0910739a3d4d0e67e03e28ff7d0e292b60df0dabf9e837fc3030c90f4
5
5
  SHA512:
6
- metadata.gz: 07da3548becfcd449bf53f4d056fbea0a7eadf9012f984dd7274a08805e41b51e6dbc287ddb3c48fa89ad9c5f6c50d1850fe1b6af2d91ea472c6230107857965
7
- data.tar.gz: a9f732055b79f3ae0985c2b7d2c6f6c4c42dd63923cae92bef16a5473f4631f6b43219ca5cc507a6c0fa6ec6459826cf9e887591aa6c5ca668225ee12c6f4434
6
+ metadata.gz: d8aaa747059a1deb309124fd69e180dc1b08789d361a5cd86a4bc6274361d6dcc90a4d5f51448f4ebb408ad865138be49d3b3dab1b90c85fa08b77590316b3df
7
+ data.tar.gz: 37673dc337b3bcbd127d434a03ba0e8c2c50577233546ccb05a234a3270fe1aa5718f116395086150a13977d4d703ec442d9cfe179aa21d245d770c46df6fab3
@@ -2,35 +2,29 @@ module Google
2
2
  module Cloud
3
3
  module Firestore
4
4
  class Query
5
- def find_one(&block)
6
- find_many(limit: 1, &block)[0]
7
- end
8
-
9
- def find_one!(&block)
10
- find_one(&block) || raise(ActiveRecord::RecordNotFound)
11
- end
12
-
13
- def find_many(limit: nil, &block)
5
+ def get_records(limit: nil)
14
6
  scope = limit ? limit(limit) : self
15
7
  scope.get.map do |data|
16
- model_lass = ActAsFireRecordBeta.class_mapping[query.from[0].collection_id]
17
- record = model_lass.to_instance(data)
18
- block.call(record) if block
19
- record
8
+ fire_record_class.to_instance(data)
20
9
  end
21
10
  end
22
11
 
23
12
  def destroy_all
24
- find_many.each(&:destroy)
13
+ doc_refs = get_records.map(&:doc_ref)
14
+ fire_record_class.delete_in_batch(doc_refs)
15
+ end
16
+
17
+ def first(limit = 1)
18
+ records = get_records(limit: limit)
19
+ limit == 1 ? records[0] : records
25
20
  end
26
21
 
27
22
  def exists?
28
- !!find_one
23
+ !!first
29
24
  end
30
25
 
31
- def first(limit = 1)
32
- records = find_many(limit: limit)
33
- limit == 1 ? records[0] : records
26
+ def fire_record_class
27
+ @_fire_record_class ||= ActAsFireRecordBeta.class_mapping[query.from[0].collection_id]
34
28
  end
35
29
  end
36
30
  end
@@ -1,3 +1,3 @@
1
1
  module ActAsFireRecordBeta
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.3"
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
 
@@ -43,8 +45,8 @@ module ActAsFireRecordBeta
43
45
  client.doc("#{collection_name_with_env}/#{id}")
44
46
  end
45
47
 
46
- def all(&block)
47
- col.find_many(&block)
48
+ def all
49
+ col.get_records
48
50
  end
49
51
 
50
52
  def find(id)
@@ -55,14 +57,14 @@ module ActAsFireRecordBeta
55
57
  end
56
58
 
57
59
  def find_by(param)
58
- raise ArgumentError, "param size should 1: #{param}" unless param.size == 1
60
+ raise ArgumentError, "param size should be 1: #{param}" unless param.size == 1
59
61
  field, value = param.to_a.flatten
60
62
 
61
- col.where(field, :==, value).limit(1).get do |data|
62
- return to_instance(data)
63
- end
63
+ where(field, :==, value).first
64
+ end
64
65
 
65
- nil
66
+ def find_by!(param)
67
+ find_by(param) || raise(ActiveRecord::RecordNotFound)
66
68
  end
67
69
 
68
70
  def where(field, operator, value)
@@ -74,7 +76,7 @@ module ActAsFireRecordBeta
74
76
  end
75
77
 
76
78
  def first(limit = 1)
77
- records = col.find_many(limit: limit)
79
+ records = col.get_records(limit: limit)
78
80
  limit == 1 ? records[0] : records
79
81
  end
80
82
 
@@ -91,7 +93,20 @@ module ActAsFireRecordBeta
91
93
  end
92
94
 
93
95
  def destroy_all
94
- col.list_documents.each(&:delete)
96
+ delete_in_batch(col.list_documents)
97
+ end
98
+
99
+ def delete_in_batch(doc_refs)
100
+ max_batch_size = 500
101
+ nested_doc_refs = doc_refs.each_slice(max_batch_size)
102
+ firestore = Google::Cloud::Firestore.new
103
+ nested_doc_refs.each do |doc_refs|
104
+ firestore.batch do |b|
105
+ doc_refs.each do |doc_ref|
106
+ b.delete(doc_ref)
107
+ end
108
+ end
109
+ end
95
110
  end
96
111
 
97
112
  def save_params(record)
@@ -107,7 +122,7 @@ module ActAsFireRecordBeta
107
122
  @_firestore_attributes.each do |key|
108
123
  params[key] = data[key]
109
124
  end
110
- new(params)
125
+ new(params).tap { |record| record.doc_ref = data }
111
126
  end
112
127
 
113
128
  private
@@ -165,6 +180,13 @@ module ActAsFireRecordBeta
165
180
  true
166
181
  end
167
182
 
183
+ # Override
184
+ def inspect
185
+ hash = attributes.transform_keys(&:to_sym)
186
+ hash_text = hash.to_s[1..-2]
187
+ "#<#{self.class} #{hash_text}>"
188
+ end
189
+
168
190
  private
169
191
 
170
192
  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.1
4
+ version: 0.0.3
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
@@ -69,14 +69,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
69
69
  requirements:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 2.6.0
72
+ version: 3.0.0
73
73
  required_rubygems_version: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - ">="
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