google-cloud-firestore 1.4.0 → 2.0.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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHENTICATION.md +1 -1
  3. data/CHANGELOG.md +47 -0
  4. data/TROUBLESHOOTING.md +2 -8
  5. data/lib/google-cloud-firestore.rb +14 -21
  6. data/lib/google/cloud/firestore.rb +12 -23
  7. data/lib/google/cloud/firestore/client.rb +12 -14
  8. data/lib/google/cloud/firestore/collection_reference.rb +1 -0
  9. data/lib/google/cloud/firestore/collection_reference_list.rb +137 -0
  10. data/lib/google/cloud/firestore/convert.rb +39 -39
  11. data/lib/google/cloud/firestore/credentials.rb +2 -2
  12. data/lib/google/cloud/firestore/document_reference.rb +8 -8
  13. data/lib/google/cloud/firestore/document_reference/list.rb +2 -2
  14. data/lib/google/cloud/firestore/document_snapshot.rb +4 -4
  15. data/lib/google/cloud/firestore/query.rb +4 -4
  16. data/lib/google/cloud/firestore/service.rb +71 -106
  17. data/lib/google/cloud/firestore/transaction.rb +2 -2
  18. data/lib/google/cloud/firestore/version.rb +1 -1
  19. data/lib/google/cloud/firestore/watch/listener.rb +9 -9
  20. data/lib/google/cloud/firestore/watch/order.rb +1 -1
  21. metadata +11 -109
  22. data/lib/google/cloud/firestore/admin.rb +0 -144
  23. data/lib/google/cloud/firestore/admin/v1.rb +0 -151
  24. data/lib/google/cloud/firestore/admin/v1/credentials.rb +0 -44
  25. data/lib/google/cloud/firestore/admin/v1/doc/google/firestore/admin/v1/field.rb +0 -86
  26. data/lib/google/cloud/firestore/admin/v1/doc/google/firestore/admin/v1/firestore_admin.rb +0 -161
  27. data/lib/google/cloud/firestore/admin/v1/doc/google/firestore/admin/v1/index.rb +0 -142
  28. data/lib/google/cloud/firestore/admin/v1/doc/google/longrunning/operations.rb +0 -51
  29. data/lib/google/cloud/firestore/admin/v1/doc/google/protobuf/any.rb +0 -131
  30. data/lib/google/cloud/firestore/admin/v1/doc/google/protobuf/empty.rb +0 -29
  31. data/lib/google/cloud/firestore/admin/v1/doc/google/protobuf/field_mask.rb +0 -222
  32. data/lib/google/cloud/firestore/admin/v1/doc/google/rpc/status.rb +0 -39
  33. data/lib/google/cloud/firestore/admin/v1/firestore_admin_client.rb +0 -764
  34. data/lib/google/cloud/firestore/admin/v1/firestore_admin_client_config.json +0 -72
  35. data/lib/google/cloud/firestore/v1.rb +0 -152
  36. data/lib/google/cloud/firestore/v1/credentials.rb +0 -42
  37. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/common.rb +0 -64
  38. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/document.rb +0 -136
  39. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/firestore.rb +0 -566
  40. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/query.rb +0 -227
  41. data/lib/google/cloud/firestore/v1/doc/google/firestore/v1/write.rb +0 -241
  42. data/lib/google/cloud/firestore/v1/doc/google/protobuf/any.rb +0 -131
  43. data/lib/google/cloud/firestore/v1/doc/google/protobuf/empty.rb +0 -29
  44. data/lib/google/cloud/firestore/v1/doc/google/protobuf/timestamp.rb +0 -113
  45. data/lib/google/cloud/firestore/v1/doc/google/protobuf/wrappers.rb +0 -26
  46. data/lib/google/cloud/firestore/v1/doc/google/rpc/status.rb +0 -39
  47. data/lib/google/cloud/firestore/v1/firestore_client.rb +0 -1073
  48. data/lib/google/cloud/firestore/v1/firestore_client_config.json +0 -101
  49. data/lib/google/cloud/firestore/v1beta1.rb +0 -160
  50. data/lib/google/cloud/firestore/v1beta1/credentials.rb +0 -42
  51. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/common.rb +0 -64
  52. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/document.rb +0 -136
  53. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/firestore.rb +0 -564
  54. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/query.rb +0 -227
  55. data/lib/google/cloud/firestore/v1beta1/doc/google/firestore/v1beta1/write.rb +0 -237
  56. data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/any.rb +0 -131
  57. data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/empty.rb +0 -29
  58. data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/timestamp.rb +0 -113
  59. data/lib/google/cloud/firestore/v1beta1/doc/google/protobuf/wrappers.rb +0 -26
  60. data/lib/google/cloud/firestore/v1beta1/doc/google/rpc/status.rb +0 -39
  61. data/lib/google/cloud/firestore/v1beta1/firestore_client.rb +0 -1081
  62. data/lib/google/cloud/firestore/v1beta1/firestore_client_config.json +0 -100
  63. data/lib/google/firestore/admin/v1/field_pb.rb +0 -32
  64. data/lib/google/firestore/admin/v1/firestore_admin_pb.rb +0 -84
  65. data/lib/google/firestore/admin/v1/firestore_admin_services_pb.rb +0 -94
  66. data/lib/google/firestore/admin/v1/index_pb.rb +0 -58
  67. data/lib/google/firestore/admin/v1/location_pb.rb +0 -22
  68. data/lib/google/firestore/admin/v1/operation_pb.rb +0 -90
  69. data/lib/google/firestore/v1/common_pb.rb +0 -45
  70. data/lib/google/firestore/v1/document_pb.rb +0 -50
  71. data/lib/google/firestore/v1/firestore_pb.rb +0 -222
  72. data/lib/google/firestore/v1/firestore_services_pb.rb +0 -80
  73. data/lib/google/firestore/v1/query_pb.rb +0 -107
  74. data/lib/google/firestore/v1/write_pb.rb +0 -80
  75. data/lib/google/firestore/v1beta1/common_pb.rb +0 -45
  76. data/lib/google/firestore/v1beta1/document_pb.rb +0 -50
  77. data/lib/google/firestore/v1beta1/firestore_pb.rb +0 -222
  78. data/lib/google/firestore/v1beta1/firestore_services_pb.rb +0 -89
  79. data/lib/google/firestore/v1beta1/query_pb.rb +0 -107
  80. 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
@@ -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
@@ -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
@@ -62,7 +62,7 @@ module Google
62
62
  #
63
63
  class DocumentSnapshot
64
64
  ##
65
- # @private The Google::Firestore::V1::Document object.
65
+ # @private The Google::Cloud::Firestore::V1::Document object.
66
66
  attr_accessor :grpc
67
67
 
68
68
  ##
@@ -345,7 +345,7 @@ module Google
345
345
 
346
346
  ##
347
347
  # @private New DocumentSnapshot from a
348
- # Google::Firestore::V1::RunQueryResponse object.
348
+ # Google::Cloud::Firestore::V1::RunQueryResponse object.
349
349
  def self.from_query_result result, client
350
350
  ref = DocumentReference.from_path result.document.name, client
351
351
  read_at = Convert.timestamp_to_time result.read_time
@@ -359,7 +359,7 @@ module Google
359
359
 
360
360
  ##
361
361
  # @private New DocumentSnapshot from a
362
- # Google::Firestore::V1::DocumentChange object.
362
+ # Google::Cloud::Firestore::V1::DocumentChange object.
363
363
  def self.from_document document, client, read_at: nil
364
364
  ref = DocumentReference.from_path document.name, client
365
365
 
@@ -372,7 +372,7 @@ module Google
372
372
 
373
373
  ##
374
374
  # @private New DocumentSnapshot from a
375
- # Google::Firestore::V1::BatchGetDocumentsResponse object.
375
+ # Google::Cloud::Firestore::V1::BatchGetDocumentsResponse object.
376
376
  def self.from_batch_result result, client
377
377
  ref = nil
378
378
  grpc = nil
@@ -63,7 +63,7 @@ module Google
63
63
  attr_accessor :parent_path
64
64
 
65
65
  ##
66
- # @private The Google::Firestore::V1::StructuredQuery object.
66
+ # @private The Google::Cloud::Firestore::V1::StructuredQuery object.
67
67
  attr_accessor :query
68
68
 
69
69
  ##
@@ -883,7 +883,7 @@ module Google
883
883
 
884
884
  ##
885
885
  # @private
886
- StructuredQuery = Google::Firestore::V1::StructuredQuery
886
+ StructuredQuery = Google::Cloud::Firestore::V1::StructuredQuery
887
887
 
888
888
  ##
889
889
  # @private
@@ -987,7 +987,7 @@ module Google
987
987
  end
988
988
 
989
989
  def order_direction direction
990
- return :DESCENDING if direction.to_s.downcase.start_with? "d".freeze
990
+ return :DESCENDING if direction.to_s.downcase.start_with? "d"
991
991
  :ASCENDING
992
992
  end
993
993
 
@@ -1014,7 +1014,7 @@ module Google
1014
1014
  Convert.raw_to_value value
1015
1015
  end
1016
1016
 
1017
- Google::Firestore::V1::Cursor.new values: values
1017
+ Google::Cloud::Firestore::V1::Cursor.new values: values
1018
1018
  end
1019
1019
 
1020
1020
  def snapshot_to_cursor snapshot, query
@@ -26,63 +26,42 @@ module Google
26
26
  # @private Represents the gRPC Firestore service, including all the API
27
27
  # methods.
28
28
  class Service
29
- attr_accessor :project, :credentials, :timeout, :client_config, :host
29
+ attr_accessor :project, :credentials, :timeout, :host
30
30
 
31
31
  ##
32
32
  # Creates a new Service instance.
33
- def initialize project, credentials, host: nil, timeout: nil,
34
- client_config: nil
33
+ def initialize project, credentials, host: nil, timeout: nil
35
34
  @project = project
36
35
  @credentials = credentials
37
- @host = host || V1::FirestoreClient::SERVICE_ADDRESS
36
+ @host = host
38
37
  @timeout = timeout
39
- @client_config = client_config || {}
40
- end
41
-
42
- def channel
43
- require "grpc"
44
- GRPC::Core::Channel.new host, chan_args, chan_creds
45
- end
46
-
47
- def chan_args
48
- { "grpc.service_config_disable_resolution" => 1 }
49
- end
50
-
51
- def chan_creds
52
- return credentials if insecure?
53
- require "grpc"
54
- GRPC::Core::ChannelCredentials.new.compose \
55
- GRPC::Core::CallCredentials.new credentials.client.updater_proc
56
38
  end
57
39
 
58
40
  def firestore
59
41
  @firestore ||= \
60
- V1::FirestoreClient.new(
61
- credentials: channel,
62
- timeout: timeout,
63
- client_config: client_config,
64
- lib_name: "gccl",
65
- lib_version: Google::Cloud::Firestore::VERSION
66
- )
67
- end
68
-
69
- def insecure?
70
- credentials == :this_channel_is_insecure
42
+ V1::Firestore::Client.new do |config|
43
+ config.credentials = credentials if credentials
44
+ config.timeout = timeout if timeout
45
+ config.endpoint = host if host
46
+ config.lib_name = "gccl"
47
+ config.lib_version = Google::Cloud::Firestore::VERSION
48
+ config.metadata = { "google-cloud-resource-prefix": "projects/#{@project}" }
49
+ end
71
50
  end
72
51
 
73
52
  def get_documents document_paths, mask: nil, transaction: nil
74
- batch_get_args = { mask: document_mask(mask) }
53
+ batch_get_req = {
54
+ database: database_path,
55
+ documents: document_paths,
56
+ mask: document_mask(mask)
57
+ }
75
58
  if transaction.is_a? String
76
- batch_get_args[:transaction] = transaction
59
+ batch_get_req[:transaction] = transaction
77
60
  elsif transaction
78
- batch_get_args[:new_transaction] = transaction
61
+ batch_get_req[:new_transaction] = transaction
79
62
  end
80
- batch_get_args[:options] = call_options parent: database_path
81
63
 
82
- execute do
83
- firestore.batch_get_documents database_path, document_paths,
84
- batch_get_args
85
- end
64
+ firestore.batch_get_documents batch_get_req, call_options(parent: database_path)
86
65
  end
87
66
 
88
67
  ##
@@ -94,87 +73,82 @@ module Google
94
73
  # method.
95
74
  def list_documents parent, collection_id, token: nil, max: nil
96
75
  mask = { field_paths: [] }
97
- call_options = nil
98
- call_options = Google::Gax::CallOptions.new page_token: token if token
99
- execute do
100
- paged_enum = firestore.list_documents \
101
- parent, collection_id, mask: mask, show_missing: true,
102
- page_size: max, options: call_options
103
-
104
- paged_enum.page.response
105
- end
106
- end
107
-
108
- def list_collections parent, transaction: nil
109
- list_args = {}
110
- if transaction.is_a? String
111
- list_args[:transaction] = transaction
112
- elsif transaction
113
- list_args[:new_transaction] = transaction
114
- end
115
- list_args[:options] = call_options parent: database_path
116
-
117
- execute do
118
- firestore.list_collection_ids parent, list_args
119
- end
76
+ paged_enum = firestore.list_documents parent: parent,
77
+ collection_id: collection_id,
78
+ page_size: max,
79
+ page_token: token,
80
+ mask: mask,
81
+ show_missing: true
82
+ paged_enum.response
83
+ end
84
+
85
+ def list_collections parent, token: nil, max: nil
86
+ firestore.list_collection_ids(
87
+ {
88
+ parent: parent,
89
+ page_size: max,
90
+ page_token: token
91
+ },
92
+ call_options(parent: database_path)
93
+ )
120
94
  end
121
95
 
122
96
  def run_query path, query_grpc, transaction: nil
123
- run_query_args = { structured_query: query_grpc }
97
+ run_query_req = {
98
+ parent: path,
99
+ structured_query: query_grpc
100
+ }
124
101
  if transaction.is_a? String
125
- run_query_args[:transaction] = transaction
102
+ run_query_req[:transaction] = transaction
126
103
  elsif transaction
127
- run_query_args[:new_transaction] = transaction
104
+ run_query_req[:new_transaction] = transaction
128
105
  end
129
- run_query_args[:options] = call_options parent: database_path
130
106
 
131
- execute do
132
- firestore.run_query path, run_query_args
133
- end
107
+ firestore.run_query run_query_req, call_options(parent: database_path)
134
108
  end
135
109
 
136
110
  def listen enum
137
- options = call_options parent: database_path
138
-
139
- execute do
140
- firestore.listen enum, options: options
141
- end
111
+ firestore.listen enum, call_options(parent: database_path)
142
112
  end
143
113
 
144
114
  def begin_transaction transaction_opt
145
- options = call_options parent: database_path
146
-
147
- execute do
148
- firestore.begin_transaction database_path,
149
- options_: transaction_opt,
150
- options: options
151
- end
115
+ firestore.begin_transaction(
116
+ {
117
+ database: database_path,
118
+ options: transaction_opt
119
+ },
120
+ call_options(parent: database_path)
121
+ )
152
122
  end
153
123
 
154
124
  def commit writes, transaction: nil
155
- commit_args = {}
156
- commit_args[:transaction] = transaction if transaction
157
- commit_args[:options] = call_options parent: database_path
125
+ commit_req = {
126
+ database: database_path,
127
+ writes: writes
128
+ }
129
+ commit_req[:transaction] = transaction if transaction
158
130
 
159
- execute do
160
- firestore.commit database_path, writes, commit_args
161
- end
131
+ firestore.commit commit_req, call_options(parent: database_path)
162
132
  end
163
133
 
164
134
  def rollback transaction
165
- options = call_options parent: database_path
166
-
167
- execute do
168
- firestore.rollback database_path, transaction, options: options
169
- end
135
+ firestore.rollback(
136
+ {
137
+ database: database_path,
138
+ transaction: transaction
139
+ },
140
+ call_options(parent: database_path)
141
+ )
170
142
  end
171
143
 
172
144
  def database_path project_id: project, database_id: "(default)"
173
- V1::FirestoreClient.database_root_path project_id, database_id
145
+ # Originally used V1::FirestoreClient.database_root_path until it was removed in #5405.
146
+ "projects/#{project_id}/databases/#{database_id}"
174
147
  end
175
148
 
176
149
  def documents_path project_id: project, database_id: "(default)"
177
- V1::FirestoreClient.document_root_path project_id, database_id
150
+ # Originally used V1::FirestoreClient.document_root_path until it was removed in #5405.
151
+ "projects/#{project_id}/databases/#{database_id}/documents"
178
152
  end
179
153
 
180
154
  def inspect
@@ -189,7 +163,7 @@ module Google
189
163
  end
190
164
 
191
165
  def call_options parent: nil, token: nil
192
- Google::Gax::CallOptions.new({
166
+ Gapic::CallOptions.new(**{
193
167
  metadata: default_headers(parent),
194
168
  page_token: token
195
169
  }.delete_if { |_, v| v.nil? })
@@ -201,16 +175,7 @@ module Google
201
175
  mask = Array(mask).map(&:to_s).reject(&:nil?).reject(&:empty?)
202
176
  return nil if mask.empty?
203
177
 
204
- Google::Firestore::V1::DocumentMask.new field_paths: mask
205
- end
206
-
207
- def execute
208
- yield
209
- rescue Google::Gax::GaxError => e
210
- # GaxError wraps BadStatus, but exposes it as #cause
211
- raise Google::Cloud::Error.from_error(e.cause)
212
- rescue GRPC::BadStatus => e
213
- raise Google::Cloud::Error.from_error(e)
178
+ Google::Cloud::Firestore::V1::DocumentMask.new field_paths: mask
214
179
  end
215
180
  end
216
181
  end