active_record_shards 5.3.1 → 5.3.3

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: 032e2279ef2f82d2a1a30a171429a7b34b625766fe3a6060ad21141d551c0ca4
4
- data.tar.gz: 169c3f8e0bf7d4f036a23106d8523b5e09756535f289be4da5ec295ec6c1605d
3
+ metadata.gz: e71e05125d6c15ad696e8243cb09234c09d29e1c381b47adeee2a81b0b79e188
4
+ data.tar.gz: f06e143aabfc0e14d3058e03acc367e54d0219bcbf9355df57ee33e174393dbf
5
5
  SHA512:
6
- metadata.gz: c35a082c7b33926009467f10871177ecb02a2c5dc3b009a1f5d1a889fb49f039ea88bb931cdd80c7cc67763120158748610925ece6d53ee463020388a4690cc5
7
- data.tar.gz: 4acc42ae93f573d60d12384f6f7454b4a85d1a5a13239491cb6b00a10d722dfb1534026119f845b3f8c39c5e0114500099eac6806cc2c8b6864c7c9f74835fde
6
+ metadata.gz: 60629cde5e087c941d9ce3d753a57c5d73f37cbd78d9e7b0f6f1d921834c25267371a0b2e957a92112eac3f295a837a2a41681cda63dc3a6bfd981811dfbcd91
7
+ data.tar.gz: 2c4e012130eead2088089cefb2204508141b3bd5056f733ccd26029fa053ae78b10b077750b64f5b364731b752842210086e368f813b3b1b333e9cdf2fecefb9
@@ -142,10 +142,6 @@ module ActiveRecordShards
142
142
  end
143
143
 
144
144
  def shard_names
145
- unless config_for_env.fetch(SHARD_NAMES_CONFIG_KEY, []).all? { |shard_name| shard_name.is_a?(Integer) }
146
- raise "All shard names must be integers: #{config_for_env[SHARD_NAMES_CONFIG_KEY].inspect}."
147
- end
148
-
149
145
  config_for_env[SHARD_NAMES_CONFIG_KEY] || []
150
146
  end
151
147
 
@@ -166,11 +162,19 @@ module ActiveRecordShards
166
162
  raise "Did not find #{shard_env} in configurations, did you forget to add it to your database config? (configurations: #{configurations.to_h.keys.inspect})"
167
163
  end
168
164
 
165
+ ensure_all_shard_names_are_integers(config)
166
+
169
167
  config
170
168
  end
171
169
  end
172
170
  alias_method :check_config_for_env, :config_for_env
173
171
 
172
+ def ensure_all_shard_names_are_integers(config)
173
+ unless config.fetch(SHARD_NAMES_CONFIG_KEY, []).all? { |shard_name| shard_name.is_a?(Integer) }
174
+ raise "All shard names must be integers: #{config.inspect}."
175
+ end
176
+ end
177
+
174
178
  def switch_connection(options)
175
179
  ensure_legacy_connection_handling if ActiveRecord.version >= Gem::Version.new('6.1')
176
180
 
@@ -11,17 +11,20 @@ module ActiveRecordShards
11
11
  end
12
12
 
13
13
  def is_sharded? # rubocop:disable Naming/PredicateName
14
- if self == ActiveRecord::Base
15
- sharded != false && supports_sharding?
16
- elsif self == base_class
17
- if sharded.nil?
18
- ActiveRecord::Base.is_sharded?
14
+ return @_ars_model_is_sharded unless @_ars_model_is_sharded.nil?
15
+
16
+ @_ars_model_is_sharded =
17
+ if self == ActiveRecord::Base
18
+ sharded != false && supports_sharding?
19
+ elsif self == base_class
20
+ if sharded.nil?
21
+ ActiveRecord::Base.is_sharded?
22
+ else
23
+ sharded != false
24
+ end
19
25
  else
20
- sharded != false
26
+ base_class.is_sharded?
21
27
  end
22
- else
23
- base_class.is_sharded?
24
- end
25
28
  end
26
29
 
27
30
  def on_replica_by_default?
@@ -18,12 +18,25 @@ module ActiveRecordShards
18
18
  end
19
19
 
20
20
  def self.app_env
21
- env = Rails.env if defined?(Rails.env)
22
- env ||= RAILS_ENV if Object.const_defined?(:RAILS_ENV)
23
- env ||= ENV['RAILS_ENV']
24
- env ||= APP_ENV if Object.const_defined?(:APP_ENV)
25
- env ||= ENV['APP_ENV']
26
- env || 'development'
21
+ @app_env ||= begin
22
+ env = Rails.env if defined?(Rails.env)
23
+ env ||= RAILS_ENV if Object.const_defined?(:RAILS_ENV)
24
+ env ||= ENV['RAILS_ENV']
25
+ env ||= APP_ENV if Object.const_defined?(:APP_ENV)
26
+ env ||= ENV['APP_ENV']
27
+ env || 'development'
28
+ end
29
+ end
30
+
31
+ # Busts internal caches kept by active_record_shards, for things which are _supposed_ to be the
32
+ # same for the life of the process. You shouldn't need to call this unless you're doing something
33
+ # truly evil like changing RAILS_ENV after boot
34
+ def self.reset_app_env!
35
+ @app_env = nil
36
+ models = [ActiveRecord::Base] + ActiveRecord::Base.descendants
37
+ models.each do |model|
38
+ model.remove_instance_variable(:@_ars_model_is_sharded) if model.instance_variable_defined?(:@_ars_model_is_sharded)
39
+ end
27
40
  end
28
41
  end
29
42
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_shards
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.1
4
+ version: 5.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Quorning
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2023-02-14 00:00:00.000000000 Z
16
+ date: 2023-04-28 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: activerecord