google-cloud-datastore 2.7.1 → 2.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 646ed90d461784d6870d425a6f98271a249338a72696200b3b2707d3e4725098
4
- data.tar.gz: 963afff082dd55de2dce0f58715bd76c17497e118b0db92b7a542b6dd813b00d
3
+ metadata.gz: ed10b12e2ec3c4588dba12b44b76116605981600f15623e1a4a48af8646424ba
4
+ data.tar.gz: '095dcff60d7ab782f182264f20f0294be2f01b61278fbd448b307b9d7b922504'
5
5
  SHA512:
6
- metadata.gz: 832baf39842dd1261ee5394284a0cc8448bd65fbf08162cc49a95f16654676f4dae76d4cb80be58a2692f7035f613b3b1668bf6e5f7d73f175a3f3ad7d6e3eb0
7
- data.tar.gz: dd2b0d16cf4727a342e305a6c3dee82add4ce10f5faac8c691216e9e4a88d356d89cb49684cc71b92bfe162bc9aa099abca54c260698ca96722400a729a952e7
6
+ metadata.gz: abddd5e808cb0b94c4fd26f5c0a18df08cbf211894e1b732cbbe1f611f225cf311450df52d61c6eca430b74483b222ea48b55a30d8139d92bdc25e355fb1d55a
7
+ data.tar.gz: 3df7cd4c6ca17d8ab1770ec93a92c4426f67f16eb0fe15335c6986a1f568ca16c2058290605a490984b5598fc266380339ac0b6f613562ceda2fc541d7e24063
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Release History
2
2
 
3
+ ### 2.9.0 (2024-03-10)
4
+
5
+ #### Features
6
+
7
+ * Update minimum supported Ruby version to 2.7 ([#25298](https://github.com/googleapis/google-cloud-ruby/issues/25298))
8
+
9
+ ### 2.8.0 (2023-09-12)
10
+
11
+ #### Features
12
+
13
+ * Support sum & avg aggregate functions ([#22884](https://github.com/googleapis/google-cloud-ruby/issues/22884))
14
+
3
15
  ### 2.7.1 (2023-05-18)
4
16
 
5
17
  #### Documentation
@@ -56,6 +56,15 @@ module Google
56
56
  # puts aggregate_query_results.get('total')
57
57
  #
58
58
  class AggregateQuery
59
+ # @private
60
+ DEFAULT_COUNT_AGGREGATE_ALIAS = "count".freeze
61
+
62
+ # @private
63
+ DEFAULT_SUM_AGGREGATE_ALIAS = "sum".freeze
64
+
65
+ # @private
66
+ DEFAULT_AVG_AGGREGATE_ALIAS = "avg".freeze
67
+
59
68
  ##
60
69
  # @private The Google::Cloud::Datastore::V1::AggregationQuery object.
61
70
  attr_reader :grpc
@@ -113,7 +122,7 @@ module Google
113
122
  # puts aggregate_query_results.get('total')
114
123
  #
115
124
  def add_count aggregate_alias: nil
116
- aggregate_alias ||= ALIASES[:count]
125
+ aggregate_alias ||= DEFAULT_COUNT_AGGREGATE_ALIAS
117
126
  @grpc.aggregations << Google::Cloud::Datastore::V1::AggregationQuery::Aggregation.new(
118
127
  count: Google::Cloud::Datastore::V1::AggregationQuery::Aggregation::Count.new,
119
128
  alias: aggregate_alias
@@ -122,16 +131,118 @@ module Google
122
131
  self
123
132
  end
124
133
 
125
- # @private
126
- def to_grpc
127
- @grpc
134
+ ##
135
+ # Adds a sum aggregate.
136
+ #
137
+ # @param name [String] The property to sum by.
138
+ # @param aggregate_alias [String] Alias to refer to the aggregate. Optional
139
+ #
140
+ # @return [AggregateQuery] The modified aggregate query object with the added SUM aggregate.
141
+ #
142
+ # @example
143
+ # require "google/cloud/datastore"
144
+ #
145
+ # datastore = Google::Cloud::Datastore.new
146
+ #
147
+ # query = Google::Cloud::Datastore::Query.new
148
+ # query.kind("Task")
149
+ # .where("done", "=", false)
150
+ #
151
+ # Create an aggregate query
152
+ # aggregate_query = query.aggregate_query
153
+ # .add_sum("score")
154
+ #
155
+ # aggregate_query_results = dataset.run_aggregation aggregate_query
156
+ # puts aggregate_query_results.get
157
+ #
158
+ # @example Alias an aggregate SUM query
159
+ # require "google/cloud/datastore"
160
+ #
161
+ # datastore = Google::Cloud::Datastore.new
162
+ #
163
+ # query = Google::Cloud::Datastore::Query.new
164
+ # query.kind("Task")
165
+ # .where("done", "=", false)
166
+ #
167
+ # # Create an aggregate query
168
+ # aggregate_query = query.aggregate_query
169
+ # .add_sum("score", aggregate_alias: 'total_score')
170
+ #
171
+ # aggregate_query_results = dataset.run_aggregation aggregate_query
172
+ # puts aggregate_query_results.get('total_score')
173
+ #
174
+ def add_sum name, aggregate_alias: nil
175
+ aggregate_alias ||= DEFAULT_SUM_AGGREGATE_ALIAS
176
+ @grpc.aggregations << Google::Cloud::Datastore::V1::AggregationQuery::Aggregation.new(
177
+ sum: Google::Cloud::Datastore::V1::AggregationQuery::Aggregation::Sum.new(
178
+ property: Google::Cloud::Datastore::V1::PropertyReference.new(
179
+ name: name
180
+ )
181
+ ),
182
+ alias: aggregate_alias
183
+ )
184
+
185
+ self
128
186
  end
129
187
 
130
188
  ##
189
+ # Adds an average aggregate.
190
+ #
191
+ # @param name [String] The property to apply average on.
192
+ # @param aggregate_alias [String] Alias to refer to the aggregate. Optional
193
+ #
194
+ # @return [AggregateQuery] The modified aggregate query object with the added AVG aggregate.
195
+ #
196
+ # @example
197
+ # require "google/cloud/datastore"
198
+ #
199
+ # datastore = Google::Cloud::Datastore.new
200
+ #
201
+ # query = Google::Cloud::Datastore::Query.new
202
+ # query.kind("Task")
203
+ # .where("done", "=", false)
204
+ #
205
+ # Create an aggregate query
206
+ # aggregate_query = query.aggregate_query
207
+ # .add_avg("score")
208
+ #
209
+ # aggregate_query_results = dataset.run_aggregation aggregate_query
210
+ # puts aggregate_query_results.get
211
+ #
212
+ # @example Alias an aggregate AVG query
213
+ # require "google/cloud/datastore"
214
+ #
215
+ # datastore = Google::Cloud::Datastore.new
216
+ #
217
+ # query = Google::Cloud::Datastore::Query.new
218
+ # query.kind("Task")
219
+ # .where("done", "=", false)
220
+ #
221
+ # # Create an aggregate query
222
+ # aggregate_query = query.aggregate_query
223
+ # .add_avg("score", aggregate_alias: 'avg_score')
224
+ #
225
+ # aggregate_query_results = dataset.run_aggregation aggregate_query
226
+ # puts aggregate_query_results.get('avg_score')
227
+ #
228
+ def add_avg name, aggregate_alias: nil
229
+ aggregate_alias ||= DEFAULT_AVG_AGGREGATE_ALIAS
230
+ @grpc.aggregations << Google::Cloud::Datastore::V1::AggregationQuery::Aggregation.new(
231
+ avg: Google::Cloud::Datastore::V1::AggregationQuery::Aggregation::Avg.new(
232
+ property: Google::Cloud::Datastore::V1::PropertyReference.new(
233
+ name: name
234
+ )
235
+ ),
236
+ alias: aggregate_alias
237
+ )
238
+
239
+ self
240
+ end
241
+
131
242
  # @private
132
- ALIASES = {
133
- count: "count"
134
- }.freeze
243
+ def to_grpc
244
+ @grpc
245
+ end
135
246
  end
136
247
  end
137
248
  end
@@ -39,6 +39,17 @@ module Google
39
39
  # puts aggregate_query_results.get
40
40
  #
41
41
  class AggregateQueryResults
42
+ ##
43
+ # @private Object of type [Hash{String => Object}].
44
+ #
45
+ # String can have the following values:
46
+ # - an aggregate literal "sum", "avg", or "count"
47
+ # - a custom aggregate alias
48
+ # Object can have the following types:
49
+ # - Integer
50
+ # - Float
51
+ attr_reader :aggregate_fields
52
+
42
53
  ##
43
54
  # Read timestamp the query was done on the database at.
44
55
  #
@@ -52,7 +63,8 @@ module Google
52
63
  # the aggregate value. For an AggregateQuery with a
53
64
  # single aggregate field, this parameter can be omitted.
54
65
  #
55
- # @return [Integer] The aggregate value.
66
+ # @return [Integer, Float, nil] The aggregate value. Returns `nil`
67
+ # if the aggregate_alias does not exist.
56
68
  #
57
69
  # @example
58
70
  # require "google/cloud/datastore"
@@ -101,10 +113,16 @@ module Google
101
113
  .batch
102
114
  .aggregation_results[0]
103
115
  .aggregate_properties
104
- .to_h
105
- .transform_values { |v| v[:integer_value] }
116
+ .map do |aggregate_alias, value|
117
+ if value.has_integer_value?
118
+ [aggregate_alias, value.integer_value]
119
+ else
120
+ [aggregate_alias, value.double_value]
121
+ end
122
+ end
123
+
106
124
  new.tap do |s|
107
- s.instance_variable_set :@aggregate_fields, aggregate_fields
125
+ s.instance_variable_set :@aggregate_fields, aggregate_fields.to_h
108
126
  s.instance_variable_set :@read_time, aggregate_query_response.batch.read_time
109
127
  end
110
128
  end
@@ -127,15 +127,14 @@ module Google
127
127
  # query string to valid GQL arguments
128
128
  #
129
129
  def named_bindings
130
- bindings = Hash[@grpc.named_bindings.map do |name, gql_query_param|
130
+ bindings_elems = @grpc.named_bindings.map do |name, gql_query_param|
131
131
  if gql_query_param.parameter_type == :cursor
132
132
  [name, Cursor.from_grpc(gql_query_param.cursor)]
133
133
  else
134
134
  [name, Convert.from_value(gql_query_param.value)]
135
135
  end
136
- end]
137
- bindings.freeze
138
- bindings
136
+ end
137
+ bindings_elems.to_h.freeze
139
138
  end
140
139
 
141
140
  ##
@@ -261,7 +261,7 @@ module Google
261
261
  #
262
262
  def path
263
263
  new_path = parent ? parent.path : []
264
- new_path << [kind, (id || name)]
264
+ new_path << [kind, id || name]
265
265
  end
266
266
 
267
267
  ##
@@ -74,12 +74,13 @@ module Google
74
74
 
75
75
  def to_grpc
76
76
  # Convert to Hash with Google::Cloud::Datastore::V1::Value values.
77
- Hash[@hash.map { |k, v| [k.to_s, Convert.to_value(v)] }]
77
+ @hash.to_h { |k, v| [k.to_s, Convert.to_value(v)] }
78
78
  end
79
79
 
80
80
  def self.from_grpc grpc_map
81
81
  # Convert to Hash of string keys and raw values.
82
- new Hash[grpc_map.map { |k, v| [k.to_s, Convert.from_value(v)] }]
82
+ map_elems = grpc_map.map { |k, v| [k.to_s, Convert.from_value(v)] }
83
+ new map_elems.to_h
83
84
  end
84
85
 
85
86
  protected
@@ -117,14 +117,13 @@ module Google
117
117
  def begin_transaction read_only: nil, previous_transaction: nil, read_time: nil
118
118
  if read_only
119
119
  transaction_options = Google::Cloud::Datastore::V1::TransactionOptions.new
120
- transaction_options.read_only = \
120
+ transaction_options.read_only =
121
121
  Google::Cloud::Datastore::V1::TransactionOptions::ReadOnly.new \
122
122
  read_time: read_time_to_timestamp(read_time)
123
123
 
124
124
  end
125
125
  if previous_transaction
126
- transaction_options ||= \
127
- Google::Cloud::Datastore::V1::TransactionOptions.new
126
+ transaction_options ||= Google::Cloud::Datastore::V1::TransactionOptions.new
128
127
  rw = Google::Cloud::Datastore::V1::TransactionOptions::ReadWrite.new(
129
128
  previous_transaction: previous_transaction.encode("ASCII-8BIT")
130
129
  )
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Datastore
19
- VERSION = "2.7.1".freeze
19
+ VERSION = "2.9.0".freeze
20
20
  end
21
21
  end
22
22
  end
@@ -127,7 +127,7 @@ module Google
127
127
  )
128
128
  end
129
129
 
130
- credentials ||= (keyfile || default_credentials(scope: scope))
130
+ credentials ||= keyfile || default_credentials(scope: scope)
131
131
  unless credentials.is_a? Google::Auth::Credentials
132
132
  credentials = Datastore::Credentials.new credentials, scope: scope
133
133
  end
@@ -68,8 +68,10 @@ module Google
68
68
  # datastore = gcloud.datastore scope: platform_scope
69
69
  #
70
70
  def datastore scope: nil, timeout: nil, database_id: nil
71
+ timeout ||= @timeout
71
72
  Google::Cloud.datastore @project, @keyfile,
72
- scope: scope, timeout: (timeout || @timeout),
73
+ scope: scope,
74
+ timeout: timeout,
73
75
  database_id: database_id
74
76
  end
75
77
 
@@ -117,7 +119,8 @@ module Google
117
119
  require "google/cloud/datastore"
118
120
  Google::Cloud::Datastore.new project_id: project_id,
119
121
  credentials: credentials,
120
- scope: scope, timeout: timeout,
122
+ scope: scope,
123
+ timeout: timeout,
121
124
  database_id: database_id
122
125
  end
123
126
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-datastore
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.1
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-05-19 00:00:00.000000000 Z
12
+ date: 2024-03-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core
@@ -39,146 +39,6 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0.0'
42
- - !ruby/object:Gem::Dependency
43
- name: google-style
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - "~>"
47
- - !ruby/object:Gem::Version
48
- version: 1.25.1
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - "~>"
54
- - !ruby/object:Gem::Version
55
- version: 1.25.1
56
- - !ruby/object:Gem::Dependency
57
- name: minitest
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '5.16'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '5.16'
70
- - !ruby/object:Gem::Dependency
71
- name: minitest-autotest
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: '1.0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '1.0'
84
- - !ruby/object:Gem::Dependency
85
- name: minitest-focus
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - "~>"
89
- - !ruby/object:Gem::Version
90
- version: '1.1'
91
- type: :development
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - "~>"
96
- - !ruby/object:Gem::Version
97
- version: '1.1'
98
- - !ruby/object:Gem::Dependency
99
- name: minitest-rg
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - "~>"
103
- - !ruby/object:Gem::Version
104
- version: '5.2'
105
- type: :development
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - "~>"
110
- - !ruby/object:Gem::Version
111
- version: '5.2'
112
- - !ruby/object:Gem::Dependency
113
- name: autotest-suffix
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - "~>"
117
- - !ruby/object:Gem::Version
118
- version: '1.1'
119
- type: :development
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - "~>"
124
- - !ruby/object:Gem::Version
125
- version: '1.1'
126
- - !ruby/object:Gem::Dependency
127
- name: redcarpet
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - "~>"
131
- - !ruby/object:Gem::Version
132
- version: '3.0'
133
- type: :development
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - "~>"
138
- - !ruby/object:Gem::Version
139
- version: '3.0'
140
- - !ruby/object:Gem::Dependency
141
- name: simplecov
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - "~>"
145
- - !ruby/object:Gem::Version
146
- version: '0.9'
147
- type: :development
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - "~>"
152
- - !ruby/object:Gem::Version
153
- version: '0.9'
154
- - !ruby/object:Gem::Dependency
155
- name: yard
156
- requirement: !ruby/object:Gem::Requirement
157
- requirements:
158
- - - "~>"
159
- - !ruby/object:Gem::Version
160
- version: '0.9'
161
- type: :development
162
- prerelease: false
163
- version_requirements: !ruby/object:Gem::Requirement
164
- requirements:
165
- - - "~>"
166
- - !ruby/object:Gem::Version
167
- version: '0.9'
168
- - !ruby/object:Gem::Dependency
169
- name: yard-doctest
170
- requirement: !ruby/object:Gem::Requirement
171
- requirements:
172
- - - "~>"
173
- - !ruby/object:Gem::Version
174
- version: 0.1.13
175
- type: :development
176
- prerelease: false
177
- version_requirements: !ruby/object:Gem::Requirement
178
- requirements:
179
- - - "~>"
180
- - !ruby/object:Gem::Version
181
- version: 0.1.13
182
42
  description: google-cloud-datastore is the official library for Google Cloud Datastore.
183
43
  email:
184
44
  - mike@blowmage.com
@@ -231,14 +91,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
231
91
  requirements:
232
92
  - - ">="
233
93
  - !ruby/object:Gem::Version
234
- version: '2.5'
94
+ version: '2.7'
235
95
  required_rubygems_version: !ruby/object:Gem::Requirement
236
96
  requirements:
237
97
  - - ">="
238
98
  - !ruby/object:Gem::Version
239
99
  version: '0'
240
100
  requirements: []
241
- rubygems_version: 3.4.2
101
+ rubygems_version: 3.5.6
242
102
  signing_key:
243
103
  specification_version: 4
244
104
  summary: API Client library for Google Cloud Datastore