google-cloud-firestore 2.0.0 → 2.1.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/CHANGELOG.md +6 -0
- data/lib/google/cloud/firestore/query.rb +110 -18
- data/lib/google/cloud/firestore/version.rb +1 -1
- data/lib/google/cloud/firestore/watch/inventory.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1e7097a28daa16ef5b2de8684c5b052b6409b792a4e7f382f878c47745dbf1a
|
4
|
+
data.tar.gz: 35dae74e7a063ad5e456420633c50b60ea0731b2fcafdde0e6ceab25b10bea25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23da24a3a861701b5156d1851be1eba45770565319e86d66e098f3a59156490ec16a7457d52fa55d0c216df653d2e1873a6212b5df3b23c67f576d40d706bd53
|
7
|
+
data.tar.gz: 9aef0214f2cf6a9db195be9b27dbb50f087b8d25be9041419a9d14d018f910aad449140848a0d49aa0223961672361b18e47a1f60b0e6eeeedd3752a88c2ac3a
|
data/CHANGELOG.md
CHANGED
@@ -62,6 +62,10 @@ module Google
|
|
62
62
|
# @private The parent path for the query.
|
63
63
|
attr_accessor :parent_path
|
64
64
|
|
65
|
+
##
|
66
|
+
# @private The type for limit queries.
|
67
|
+
attr_reader :limit_type
|
68
|
+
|
65
69
|
##
|
66
70
|
# @private The Google::Cloud::Firestore::V1::StructuredQuery object.
|
67
71
|
attr_accessor :query
|
@@ -118,7 +122,7 @@ module Google
|
|
118
122
|
new_query.select.fields << field_ref
|
119
123
|
end
|
120
124
|
|
121
|
-
Query.start new_query, parent_path, client
|
125
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
122
126
|
end
|
123
127
|
|
124
128
|
##
|
@@ -154,7 +158,7 @@ module Google
|
|
154
158
|
|
155
159
|
new_query.from.last.all_descendants = true
|
156
160
|
|
157
|
-
Query.start new_query, parent_path, client
|
161
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
158
162
|
end
|
159
163
|
|
160
164
|
##
|
@@ -190,7 +194,7 @@ module Google
|
|
190
194
|
|
191
195
|
new_query.from.last.all_descendants = false
|
192
196
|
|
193
|
-
Query.start new_query, parent_path, client
|
197
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
194
198
|
end
|
195
199
|
|
196
200
|
##
|
@@ -246,7 +250,7 @@ module Google
|
|
246
250
|
new_filter = filter field.formatted_string, operator, value
|
247
251
|
add_filters_to_query new_query, new_filter
|
248
252
|
|
249
|
-
Query.start new_query, parent_path, client
|
253
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
250
254
|
end
|
251
255
|
|
252
256
|
##
|
@@ -298,9 +302,8 @@ module Google
|
|
298
302
|
# end
|
299
303
|
#
|
300
304
|
def order field, direction = :asc
|
301
|
-
if query_has_cursors?
|
302
|
-
raise "cannot call order after calling "
|
303
|
-
"start_at, start_after, end_before, or end_at"
|
305
|
+
if query_has_cursors? || limit_type == :last
|
306
|
+
raise "cannot call order after calling limit_to_last, start_at, start_after, end_before, or end_at"
|
304
307
|
end
|
305
308
|
|
306
309
|
new_query = @query.dup
|
@@ -315,7 +318,7 @@ module Google
|
|
315
318
|
direction: order_direction(direction)
|
316
319
|
)
|
317
320
|
|
318
|
-
Query.start new_query, parent_path, client
|
321
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
319
322
|
end
|
320
323
|
alias order_by order
|
321
324
|
|
@@ -348,12 +351,13 @@ module Google
|
|
348
351
|
|
349
352
|
new_query.offset = num
|
350
353
|
|
351
|
-
Query.start new_query, parent_path, client
|
354
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
352
355
|
end
|
353
356
|
|
354
357
|
##
|
355
|
-
# Limits a query to return
|
356
|
-
#
|
358
|
+
# Limits a query to return only the first matching documents.
|
359
|
+
#
|
360
|
+
# If the current query already has a limit set, this will overwrite it.
|
357
361
|
#
|
358
362
|
# @param [Integer] num The maximum number of results to return.
|
359
363
|
#
|
@@ -368,19 +372,83 @@ module Google
|
|
368
372
|
# cities_col = firestore.col "cities"
|
369
373
|
#
|
370
374
|
# # Create a query
|
371
|
-
# query = cities_col.offset(10).limit(5)
|
375
|
+
# query = cities_col.order(:name, :desc).offset(10).limit(5)
|
372
376
|
#
|
373
377
|
# query.get do |city|
|
374
378
|
# puts "#{city.document_id} has #{city[:population]} residents."
|
375
379
|
# end
|
376
380
|
#
|
377
381
|
def limit num
|
382
|
+
if limit_type == :last
|
383
|
+
raise "cannot call limit after calling limit_to_last"
|
384
|
+
end
|
385
|
+
|
378
386
|
new_query = @query.dup
|
379
387
|
new_query ||= StructuredQuery.new
|
380
388
|
|
381
389
|
new_query.limit = Google::Protobuf::Int32Value.new value: num
|
382
390
|
|
383
|
-
Query.start new_query, parent_path, client
|
391
|
+
Query.start new_query, parent_path, client, limit_type: :first
|
392
|
+
end
|
393
|
+
|
394
|
+
##
|
395
|
+
# Limits a query to return only the last matching documents.
|
396
|
+
#
|
397
|
+
# You must specify at least one "order by" clause for limitToLast queries.
|
398
|
+
# (See {#order}.)
|
399
|
+
#
|
400
|
+
# Results for `limit_to_last` queries are only available once all documents
|
401
|
+
# are received. Hence, `limit_to_last` queries cannot be streamed using
|
402
|
+
# {#listen}.
|
403
|
+
#
|
404
|
+
# @param [Integer] num The maximum number of results to return.
|
405
|
+
#
|
406
|
+
# @return [Query] New query with `limit_to_last` called on it.
|
407
|
+
#
|
408
|
+
# @example
|
409
|
+
# require "google/cloud/firestore"
|
410
|
+
#
|
411
|
+
# firestore = Google::Cloud::Firestore.new
|
412
|
+
#
|
413
|
+
# # Get a collection reference
|
414
|
+
# cities_col = firestore.col "cities"
|
415
|
+
#
|
416
|
+
# # Create a query
|
417
|
+
# query = cities_col.order(:name, :desc).limit_to_last(5)
|
418
|
+
#
|
419
|
+
# query.get do |city|
|
420
|
+
# puts "#{city.document_id} has #{city[:population]} residents."
|
421
|
+
# end
|
422
|
+
#
|
423
|
+
def limit_to_last num
|
424
|
+
new_query = @query.dup
|
425
|
+
|
426
|
+
if new_query.nil? || new_query.order_by.nil? || new_query.order_by.empty?
|
427
|
+
raise "specify at least one order clause before calling limit_to_last"
|
428
|
+
end
|
429
|
+
|
430
|
+
if limit_type != :last # Don't reverse order_by more than once.
|
431
|
+
# Reverse the order_by directions since we want the last results.
|
432
|
+
new_query.order_by.each do |order|
|
433
|
+
order.direction = order.direction.to_sym == :DESCENDING ? :ASCENDING : :DESCENDING
|
434
|
+
end
|
435
|
+
|
436
|
+
# Swap the cursors to match the reversed query ordering.
|
437
|
+
new_end_at = new_query.start_at.dup
|
438
|
+
new_start_at = new_query.end_at.dup
|
439
|
+
if new_end_at
|
440
|
+
new_end_at.before = !new_end_at.before
|
441
|
+
new_query.end_at = new_end_at
|
442
|
+
end
|
443
|
+
if new_start_at
|
444
|
+
new_start_at.before = !new_start_at.before
|
445
|
+
new_query.start_at = new_start_at
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
new_query.limit = Google::Protobuf::Int32Value.new value: num
|
450
|
+
|
451
|
+
Query.start new_query, parent_path, client, limit_type: :last
|
384
452
|
end
|
385
453
|
|
386
454
|
##
|
@@ -477,6 +545,10 @@ module Google
|
|
477
545
|
def start_at *values
|
478
546
|
raise ArgumentError, "must provide values" if values.empty?
|
479
547
|
|
548
|
+
if limit_type == :last
|
549
|
+
raise "cannot call start_at after calling limit_to_last"
|
550
|
+
end
|
551
|
+
|
480
552
|
new_query = @query.dup
|
481
553
|
new_query ||= StructuredQuery.new
|
482
554
|
|
@@ -484,7 +556,7 @@ module Google
|
|
484
556
|
cursor.before = true
|
485
557
|
new_query.start_at = cursor
|
486
558
|
|
487
|
-
Query.start new_query, parent_path, client
|
559
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
488
560
|
end
|
489
561
|
|
490
562
|
##
|
@@ -581,6 +653,11 @@ module Google
|
|
581
653
|
def start_after *values
|
582
654
|
raise ArgumentError, "must provide values" if values.empty?
|
583
655
|
|
656
|
+
if limit_type == :last
|
657
|
+
raise "cannot call start_after after calling limit_to_last"
|
658
|
+
end
|
659
|
+
|
660
|
+
|
584
661
|
new_query = @query.dup
|
585
662
|
new_query ||= StructuredQuery.new
|
586
663
|
|
@@ -588,7 +665,7 @@ module Google
|
|
588
665
|
cursor.before = false
|
589
666
|
new_query.start_at = cursor
|
590
667
|
|
591
|
-
Query.start new_query, parent_path, client
|
668
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
592
669
|
end
|
593
670
|
|
594
671
|
##
|
@@ -685,6 +762,11 @@ module Google
|
|
685
762
|
def end_before *values
|
686
763
|
raise ArgumentError, "must provide values" if values.empty?
|
687
764
|
|
765
|
+
if limit_type == :last
|
766
|
+
raise "cannot call end_before after calling limit_to_last"
|
767
|
+
end
|
768
|
+
|
769
|
+
|
688
770
|
new_query = @query.dup
|
689
771
|
new_query ||= StructuredQuery.new
|
690
772
|
|
@@ -692,7 +774,7 @@ module Google
|
|
692
774
|
cursor.before = true
|
693
775
|
new_query.end_at = cursor
|
694
776
|
|
695
|
-
Query.start new_query, parent_path, client
|
777
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
696
778
|
end
|
697
779
|
|
698
780
|
##
|
@@ -789,6 +871,11 @@ module Google
|
|
789
871
|
def end_at *values
|
790
872
|
raise ArgumentError, "must provide values" if values.empty?
|
791
873
|
|
874
|
+
if limit_type == :last
|
875
|
+
raise "cannot call end_at after calling limit_to_last"
|
876
|
+
end
|
877
|
+
|
878
|
+
|
792
879
|
new_query = @query.dup
|
793
880
|
new_query ||= StructuredQuery.new
|
794
881
|
|
@@ -796,7 +883,7 @@ module Google
|
|
796
883
|
cursor.before = false
|
797
884
|
new_query.end_at = cursor
|
798
885
|
|
799
|
-
Query.start new_query, parent_path, client
|
886
|
+
Query.start new_query, parent_path, client, limit_type: limit_type
|
800
887
|
end
|
801
888
|
|
802
889
|
##
|
@@ -828,6 +915,10 @@ module Google
|
|
828
915
|
return enum_for :get unless block_given?
|
829
916
|
|
830
917
|
results = service.run_query parent_path, @query
|
918
|
+
|
919
|
+
# Reverse the results for Query#limit_to_last queries since that method reversed the order_by directions.
|
920
|
+
results = results.to_a.reverse if limit_type == :last
|
921
|
+
|
831
922
|
results.each do |result|
|
832
923
|
next if result.document.nil?
|
833
924
|
yield DocumentSnapshot.from_query_result result, client
|
@@ -870,11 +961,12 @@ module Google
|
|
870
961
|
|
871
962
|
##
|
872
963
|
# @private Start a new Query.
|
873
|
-
def self.start query, parent_path, client
|
964
|
+
def self.start query, parent_path, client, limit_type: nil
|
874
965
|
query ||= StructuredQuery.new
|
875
966
|
Query.new.tap do |q|
|
876
967
|
q.instance_variable_set :@query, query
|
877
968
|
q.instance_variable_set :@parent_path, parent_path
|
969
|
+
q.instance_variable_set :@limit_type, limit_type
|
878
970
|
q.instance_variable_set :@client, client
|
879
971
|
end
|
880
972
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-cloud-firestore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Google Inc
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-cloud-core
|