active_record_host_pool 1.2.0 → 1.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: f5dcc0c95ead619555c18514507bf2711f7790c7e120570a5daaadf6506f1250
4
- data.tar.gz: 37d82a6b2c495872cfa5522bd588c7dd047afa5b9cdc376acd9a9c96aba21d44
3
+ metadata.gz: 798f8b22ed7ed2801d40f3aaeb653ad4882ab3523daa1d93183b659adb5c3941
4
+ data.tar.gz: ccf81d17ac0e64a4b727b0aff13ac208514104c34e20536818fe4983efbde390
5
5
  SHA512:
6
- metadata.gz: dd36a23cbb9636ba2dda0f303776715e05aef42ddecafa583388b32c7c11adcae6a0285743eede486712559d20309fa5fe834bd44a9bc539c2cc985c3f80c344
7
- data.tar.gz: d18bec930c1c6358d310461bd958fa3d92baee83e7de0d629783610809aea7f552ef98a1cc7482707cd8eaef4d592321a00f2210302132c31fead5d27b471962
6
+ metadata.gz: 656affbe8e6eccff5d653cdbe7f560e6b48738dabfdd67187deadd76b6f46b51aef3ce96bf0955a52e6e74718b3c7e1a8664f74d69ba9458a17f48c8f85eecd2
7
+ data.tar.gz: 37c92ee23f9c58320b6be0011c80de891d0d518b7cc0a5481e2f8028b4d804e399dbc67dcc30aa4b807673ea7033357d29ddccf519d9d6210f64bac47d0584e5
@@ -29,10 +29,10 @@ if ActiveRecord.version >= Gem::Version.new('6.0')
29
29
 
30
30
  def clear_on_handler(handler)
31
31
  handler.all_connection_pools.each do |pool|
32
- db_was = pool.connection.unproxied._host_pool_current_database
33
- pool.connection.clear_query_cache if pool.active_connection?
32
+ db_was = pool._unproxied_connection._host_pool_current_database
33
+ pool._unproxied_connection.clear_query_cache if pool.active_connection?
34
34
  ensure
35
- pool.connection.unproxied._host_pool_current_database = db_was
35
+ pool._unproxied_connection._host_pool_current_database = db_was
36
36
  end
37
37
  end
38
38
  end
@@ -8,11 +8,6 @@ module ActiveRecordHostPool
8
8
  base.class_eval do
9
9
  attr_reader(:_host_pool_current_database)
10
10
 
11
- def _host_pool_current_database=(database)
12
- @_host_pool_current_database = database
13
- @config[:database] = _host_pool_current_database
14
- end
15
-
16
11
  alias_method :execute_without_switching, :execute
17
12
  alias_method :execute, :execute_with_switching
18
13
 
@@ -32,12 +27,17 @@ module ActiveRecordHostPool
32
27
  super
33
28
  end
34
29
 
30
+ def _host_pool_current_database=(database)
31
+ @_host_pool_current_database = database
32
+ @config[:database] = _host_pool_current_database
33
+ end
34
+
35
35
  def self.ruby2_keywords(*); end unless respond_to?(:ruby2_keywords, true)
36
- ruby2_keywords def execute_with_switching(*args)
36
+ ruby2_keywords def execute_with_switching(*args, **kwargs)
37
37
  if _host_pool_current_database && !_no_switch
38
38
  _switch_connection
39
39
  end
40
- execute_without_switching(*args)
40
+ execute_without_switching(*args, **kwargs)
41
41
  end
42
42
 
43
43
  def drop_database_with_no_switching(*args)
@@ -34,13 +34,17 @@ module ActiveRecordHostPool
34
34
  attr_reader :pool_config
35
35
 
36
36
  def connection(*args)
37
- real_connection = _connection_pool.connection(*args)
37
+ real_connection = _unproxied_connection(*args)
38
38
  _connection_proxy_for(real_connection, @config[:database])
39
39
  rescue Mysql2::Error, ActiveRecord::NoDatabaseError
40
40
  _connection_pools.delete(_pool_key)
41
41
  Kernel.raise
42
42
  end
43
43
 
44
+ def _unproxied_connection(*args)
45
+ _connection_pool.connection(*args)
46
+ end
47
+
44
48
  # by the time we are patched into ActiveRecord, the current thread has already established
45
49
  # a connection. thus we need to patch both connection and checkout/checkin
46
50
  def checkout(*args, &block)
@@ -36,13 +36,17 @@ module ActiveRecordHostPool
36
36
  attr_reader :spec
37
37
 
38
38
  def connection(*args)
39
- real_connection = _connection_pool.connection(*args)
39
+ real_connection = _unproxied_connection(*args)
40
40
  _connection_proxy_for(real_connection, @config[:database])
41
41
  rescue Mysql2::Error, ActiveRecord::NoDatabaseError
42
42
  _connection_pools.delete(_pool_key)
43
43
  Kernel.raise
44
44
  end
45
45
 
46
+ def _unproxied_connection(*args)
47
+ _connection_pool.connection(*args)
48
+ end
49
+
46
50
  # by the time we are patched into ActiveRecord, the current thread has already established
47
51
  # a connection. thus we need to patch both connection and checkout/checkin
48
52
  def checkout(*args, &block)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecordHostPool
4
- VERSION = "1.2.0"
4
+ VERSION = "1.2.2"
5
5
  end
data/test/helper.rb CHANGED
@@ -5,7 +5,7 @@ require 'minitest/autorun'
5
5
 
6
6
  require 'active_record_host_pool'
7
7
  require 'logger'
8
- require 'mocha/minitest'
8
+ require 'minitest/mock_expectations'
9
9
  require 'phenix'
10
10
 
11
11
  ENV['RAILS_ENV'] = 'test'
@@ -20,6 +20,8 @@ RAILS_6_1_WITH_NON_LEGACY_CONNECTION_HANDLING =
20
20
 
21
21
  ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + '/test.log')
22
22
 
23
+ Thread.abort_on_exception = true
24
+
23
25
  # BEGIN preventing_writes? patch
24
26
  ## Rails 6.1 by default does not allow writing to replica databases which prevents
25
27
  ## us from properly setting up the test databases. This patch is used in test/schema.rb
data/test/test_arhp.rb CHANGED
@@ -122,18 +122,22 @@ class ActiveRecordHostPoolTest < Minitest::Test
122
122
 
123
123
  def test_no_switch_when_creating_db
124
124
  conn = Pool1DbA.connection
125
- conn.expects(:execute_without_switching)
126
- conn.expects(:_switch_connection).never
127
- assert conn._host_pool_current_database
128
- conn.create_database(:some_args)
125
+ assert_called(conn, :execute_without_switching) do
126
+ refute_called(conn, :_switch_connection) do
127
+ assert conn._host_pool_current_database
128
+ conn.create_database(:some_args)
129
+ end
130
+ end
129
131
  end
130
132
 
131
133
  def test_no_switch_when_dropping_db
132
134
  conn = Pool1DbA.connection
133
- conn.expects(:execute_without_switching)
134
- conn.expects(:_switch_connection).never
135
- assert conn._host_pool_current_database
136
- conn.drop_database(:some_args)
135
+ assert_called(conn, :execute_without_switching) do
136
+ refute_called(conn, :_switch_connection) do
137
+ assert conn._host_pool_current_database
138
+ conn.drop_database(:some_args)
139
+ end
140
+ end
137
141
  end
138
142
 
139
143
  def test_underlying_assumption_about_test_db
@@ -163,8 +167,9 @@ class ActiveRecordHostPoolTest < Minitest::Test
163
167
  thread_id = switch_to_klass.connection.select_value('select @@pseudo_thread_id')
164
168
 
165
169
  # now, disable our auto-switching and trigger a mysql reconnect
166
- switch_to_klass.connection.unproxied.stubs(:_switch_connection).returns(true)
167
- Pool2DbD.connection.execute("KILL #{thread_id}")
170
+ switch_to_klass.connection.unproxied.stub(:_switch_connection, true) do
171
+ Pool2DbD.connection.execute("KILL #{thread_id}")
172
+ end
168
173
 
169
174
  # and finally, did mysql reconnect correctly?
170
175
  puts "\nAnd now we end up on #{current_database(switch_to_klass)}" if debug_me
@@ -174,7 +179,8 @@ class ActiveRecordHostPoolTest < Minitest::Test
174
179
  def test_release_connection
175
180
  pool = ActiveRecord::Base.connection_pool
176
181
  conn = pool.connection
177
- pool.expects(:checkin).with(conn)
178
- pool.release_connection
182
+ assert_called_with(pool, :checkin, [conn]) do
183
+ pool.release_connection
184
+ end
179
185
  end
180
186
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_host_pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Quorning
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2022-10-13 00:00:00.000000000 Z
14
+ date: 2023-01-18 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activerecord
@@ -76,19 +76,19 @@ dependencies:
76
76
  - !ruby/object:Gem::Version
77
77
  version: 5.10.0
78
78
  - !ruby/object:Gem::Dependency
79
- name: mocha
79
+ name: minitest-mock_expectations
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ">="
82
+ - - "~>"
83
83
  - !ruby/object:Gem::Version
84
- version: 1.4.0
84
+ version: 1.1.3
85
85
  type: :development
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ">="
89
+ - - "~>"
90
90
  - !ruby/object:Gem::Version
91
- version: 1.4.0
91
+ version: 1.1.3
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: phenix
94
94
  requirement: !ruby/object:Gem::Requirement
@@ -131,20 +131,6 @@ dependencies:
131
131
  - - "~>"
132
132
  - !ruby/object:Gem::Version
133
133
  version: 0.80.0
134
- - !ruby/object:Gem::Dependency
135
- name: shoulda
136
- requirement: !ruby/object:Gem::Requirement
137
- requirements:
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- version: '0'
141
- type: :development
142
- prerelease: false
143
- version_requirements: !ruby/object:Gem::Requirement
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- version: '0'
148
134
  description: ''
149
135
  email:
150
136
  - bquorning@zendesk.com