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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHENTICATION.md +1 -1
  3. data/CHANGELOG.md +55 -0
  4. data/lib/google-cloud-firestore.rb +15 -21
  5. data/lib/google/cloud/firestore.rb +12 -23
  6. data/lib/google/cloud/firestore/client.rb +12 -14
  7. data/lib/google/cloud/firestore/collection_reference.rb +1 -0
  8. data/lib/google/cloud/firestore/collection_reference_list.rb +137 -0
  9. data/lib/google/cloud/firestore/convert.rb +39 -39
  10. data/lib/google/cloud/firestore/credentials.rb +2 -2
  11. data/lib/google/cloud/firestore/document_listener.rb +86 -7
  12. data/lib/google/cloud/firestore/document_reference.rb +9 -10
  13. data/lib/google/cloud/firestore/document_reference/list.rb +2 -2
  14. data/lib/google/cloud/firestore/document_snapshot.rb +5 -6
  15. data/lib/google/cloud/firestore/query.rb +127 -34
  16. data/lib/google/cloud/firestore/query_listener.rb +82 -1
  17. data/lib/google/cloud/firestore/service.rb +63 -104
  18. data/lib/google/cloud/firestore/transaction.rb +2 -2
  19. data/lib/google/cloud/firestore/version.rb +1 -1
  20. data/lib/google/cloud/firestore/watch/inventory.rb +2 -0
  21. data/lib/google/cloud/firestore/watch/listener.rb +32 -25
  22. data/lib/google/cloud/firestore/watch/order.rb +1 -1
  23. metadata +9 -107
  24. data/lib/google/cloud/firestore/admin.rb +0 -144
  25. data/lib/google/cloud/firestore/admin/v1.rb +0 -151
  26. data/lib/google/cloud/firestore/admin/v1/credentials.rb +0 -44
  27. data/lib/google/cloud/firestore/admin/v1/doc/google/firestore/admin/v1/field.rb +0 -86
  28. data/lib/google/cloud/firestore/admin/v1/doc/google/firestore/admin/v1/firestore_admin.rb +0 -161
  29. data/lib/google/cloud/firestore/admin/v1/doc/google/firestore/admin/v1/index.rb +0 -142
  30. data/lib/google/cloud/firestore/admin/v1/doc/google/longrunning/operations.rb +0 -51
  31. data/lib/google/cloud/firestore/admin/v1/doc/google/protobuf/any.rb +0 -131
  32. data/lib/google/cloud/firestore/admin/v1/doc/google/protobuf/empty.rb +0 -29
  33. data/lib/google/cloud/firestore/admin/v1/doc/google/protobuf/field_mask.rb +0 -222
  34. data/lib/google/cloud/firestore/admin/v1/doc/google/rpc/status.rb +0 -39
  35. data/lib/google/cloud/firestore/admin/v1/firestore_admin_client.rb +0 -902
  36. data/lib/google/cloud/firestore/admin/v1/firestore_admin_client_config.json +0 -76
  37. data/lib/google/cloud/firestore/v1.rb +0 -152
  38. data/lib/google/cloud/firestore/v1/credentials.rb +0 -42
  39. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/common.rb +0 -64
  40. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/document.rb +0 -136
  41. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/firestore.rb +0 -566
  42. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/query.rb +0 -227
  43. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/write.rb +0 -241
  44. data/lib/google/cloud/firestore/v1/doc/google/protobuf/any.rb +0 -131
  45. data/lib/google/cloud/firestore/v1/doc/google/protobuf/empty.rb +0 -29
  46. data/lib/google/cloud/firestore/v1/doc/google/protobuf/timestamp.rb +0 -113
  47. data/lib/google/cloud/firestore/v1/doc/google/protobuf/wrappers.rb +0 -26
  48. data/lib/google/cloud/firestore/v1/doc/google/rpc/status.rb +0 -39
  49. data/lib/google/cloud/firestore/v1/firestore_client.rb +0 -1011
  50. data/lib/google/cloud/firestore/v1/firestore_client_config.json +0 -105
  51. data/lib/google/cloud/firestore/v1beta1.rb +0 -162
  52. data/lib/google/cloud/firestore/v1beta1/credentials.rb +0 -42
  53. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/common.rb +0 -64
  54. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/document.rb +0 -136
  55. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/firestore.rb +0 -564
  56. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/query.rb +0 -227
  57. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/write.rb +0 -237
  58. data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/any.rb +0 -131
  59. data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/empty.rb +0 -29
  60. data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/timestamp.rb +0 -113
  61. data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/wrappers.rb +0 -26
  62. data/lib/google/cloud/firestore/v1beta1/doc/google/rpc/status.rb +0 -39
  63. data/lib/google/cloud/firestore/v1beta1/firestore_client.rb +0 -1021
  64. data/lib/google/cloud/firestore/v1beta1/firestore_client_config.json +0 -100
  65. data/lib/google/firestore/admin/v1/field_pb.rb +0 -32
  66. data/lib/google/firestore/admin/v1/firestore_admin_pb.rb +0 -84
  67. data/lib/google/firestore/admin/v1/firestore_admin_services_pb.rb +0 -94
  68. data/lib/google/firestore/admin/v1/index_pb.rb +0 -58
  69. data/lib/google/firestore/admin/v1/location_pb.rb +0 -22
  70. data/lib/google/firestore/admin/v1/operation_pb.rb +0 -90
  71. data/lib/google/firestore/v1/common_pb.rb +0 -45
  72. data/lib/google/firestore/v1/document_pb.rb +0 -50
  73. data/lib/google/firestore/v1/firestore_pb.rb +0 -222
  74. data/lib/google/firestore/v1/firestore_services_pb.rb +0 -80
  75. data/lib/google/firestore/v1/query_pb.rb +0 -107
  76. data/lib/google/firestore/v1/write_pb.rb +0 -80
  77. data/lib/google/firestore/v1beta1/common_pb.rb +0 -45
  78. data/lib/google/firestore/v1beta1/document_pb.rb +0 -50
  79. data/lib/google/firestore/v1beta1/firestore_pb.rb +0 -222
  80. data/lib/google/firestore/v1beta1/firestore_services_pb.rb +0 -89
  81. data/lib/google/firestore/v1beta1/query_pb.rb +0 -107
  82. 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".freeze, "longitude".freeze]
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 a list of collections nested under the document snapshot.
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 list.
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
- return enum_for :cols unless block_given?
96
-
97
- collection_ids = service.list_collections path
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 == "".freeze
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