switchman 4.2.1 → 4.2.2

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: 3de3ef5f2ede9dffce78d116f3e5a8bef26ff3b9430057a85020c09838716c8e
4
- data.tar.gz: e2fa7136ae05fa728a543734a914b792ed052ee27ccc784d426a5be8fea9c4ab
3
+ metadata.gz: 631d6e59b4e4f67ba719a92371f020bc3b39ca8fd8501344b469194f7b6e6d66
4
+ data.tar.gz: 888809fc92e8489f578c72fe685d811108f8f268cc0309f559837f9f36c4139a
5
5
  SHA512:
6
- metadata.gz: e36f968755b4e866200e78dba86406b821822eaec1ce21409d200647363bed80909a4344c8e4872af346c76bb5b8140ce82537dd57c559823f14c527a9fd6a5d
7
- data.tar.gz: ae78558b30d154e80da947897539e99e9f1fdb8a5311444e7d40066113807d3ecfd55669e0962c293c3bb45c16e7ce96414c679f44984325c8eebdf09005fa96
6
+ metadata.gz: 3eaeb2a4153632f20cba6ad4fbe4810b64c946a5db7596a22ab9e17303ec5a2d36add1e5114e7ca5af94c53e7b9f25d10cec2631a5f8b586d5a1bff670546a7a
7
+ data.tar.gz: 3ce30e552e0293f3541046a23a0aaf732001dc910b2ab5e8dd928a5c5edfdc0c504ca23b432807895c0a42ed1cb2e4a95029aa465d6f5dae0052e774d18df6ac
@@ -31,7 +31,7 @@ module Switchman
31
31
  if operation == "average"
32
32
  result = calculate_simple_average(column_name, distinct)
33
33
  else
34
- result = activate do |relation|
34
+ result = activate(count: operation == "count") do |relation|
35
35
  relation.call_super(:execute_simple_calculation, Calculations, operation, column_name, distinct)
36
36
  end
37
37
  if result.is_a?(Array)
@@ -163,7 +163,7 @@ module Switchman
163
163
  end
164
164
  end
165
165
 
166
- def activate(unordered: false, &block)
166
+ def activate(count: false, unordered: false, &block)
167
167
  shards = all_shards
168
168
  if Array === shards && shards.length == 1
169
169
  if !loaded? && shard_value != shards.first
@@ -189,7 +189,13 @@ module Switchman
189
189
 
190
190
  shard_results = relation.activate(&block)
191
191
 
192
- if shard_results.present? && !unordered
192
+ if shard_results.present? && count
193
+ unless shard_results.is_a?(Integer)
194
+ raise "expected integer result for count, got #{shard_results.class.name}"
195
+ end
196
+
197
+ result_count += shard_results
198
+ elsif shard_results.present? && !unordered
193
199
  can_order ||= can_order_cross_shard_results? unless order_values.empty?
194
200
  raise OrderOnMultiShardQuery if !can_order && !order_values.empty? && result_count.positive?
195
201
 
@@ -20,7 +20,7 @@ module Switchman
20
20
 
21
21
  if spec_name && !FORBIDDEN_DB_ENVS.include?(shard)
22
22
  begin
23
- connection = ::ActiveRecord::Base.connection_handler.retrieve_connection(spec_name, shard: shard)
23
+ connection = ::ActiveRecord::Base.connection_handler.retrieve_connection(spec_name, shard:)
24
24
  connection.connect! # eagerly validate the connection
25
25
  rescue ::ActiveRecord::ConnectionNotEstablished
26
26
  connection = nil
@@ -70,7 +70,7 @@ module Switchman
70
70
 
71
71
  # INST: filter by FORBIDDEN_DB_ENVS
72
72
  if connection_name && !FORBIDDEN_DB_ENVS.include?(shard)
73
- pool = ::ActiveRecord::Base.connection_handler.retrieve_connection_pool(connection_name, shard: shard)
73
+ pool = ::ActiveRecord::Base.connection_handler.retrieve_connection_pool(connection_name, shard:)
74
74
  if pool
75
75
  setup_shared_connection_pool
76
76
 
@@ -204,7 +204,7 @@ module Switchman
204
204
  database_servers = scope.reorder("database_server_id").select(:database_server_id).distinct
205
205
  .filter_map(&:database_server).uniq
206
206
  # nothing to do
207
- return if database_servers.count.zero?
207
+ return if database_servers.none?
208
208
 
209
209
  scopes = database_servers.to_h do |server|
210
210
  [server, scope.merge(server.shards)]
@@ -22,7 +22,7 @@ module Switchman
22
22
  payload[:shard] = {
23
23
  database_server_id: shard.database_server.id,
24
24
  id: shard.id,
25
- env: env
25
+ env:
26
26
  }
27
27
  end
28
28
  super
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Switchman
4
- VERSION = "4.2.1"
4
+ VERSION = "4.2.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: switchman
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.1
4
+ version: 4.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-09-12 00:00:00.000000000 Z
13
+ date: 2025-10-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -80,160 +80,6 @@ dependencies:
80
80
  - - "<"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '8.1'
83
- - !ruby/object:Gem::Dependency
84
- name: debug
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '1.8'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '1.8'
97
- - !ruby/object:Gem::Dependency
98
- name: pg
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '1.2'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.2'
111
- - !ruby/object:Gem::Dependency
112
- name: rake
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '13.0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '13.0'
125
- - !ruby/object:Gem::Dependency
126
- name: rspec-mocks
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '3.5'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '3.5'
139
- - !ruby/object:Gem::Dependency
140
- name: rspec-rails
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '6.0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '6.0'
153
- - !ruby/object:Gem::Dependency
154
- name: rubocop
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: '1.10'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: '1.10'
167
- - !ruby/object:Gem::Dependency
168
- name: rubocop-inst
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '1'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '1'
181
- - !ruby/object:Gem::Dependency
182
- name: rubocop-rake
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '0.5'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: '0.5'
195
- - !ruby/object:Gem::Dependency
196
- name: rubocop-rspec
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '3.0'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - "~>"
207
- - !ruby/object:Gem::Version
208
- version: '3.0'
209
- - !ruby/object:Gem::Dependency
210
- name: rubocop-rspec_rails
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - "~>"
214
- - !ruby/object:Gem::Version
215
- version: '2.29'
216
- type: :development
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - "~>"
221
- - !ruby/object:Gem::Version
222
- version: '2.29'
223
- - !ruby/object:Gem::Dependency
224
- name: simplecov
225
- requirement: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - "~>"
228
- - !ruby/object:Gem::Version
229
- version: '0.15'
230
- type: :development
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - "~>"
235
- - !ruby/object:Gem::Version
236
- version: '0.15'
237
83
  description: Sharding
238
84
  email:
239
85
  - cody@instructure.com