google-cloud-firestore 1.4.4 → 2.4.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 +4 -4
- data/AUTHENTICATION.md +1 -1
- data/CHANGELOG.md +55 -0
- data/lib/google-cloud-firestore.rb +15 -21
- data/lib/google/cloud/firestore.rb +12 -23
- data/lib/google/cloud/firestore/client.rb +12 -14
- data/lib/google/cloud/firestore/collection_reference.rb +1 -0
- data/lib/google/cloud/firestore/collection_reference_list.rb +137 -0
- data/lib/google/cloud/firestore/convert.rb +39 -39
- data/lib/google/cloud/firestore/credentials.rb +2 -2
- data/lib/google/cloud/firestore/document_listener.rb +86 -7
- data/lib/google/cloud/firestore/document_reference.rb +9 -10
- data/lib/google/cloud/firestore/document_reference/list.rb +2 -2
- data/lib/google/cloud/firestore/document_snapshot.rb +5 -6
- data/lib/google/cloud/firestore/query.rb +127 -34
- data/lib/google/cloud/firestore/query_listener.rb +82 -1
- data/lib/google/cloud/firestore/service.rb +63 -104
- data/lib/google/cloud/firestore/transaction.rb +2 -2
- data/lib/google/cloud/firestore/version.rb +1 -1
- data/lib/google/cloud/firestore/watch/inventory.rb +2 -0
- data/lib/google/cloud/firestore/watch/listener.rb +32 -25
- data/lib/google/cloud/firestore/watch/order.rb +1 -1
- metadata +9 -107
- data/lib/google/cloud/firestore/admin.rb +0 -144
- data/lib/google/cloud/firestore/admin/v1.rb +0 -151
- data/lib/google/cloud/firestore/admin/v1/credentials.rb +0 -44
- data/lib/google/cloud/firestore/admin/v1/doc/google/firestore/admin/v1/field.rb +0 -86
- data/lib/google/cloud/firestore/admin/v1/doc/google/firestore/admin/v1/firestore_admin.rb +0 -161
- data/lib/google/cloud/firestore/admin/v1/doc/google/firestore/admin/v1/index.rb +0 -142
- data/lib/google/cloud/firestore/admin/v1/doc/google/longrunning/operations.rb +0 -51
- data/lib/google/cloud/firestore/admin/v1/doc/google/protobuf/any.rb +0 -131
- data/lib/google/cloud/firestore/admin/v1/doc/google/protobuf/empty.rb +0 -29
- data/lib/google/cloud/firestore/admin/v1/doc/google/protobuf/field_mask.rb +0 -222
- data/lib/google/cloud/firestore/admin/v1/doc/google/rpc/status.rb +0 -39
- data/lib/google/cloud/firestore/admin/v1/firestore_admin_client.rb +0 -902
- data/lib/google/cloud/firestore/admin/v1/firestore_admin_client_config.json +0 -76
- data/lib/google/cloud/firestore/v1.rb +0 -152
- data/lib/google/cloud/firestore/v1/credentials.rb +0 -42
- data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/common.rb +0 -64
- data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/document.rb +0 -136
- data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/firestore.rb +0 -566
- data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/query.rb +0 -227
- data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/write.rb +0 -241
- data/lib/google/cloud/firestore/v1/doc/google/protobuf/any.rb +0 -131
- data/lib/google/cloud/firestore/v1/doc/google/protobuf/empty.rb +0 -29
- data/lib/google/cloud/firestore/v1/doc/google/protobuf/timestamp.rb +0 -113
- data/lib/google/cloud/firestore/v1/doc/google/protobuf/wrappers.rb +0 -26
- data/lib/google/cloud/firestore/v1/doc/google/rpc/status.rb +0 -39
- data/lib/google/cloud/firestore/v1/firestore_client.rb +0 -1011
- data/lib/google/cloud/firestore/v1/firestore_client_config.json +0 -105
- data/lib/google/cloud/firestore/v1beta1.rb +0 -162
- data/lib/google/cloud/firestore/v1beta1/credentials.rb +0 -42
- data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/common.rb +0 -64
- data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/document.rb +0 -136
- data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/firestore.rb +0 -564
- data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/query.rb +0 -227
- data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/write.rb +0 -237
- data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/any.rb +0 -131
- data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/empty.rb +0 -29
- data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/timestamp.rb +0 -113
- data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/wrappers.rb +0 -26
- data/lib/google/cloud/firestore/v1beta1/doc/google/rpc/status.rb +0 -39
- data/lib/google/cloud/firestore/v1beta1/firestore_client.rb +0 -1021
- data/lib/google/cloud/firestore/v1beta1/firestore_client_config.json +0 -100
- data/lib/google/firestore/admin/v1/field_pb.rb +0 -32
- data/lib/google/firestore/admin/v1/firestore_admin_pb.rb +0 -84
- data/lib/google/firestore/admin/v1/firestore_admin_services_pb.rb +0 -94
- data/lib/google/firestore/admin/v1/index_pb.rb +0 -58
- data/lib/google/firestore/admin/v1/location_pb.rb +0 -22
- data/lib/google/firestore/admin/v1/operation_pb.rb +0 -90
- data/lib/google/firestore/v1/common_pb.rb +0 -45
- data/lib/google/firestore/v1/document_pb.rb +0 -50
- data/lib/google/firestore/v1/firestore_pb.rb +0 -222
- data/lib/google/firestore/v1/firestore_services_pb.rb +0 -80
- data/lib/google/firestore/v1/query_pb.rb +0 -107
- data/lib/google/firestore/v1/write_pb.rb +0 -80
- data/lib/google/firestore/v1beta1/common_pb.rb +0 -45
- data/lib/google/firestore/v1beta1/document_pb.rb +0 -50
- data/lib/google/firestore/v1beta1/firestore_pb.rb +0 -222
- data/lib/google/firestore/v1beta1/firestore_services_pb.rb +0 -89
- data/lib/google/firestore/v1beta1/query_pb.rb +0 -107
- data/lib/google/firestore/v1beta1/write_pb.rb +0 -79
|
@@ -85,40 +85,40 @@ module Google
|
|
|
85
85
|
|
|
86
86
|
def raw_to_value obj
|
|
87
87
|
if NilClass === obj
|
|
88
|
-
Google::Firestore::V1::Value.new null_value: :NULL_VALUE
|
|
88
|
+
Google::Cloud::Firestore::V1::Value.new null_value: :NULL_VALUE
|
|
89
89
|
elsif TrueClass === obj || FalseClass === obj
|
|
90
|
-
Google::Firestore::V1::Value.new boolean_value: obj
|
|
90
|
+
Google::Cloud::Firestore::V1::Value.new boolean_value: obj
|
|
91
91
|
elsif Integer === obj
|
|
92
|
-
Google::Firestore::V1::Value.new integer_value: obj
|
|
92
|
+
Google::Cloud::Firestore::V1::Value.new integer_value: obj
|
|
93
93
|
elsif Numeric === obj # Any number not an integer is a double
|
|
94
|
-
Google::Firestore::V1::Value.new double_value: obj.to_f
|
|
94
|
+
Google::Cloud::Firestore::V1::Value.new double_value: obj.to_f
|
|
95
95
|
elsif Time === obj || DateTime === obj || Date === obj
|
|
96
|
-
Google::Firestore::V1::Value.new \
|
|
96
|
+
Google::Cloud::Firestore::V1::Value.new \
|
|
97
97
|
timestamp_value: time_to_timestamp(obj.to_time)
|
|
98
98
|
elsif String === obj || Symbol === obj
|
|
99
|
-
Google::Firestore::V1::Value.new string_value: obj.to_s
|
|
99
|
+
Google::Cloud::Firestore::V1::Value.new string_value: obj.to_s
|
|
100
100
|
elsif Google::Cloud::Firestore::DocumentReference === obj
|
|
101
|
-
Google::Firestore::V1::Value.new reference_value: obj.path
|
|
101
|
+
Google::Cloud::Firestore::V1::Value.new reference_value: obj.path
|
|
102
102
|
elsif Array === obj
|
|
103
103
|
values = obj.map { |o| raw_to_value(o) }
|
|
104
|
-
Google::Firestore::V1::Value.new(array_value:
|
|
105
|
-
Google::Firestore::V1::ArrayValue.new(values: values))
|
|
104
|
+
Google::Cloud::Firestore::V1::Value.new(array_value:
|
|
105
|
+
Google::Cloud::Firestore::V1::ArrayValue.new(values: values))
|
|
106
106
|
elsif Hash === obj
|
|
107
107
|
# keys have been changed to strings before the hash gets here
|
|
108
108
|
geo_pairs = hash_is_geo_point? obj
|
|
109
109
|
if geo_pairs
|
|
110
|
-
Google::Firestore::V1::Value.new(
|
|
110
|
+
Google::Cloud::Firestore::V1::Value.new(
|
|
111
111
|
geo_point_value: hash_to_geo_point(obj, geo_pairs)
|
|
112
112
|
)
|
|
113
113
|
else
|
|
114
114
|
fields = hash_to_fields obj
|
|
115
|
-
Google::Firestore::V1::Value.new(map_value:
|
|
116
|
-
Google::Firestore::V1::MapValue.new(fields: fields))
|
|
115
|
+
Google::Cloud::Firestore::V1::Value.new(map_value:
|
|
116
|
+
Google::Cloud::Firestore::V1::MapValue.new(fields: fields))
|
|
117
117
|
end
|
|
118
118
|
elsif obj.respond_to?(:read) && obj.respond_to?(:rewind)
|
|
119
119
|
obj.rewind
|
|
120
120
|
content = obj.read.force_encoding "ASCII-8BIT"
|
|
121
|
-
Google::Firestore::V1::Value.new bytes_value: content
|
|
121
|
+
Google::Cloud::Firestore::V1::Value.new bytes_value: content
|
|
122
122
|
else
|
|
123
123
|
raise ArgumentError,
|
|
124
124
|
"A value of type #{obj.class} is not supported."
|
|
@@ -129,7 +129,7 @@ module Google
|
|
|
129
129
|
return false unless hash.keys.count == 2
|
|
130
130
|
|
|
131
131
|
pairs = hash.map { |k, v| [String(k), v] }.sort
|
|
132
|
-
if pairs.map(&:first) == ["latitude"
|
|
132
|
+
if pairs.map(&:first) == ["latitude", "longitude"]
|
|
133
133
|
pairs
|
|
134
134
|
end
|
|
135
135
|
end
|
|
@@ -156,11 +156,11 @@ module Google
|
|
|
156
156
|
data, field_paths_and_values = remove_field_value_from data
|
|
157
157
|
|
|
158
158
|
if data.any? || field_paths_and_values.empty?
|
|
159
|
-
write = Google::Firestore::V1::Write.new(
|
|
160
|
-
update: Google::Firestore::V1::Document.new(
|
|
159
|
+
write = Google::Cloud::Firestore::V1::Write.new(
|
|
160
|
+
update: Google::Cloud::Firestore::V1::Document.new(
|
|
161
161
|
name: doc_path,
|
|
162
162
|
fields: hash_to_fields(data)),
|
|
163
|
-
current_document: Google::Firestore::V1::Precondition.new(
|
|
163
|
+
current_document: Google::Cloud::Firestore::V1::Precondition.new(
|
|
164
164
|
exists: false)
|
|
165
165
|
)
|
|
166
166
|
writes << write
|
|
@@ -171,7 +171,7 @@ module Google
|
|
|
171
171
|
|
|
172
172
|
if data.empty?
|
|
173
173
|
transform_write.current_document = \
|
|
174
|
-
Google::Firestore::V1::Precondition.new(exists: false)
|
|
174
|
+
Google::Cloud::Firestore::V1::Precondition.new(exists: false)
|
|
175
175
|
end
|
|
176
176
|
|
|
177
177
|
writes << transform_write
|
|
@@ -207,8 +207,8 @@ module Google
|
|
|
207
207
|
|
|
208
208
|
data, field_paths_and_values = remove_field_value_from data
|
|
209
209
|
|
|
210
|
-
writes << Google::Firestore::V1::Write.new(
|
|
211
|
-
update: Google::Firestore::V1::Document.new(
|
|
210
|
+
writes << Google::Cloud::Firestore::V1::Write.new(
|
|
211
|
+
update: Google::Cloud::Firestore::V1::Document.new(
|
|
212
212
|
name: doc_path,
|
|
213
213
|
fields: hash_to_fields(data))
|
|
214
214
|
)
|
|
@@ -278,11 +278,11 @@ module Google
|
|
|
278
278
|
end
|
|
279
279
|
|
|
280
280
|
if data.any? || field_paths.any? || (allow_empty && field_paths_and_values.empty?)
|
|
281
|
-
writes << Google::Firestore::V1::Write.new(
|
|
282
|
-
update: Google::Firestore::V1::Document.new(
|
|
281
|
+
writes << Google::Cloud::Firestore::V1::Write.new(
|
|
282
|
+
update: Google::Cloud::Firestore::V1::Document.new(
|
|
283
283
|
name: doc_path,
|
|
284
284
|
fields: hash_to_fields(data)),
|
|
285
|
-
update_mask: Google::Firestore::V1::DocumentMask.new(
|
|
285
|
+
update_mask: Google::Cloud::Firestore::V1::DocumentMask.new(
|
|
286
286
|
field_paths: field_paths.map(&:formatted_string).sort)
|
|
287
287
|
)
|
|
288
288
|
end
|
|
@@ -339,18 +339,18 @@ module Google
|
|
|
339
339
|
end
|
|
340
340
|
|
|
341
341
|
if data.any? || delete_paths.any?
|
|
342
|
-
write = Google::Firestore::V1::Write.new(
|
|
343
|
-
update: Google::Firestore::V1::Document.new(
|
|
342
|
+
write = Google::Cloud::Firestore::V1::Write.new(
|
|
343
|
+
update: Google::Cloud::Firestore::V1::Document.new(
|
|
344
344
|
name: doc_path,
|
|
345
345
|
fields: hash_to_fields(data)),
|
|
346
|
-
update_mask: Google::Firestore::V1::DocumentMask.new(
|
|
346
|
+
update_mask: Google::Cloud::Firestore::V1::DocumentMask.new(
|
|
347
347
|
field_paths: (field_paths).map(&:formatted_string).sort),
|
|
348
|
-
current_document: Google::Firestore::V1::Precondition.new(
|
|
348
|
+
current_document: Google::Cloud::Firestore::V1::Precondition.new(
|
|
349
349
|
exists: true)
|
|
350
350
|
)
|
|
351
351
|
if update_time
|
|
352
352
|
write.current_document = \
|
|
353
|
-
Google::Firestore::V1::Precondition.new(
|
|
353
|
+
Google::Cloud::Firestore::V1::Precondition.new(
|
|
354
354
|
update_time: time_to_timestamp(update_time))
|
|
355
355
|
end
|
|
356
356
|
writes << write
|
|
@@ -360,7 +360,7 @@ module Google
|
|
|
360
360
|
transform_write = transform_write doc_path, field_paths_and_values
|
|
361
361
|
if data.empty?
|
|
362
362
|
transform_write.current_document = \
|
|
363
|
-
Google::Firestore::V1::Precondition.new(exists: true)
|
|
363
|
+
Google::Cloud::Firestore::V1::Precondition.new(exists: true)
|
|
364
364
|
end
|
|
365
365
|
writes << transform_write
|
|
366
366
|
end
|
|
@@ -373,13 +373,13 @@ module Google
|
|
|
373
373
|
raise ArgumentError, "cannot specify both exists and update_time"
|
|
374
374
|
end
|
|
375
375
|
|
|
376
|
-
write = Google::Firestore::V1::Write.new(
|
|
376
|
+
write = Google::Cloud::Firestore::V1::Write.new(
|
|
377
377
|
delete: doc_path
|
|
378
378
|
)
|
|
379
379
|
|
|
380
380
|
unless exists.nil? && update_time.nil?
|
|
381
381
|
write.current_document = \
|
|
382
|
-
Google::Firestore::V1::Precondition.new({
|
|
382
|
+
Google::Cloud::Firestore::V1::Precondition.new({
|
|
383
383
|
exists: exists, update_time: time_to_timestamp(update_time)
|
|
384
384
|
}.delete_if { |_, v| v.nil? })
|
|
385
385
|
end
|
|
@@ -584,8 +584,8 @@ module Google
|
|
|
584
584
|
to_field_transform field_path, field_value
|
|
585
585
|
end
|
|
586
586
|
|
|
587
|
-
Google::Firestore::V1::Write.new(
|
|
588
|
-
transform: Google::Firestore::V1::DocumentTransform.new(
|
|
587
|
+
Google::Cloud::Firestore::V1::Write.new(
|
|
588
|
+
transform: Google::Cloud::Firestore::V1::DocumentTransform.new(
|
|
589
589
|
document: doc_path,
|
|
590
590
|
field_transforms: field_transforms
|
|
591
591
|
)
|
|
@@ -594,32 +594,32 @@ module Google
|
|
|
594
594
|
|
|
595
595
|
def to_field_transform field_path, field_value
|
|
596
596
|
if field_value.type == :server_time
|
|
597
|
-
Google::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
597
|
+
Google::Cloud::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
598
598
|
field_path: field_path.formatted_string,
|
|
599
599
|
set_to_server_value: :REQUEST_TIME
|
|
600
600
|
)
|
|
601
601
|
elsif field_value.type == :array_union
|
|
602
|
-
Google::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
602
|
+
Google::Cloud::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
603
603
|
field_path: field_path.formatted_string,
|
|
604
604
|
append_missing_elements: raw_to_value(Array(field_value.value)).array_value
|
|
605
605
|
)
|
|
606
606
|
elsif field_value.type == :array_delete
|
|
607
|
-
Google::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
607
|
+
Google::Cloud::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
608
608
|
field_path: field_path.formatted_string,
|
|
609
609
|
remove_all_from_array: raw_to_value(Array(field_value.value)).array_value
|
|
610
610
|
)
|
|
611
611
|
elsif field_value.type == :increment
|
|
612
|
-
Google::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
612
|
+
Google::Cloud::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
613
613
|
field_path: field_path.formatted_string,
|
|
614
614
|
increment: raw_to_value(field_value.value)
|
|
615
615
|
)
|
|
616
616
|
elsif field_value.type == :maximum
|
|
617
|
-
Google::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
617
|
+
Google::Cloud::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
618
618
|
field_path: field_path.formatted_string,
|
|
619
619
|
maximum: raw_to_value(field_value.value)
|
|
620
620
|
)
|
|
621
621
|
elsif field_value.type == :minimum
|
|
622
|
-
Google::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
622
|
+
Google::Cloud::Firestore::V1::DocumentTransform::FieldTransform.new(
|
|
623
623
|
field_path: field_path.formatted_string,
|
|
624
624
|
minimum: raw_to_value(field_value.value)
|
|
625
625
|
)
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
require "google/cloud/firestore/v1/credentials"
|
|
16
|
+
require "google/cloud/firestore/v1/firestore/credentials"
|
|
17
17
|
|
|
18
18
|
module Google
|
|
19
19
|
module Cloud
|
|
@@ -37,7 +37,7 @@ module Google
|
|
|
37
37
|
#
|
|
38
38
|
# firestore.project_id #=> "my-project"
|
|
39
39
|
#
|
|
40
|
-
class Credentials < Google::Cloud::Firestore::V1::Credentials
|
|
40
|
+
class Credentials < Google::Cloud::Firestore::V1::Firestore::Credentials
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
end
|
|
@@ -14,11 +14,14 @@
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
require "google/cloud/firestore/watch/listener"
|
|
17
|
+
require "monitor"
|
|
17
18
|
|
|
18
19
|
module Google
|
|
19
20
|
module Cloud
|
|
20
21
|
module Firestore
|
|
21
22
|
##
|
|
23
|
+
# # DocumentListener
|
|
24
|
+
#
|
|
22
25
|
# An ongoing listen operation on a document reference. This is returned by
|
|
23
26
|
# calling {DocumentReference#listen}.
|
|
24
27
|
#
|
|
@@ -31,25 +34,28 @@ module Google
|
|
|
31
34
|
# nyc_ref = firestore.doc "cities/NYC"
|
|
32
35
|
#
|
|
33
36
|
# listener = nyc_ref.listen do |snapshot|
|
|
34
|
-
# puts "The population of #{snapshot[:name]} "
|
|
35
|
-
# puts "is #{snapshot[:population]}."
|
|
37
|
+
# puts "The population of #{snapshot[:name]} is #{snapshot[:population]}."
|
|
36
38
|
# end
|
|
37
39
|
#
|
|
38
40
|
# # When ready, stop the listen operation and close the stream.
|
|
39
41
|
# listener.stop
|
|
40
42
|
#
|
|
41
43
|
class DocumentListener
|
|
44
|
+
include MonitorMixin
|
|
42
45
|
##
|
|
43
46
|
# @private
|
|
44
47
|
# Creates the watch stream and listener object.
|
|
45
48
|
def initialize doc_ref, &callback
|
|
49
|
+
super() # to init MonitorMixin
|
|
50
|
+
|
|
46
51
|
@doc_ref = doc_ref
|
|
47
52
|
raise ArgumentError if @doc_ref.nil?
|
|
48
53
|
|
|
49
54
|
@callback = callback
|
|
50
55
|
raise ArgumentError if @callback.nil?
|
|
56
|
+
@error_callbacks = []
|
|
51
57
|
|
|
52
|
-
@listener = Watch::Listener.for_doc_ref doc_ref do |query_snp|
|
|
58
|
+
@listener = Watch::Listener.for_doc_ref self, doc_ref do |query_snp|
|
|
53
59
|
doc_snp = query_snp.docs.find { |doc| doc.path == @doc_ref.path }
|
|
54
60
|
|
|
55
61
|
if doc_snp.nil?
|
|
@@ -80,8 +86,7 @@ module Google
|
|
|
80
86
|
# nyc_ref = firestore.doc "cities/NYC"
|
|
81
87
|
#
|
|
82
88
|
# listener = nyc_ref.listen do |snapshot|
|
|
83
|
-
# puts "The population of #{snapshot[:name]} "
|
|
84
|
-
# puts "is #{snapshot[:population]}."
|
|
89
|
+
# puts "The population of #{snapshot[:name]} is #{snapshot[:population]}."
|
|
85
90
|
# end
|
|
86
91
|
#
|
|
87
92
|
# # When ready, stop the listen operation and close the stream.
|
|
@@ -103,8 +108,7 @@ module Google
|
|
|
103
108
|
# nyc_ref = firestore.doc "cities/NYC"
|
|
104
109
|
#
|
|
105
110
|
# listener = nyc_ref.listen do |snapshot|
|
|
106
|
-
# puts "The population of #{snapshot[:name]} "
|
|
107
|
-
# puts "is #{snapshot[:population]}."
|
|
111
|
+
# puts "The population of #{snapshot[:name]} is #{snapshot[:population]}."
|
|
108
112
|
# end
|
|
109
113
|
#
|
|
110
114
|
# # Checks if the listener is stopped.
|
|
@@ -119,6 +123,81 @@ module Google
|
|
|
119
123
|
def stopped?
|
|
120
124
|
@listener.stopped?
|
|
121
125
|
end
|
|
126
|
+
|
|
127
|
+
##
|
|
128
|
+
# Register to be notified of errors when raised.
|
|
129
|
+
#
|
|
130
|
+
# If an unhandled error has occurred the listener will attempt to
|
|
131
|
+
# recover from the error and resume listening.
|
|
132
|
+
#
|
|
133
|
+
# Multiple error handlers can be added.
|
|
134
|
+
#
|
|
135
|
+
# @yield [callback] The block to be called when an error is raised.
|
|
136
|
+
# @yieldparam [Exception] error The error raised.
|
|
137
|
+
#
|
|
138
|
+
# @example
|
|
139
|
+
# require "google/cloud/firestore"
|
|
140
|
+
#
|
|
141
|
+
# firestore = Google::Cloud::Firestore.new
|
|
142
|
+
#
|
|
143
|
+
# # Get a document reference
|
|
144
|
+
# nyc_ref = firestore.doc "cities/NYC"
|
|
145
|
+
#
|
|
146
|
+
# listener = nyc_ref.listen do |snapshot|
|
|
147
|
+
# puts "The population of #{snapshot[:name]} is #{snapshot[:population]}."
|
|
148
|
+
# end
|
|
149
|
+
#
|
|
150
|
+
# # Register to be notified when unhandled errors occur.
|
|
151
|
+
# listener.on_error do |error|
|
|
152
|
+
# puts error
|
|
153
|
+
# end
|
|
154
|
+
#
|
|
155
|
+
# # When ready, stop the listen operation and close the stream.
|
|
156
|
+
# listener.stop
|
|
157
|
+
#
|
|
158
|
+
def on_error &block
|
|
159
|
+
raise ArgumentError, "on_error must be called with a block" unless block_given?
|
|
160
|
+
synchronize { @error_callbacks << block }
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
##
|
|
164
|
+
# The most recent unhandled error to occur while listening for changes.
|
|
165
|
+
#
|
|
166
|
+
# If an unhandled error has occurred the listener will attempt to
|
|
167
|
+
# recover from the error and resume listening.
|
|
168
|
+
#
|
|
169
|
+
# @return [Exception, nil] error The most recent error raised.
|
|
170
|
+
#
|
|
171
|
+
# @example
|
|
172
|
+
# require "google/cloud/firestore"
|
|
173
|
+
#
|
|
174
|
+
# firestore = Google::Cloud::Firestore.new
|
|
175
|
+
#
|
|
176
|
+
# # Get a document reference
|
|
177
|
+
# nyc_ref = firestore.doc "cities/NYC"
|
|
178
|
+
#
|
|
179
|
+
# listener = nyc_ref.listen do |snapshot|
|
|
180
|
+
# puts "The population of #{snapshot[:name]} is #{snapshot[:population]}."
|
|
181
|
+
# end
|
|
182
|
+
#
|
|
183
|
+
# # If an error was raised, it can be retrieved here:
|
|
184
|
+
# listener.last_error #=> nil
|
|
185
|
+
#
|
|
186
|
+
# # When ready, stop the listen operation and close the stream.
|
|
187
|
+
# listener.stop
|
|
188
|
+
#
|
|
189
|
+
def last_error
|
|
190
|
+
synchronize { @last_error }
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# @private Pass the error to user-provided error callbacks.
|
|
194
|
+
def error! error
|
|
195
|
+
error_callbacks = synchronize do
|
|
196
|
+
@last_error = error
|
|
197
|
+
@error_callbacks.dup
|
|
198
|
+
end
|
|
199
|
+
error_callbacks.each { |error_callback| error_callback.call error }
|
|
200
|
+
end
|
|
122
201
|
end
|
|
123
202
|
end
|
|
124
203
|
end
|
|
@@ -70,12 +70,13 @@ module Google
|
|
|
70
70
|
# @!group Access
|
|
71
71
|
|
|
72
72
|
##
|
|
73
|
-
# Retrieves
|
|
73
|
+
# Retrieves an enumerator for the collections nested under the document snapshot.
|
|
74
74
|
#
|
|
75
75
|
# @yield [collections] The block for accessing the collections.
|
|
76
|
-
# @yieldparam [CollectionReference] collection A collection.
|
|
76
|
+
# @yieldparam [CollectionReference] collection A collection reference object.
|
|
77
77
|
#
|
|
78
|
-
# @return [Enumerator<CollectionReference>] collection
|
|
78
|
+
# @return [Enumerator<CollectionReference>] An enumerator of collection references. If a block is provided, this
|
|
79
|
+
# is the same enumerator that is accessed through the block.
|
|
79
80
|
#
|
|
80
81
|
# @example
|
|
81
82
|
# require "google/cloud/firestore"
|
|
@@ -91,11 +92,10 @@ module Google
|
|
|
91
92
|
#
|
|
92
93
|
def cols
|
|
93
94
|
ensure_service!
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
collection_ids.each { |collection_id| yield col collection_id }
|
|
95
|
+
grpc = service.list_collections path
|
|
96
|
+
cols_enum = CollectionReferenceList.from_grpc(grpc, client, path).all
|
|
97
|
+
cols_enum.each { |c| yield c } if block_given?
|
|
98
|
+
cols_enum
|
|
99
99
|
end
|
|
100
100
|
alias collections cols
|
|
101
101
|
alias list_collections cols
|
|
@@ -168,8 +168,7 @@ module Google
|
|
|
168
168
|
# nyc_ref = firestore.doc "cities/NYC"
|
|
169
169
|
#
|
|
170
170
|
# listener = nyc_ref.listen do |snapshot|
|
|
171
|
-
# puts "The population of #{snapshot[:name]} "
|
|
172
|
-
# puts "is #{snapshot[:population]}."
|
|
171
|
+
# puts "The population of #{snapshot[:name]} is #{snapshot[:population]}."
|
|
173
172
|
# end
|
|
174
173
|
#
|
|
175
174
|
# # When ready, stop the listen operation and close the stream.
|
|
@@ -162,7 +162,7 @@ module Google
|
|
|
162
162
|
|
|
163
163
|
##
|
|
164
164
|
# @private New DocumentReference::List from a
|
|
165
|
-
# Google::Firestore::V1::ListDocumentsResponse object.
|
|
165
|
+
# Google::Cloud::Firestore::V1::ListDocumentsResponse object.
|
|
166
166
|
def self.from_grpc grpc, client, parent, collection_id, max = nil
|
|
167
167
|
documents = List.new(Array(grpc.documents).map do |document|
|
|
168
168
|
DocumentReference.from_path document.name, client
|
|
@@ -170,7 +170,7 @@ module Google
|
|
|
170
170
|
documents.instance_variable_set :@parent, parent
|
|
171
171
|
documents.instance_variable_set :@collection_id, collection_id
|
|
172
172
|
token = grpc.next_page_token
|
|
173
|
-
token = nil if token == ""
|
|
173
|
+
token = nil if token == ""
|
|
174
174
|
documents.instance_variable_set :@token, token
|
|
175
175
|
documents.instance_variable_set :@client, client
|
|
176
176
|
documents.instance_variable_set :@max, max
|
|
@@ -53,8 +53,7 @@ module Google
|
|
|
53
53
|
# nyc_ref = firestore.doc "cities/NYC"
|
|
54
54
|
#
|
|
55
55
|
# listener = nyc_ref.listen do |snapshot|
|
|
56
|
-
# puts "The population of #{snapshot[:name]} "
|
|
57
|
-
# puts "is #{snapshot[:population]}."
|
|
56
|
+
# puts "The population of #{snapshot[:name]} is #{snapshot[:population]}."
|
|
58
57
|
# end
|
|
59
58
|
#
|
|
60
59
|
# # When ready, stop the listen operation and close the stream.
|
|
@@ -62,7 +61,7 @@ module Google
|
|
|
62
61
|
#
|
|
63
62
|
class DocumentSnapshot
|
|
64
63
|
##
|
|
65
|
-
# @private The Google::Firestore::V1::Document object.
|
|
64
|
+
# @private The Google::Cloud::Firestore::V1::Document object.
|
|
66
65
|
attr_accessor :grpc
|
|
67
66
|
|
|
68
67
|
##
|
|
@@ -345,7 +344,7 @@ module Google
|
|
|
345
344
|
|
|
346
345
|
##
|
|
347
346
|
# @private New DocumentSnapshot from a
|
|
348
|
-
# Google::Firestore::V1::RunQueryResponse object.
|
|
347
|
+
# Google::Cloud::Firestore::V1::RunQueryResponse object.
|
|
349
348
|
def self.from_query_result result, client
|
|
350
349
|
ref = DocumentReference.from_path result.document.name, client
|
|
351
350
|
read_at = Convert.timestamp_to_time result.read_time
|
|
@@ -359,7 +358,7 @@ module Google
|
|
|
359
358
|
|
|
360
359
|
##
|
|
361
360
|
# @private New DocumentSnapshot from a
|
|
362
|
-
# Google::Firestore::V1::DocumentChange object.
|
|
361
|
+
# Google::Cloud::Firestore::V1::DocumentChange object.
|
|
363
362
|
def self.from_document document, client, read_at: nil
|
|
364
363
|
ref = DocumentReference.from_path document.name, client
|
|
365
364
|
|
|
@@ -372,7 +371,7 @@ module Google
|
|
|
372
371
|
|
|
373
372
|
##
|
|
374
373
|
# @private New DocumentSnapshot from a
|
|
375
|
-
# Google::Firestore::V1::BatchGetDocumentsResponse object.
|
|
374
|
+
# Google::Cloud::Firestore::V1::BatchGetDocumentsResponse object.
|
|
376
375
|
def self.from_batch_result result, client
|
|
377
376
|
ref = nil
|
|
378
377
|
grpc = nil
|