active_record_shards 3.16.0 → 3.17.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: 320c1c800b0a4bc4bb03d35f3e783fb8384c93c691fe952a6eb631bd18d0bc56
4
- data.tar.gz: 1135e185a0c6b40d0e4a154b71a1f265b9a098c2a7f6c23426e9d5ded29671cf
3
+ metadata.gz: cb66e1dcadbbd2c1c6f619cb1504ad0b55cfba8c4e36c76015d74781f7e29b5b
4
+ data.tar.gz: 0f63d2ffbdae6ded142d886af712a10c6b2f0fc59cdc8ab6de9c59d078663d7c
5
5
  SHA512:
6
- metadata.gz: c9b285dbf64690f38ea439fdc626dd494649e78b1868fb0808de22a8c6661081c9f0548eb92a6b84bae8848a6fd4e2047817d9649fef0b760b32b0afee577cf6
7
- data.tar.gz: 0ffe7e0d16eb27b15dbec72f2ca7308d653cdb4054693a2e3291137c1753e983bcd4ff76b1b99275f4993a5af3196dd456c224fb5ef46c3316e616d27ee77cb3
6
+ metadata.gz: 8cc61cd8b0c9b18a41c3b7ab1cd21d16a32d03b51e372855792bec89fe40bd45a4900b2ccfb9fdbafcdc841a98301e9ced9c91d1ba44100d12660723ee655682
7
+ data.tar.gz: 48e7fdb5d1501834e9008efd22ec617af5a429aab37bece0f435547f49b5bec539950bbf08c5412b336a201f4d756c62f45be580d063b250ce8e10ee89aaf423
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'active_record'
3
4
  require 'active_record/base'
4
5
  require 'active_record_shards/configuration_parser'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ActiveRecordShards
3
4
  module AssociationCollectionConnectionSelection
4
5
  def on_slave_if(condition)
@@ -31,7 +32,7 @@ module ActiveRecordShards
31
32
  @which = which
32
33
  end
33
34
 
34
- def method_missing(method, *args, &block) # rubocop:disable Style/MethodMissing
35
+ def method_missing(method, *args, &block) # rubocop:disable Style/MethodMissingSuper, Style/MissingRespondToMissing
35
36
  reflection = @association_collection.proxy_association.reflection
36
37
  reflection.klass.on_cx_switch_block(@which) { @association_collection.send(method, *args, &block) }
37
38
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'active_support/core_ext'
3
4
 
4
5
  module ActiveRecordShards
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ActiveRecord::ConnectionAdapters::ConnectionHandler.class_eval do
3
4
  remove_method :retrieve_connection_pool
4
5
  def retrieve_connection_pool(klass)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ActiveRecordShards
3
4
  ConnectionPoolNameDecorator = Struct.new(:name)
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class << ActiveRecord::Base
3
4
  remove_method :establish_connection if ActiveRecord::VERSION::MAJOR >= 5
4
5
  def establish_connection(spec = ENV["DATABASE_URL"])
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'active_record_shards/shard_support'
3
4
 
4
5
  module ActiveRecordShards
5
6
  module ConnectionSwitcher
6
- SHARD_NAMES_CONFIG_KEY = 'shard_names'.freeze
7
+ SHARD_NAMES_CONFIG_KEY = 'shard_names'
7
8
 
8
9
  def self.extended(base)
9
10
  if ActiveRecord::VERSION::MAJOR >= 5
@@ -23,6 +24,10 @@ module ActiveRecordShards
23
24
  switch_connection(shard: new_default_shard)
24
25
  end
25
26
 
27
+ def on_primary_db(&block)
28
+ on_shard(nil, &block)
29
+ end
30
+
26
31
  def on_shard(shard)
27
32
  old_options = current_shard_selection.options
28
33
  switch_connection(shard: shard) if supports_sharding?
@@ -144,6 +149,7 @@ module ActiveRecordShards
144
149
  unless config.fetch(SHARD_NAMES_CONFIG_KEY, []).all? { |shard_name| shard_name.is_a?(Integer) }
145
150
  raise "All shard names must be integers: #{config[SHARD_NAMES_CONFIG_KEY].inspect}."
146
151
  end
152
+
147
153
  config[SHARD_NAMES_CONFIG_KEY] || []
148
154
  end
149
155
 
@@ -159,6 +165,7 @@ module ActiveRecordShards
159
165
  unless configurations[shard_env]
160
166
  raise "Did not find #{shard_env} in configurations, did you forget to add it to your database config? (configurations: #{configurations.keys.inspect})"
161
167
  end
168
+
162
169
  current_shard_selection.shard = options[:shard]
163
170
  end
164
171
 
@@ -198,7 +205,7 @@ module ActiveRecordShards
198
205
  @which = which
199
206
  end
200
207
 
201
- def method_missing(method, *args, &block) # rubocop:disable Style/MethodMissing
208
+ def method_missing(method, *args, &block) # rubocop:disable Style/MethodMissingSuper, Style/MissingRespondToMissing
202
209
  @target.on_master_or_slave(@which) { @target.send(method, *args, &block) }
203
210
  end
204
211
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ActiveRecordShards
3
4
  module DefaultSlavePatches
4
5
  def self.wrap_method_in_on_slave(class_method, base, method, force_on_slave: false)
@@ -10,6 +11,7 @@ module ActiveRecordShards
10
11
  end
11
12
 
12
13
  return unless base_methods.include?(method)
14
+
13
15
  _, method, punctuation = method.to_s.match(/^(.*?)([\?\!]?)$/).to_a
14
16
  # _ALWAYS_ on slave, or only for on `on_slave_by_default = true` models?
15
17
  wrapper = force_on_slave ? 'force_on_slave' : 'on_slave_unless_tx'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ActiveRecord
3
4
  class Migrator
4
5
  def self.shards_migration_context
@@ -6,6 +6,7 @@ module ActiveRecordShards
6
6
  if self != ActiveRecord::Base && self != base_class
7
7
  raise "You should only call not_sharded on direct descendants of ActiveRecord::Base"
8
8
  end
9
+
9
10
  self.sharded = false
10
11
  end
11
12
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'active_record_shards/connection_pool'
3
4
  require 'active_record_shards/connection_handler'
4
5
  require 'active_record_shards/connection_specification'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ActiveRecordShards
3
4
  module SchemaDumperExtension
4
5
  def dump(stream)
@@ -23,15 +24,15 @@ module ActiveRecordShards
23
24
  def shard_header(stream)
24
25
  define_params = @version ? "version: #{@version}" : ""
25
26
 
26
- stream.puts <<HEADER
27
+ stream.puts <<~HEADER
27
28
 
28
29
 
29
- # This section generated by active_record_shards
30
+ # This section generated by active_record_shards
30
31
 
31
- ActiveRecord::Base.on_all_shards do
32
- ActiveRecord::Schema.define(#{define_params}) do
32
+ ActiveRecord::Base.on_all_shards do
33
+ ActiveRecord::Schema.define(#{define_params}) do
33
34
 
34
- HEADER
35
+ HEADER
35
36
  end
36
37
 
37
38
  def shard_trailer(stream)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ActiveRecordShards
3
4
  class ShardSelection
4
5
  NO_SHARD = :_no_shard
@@ -46,7 +47,7 @@ module ActiveRecordShards
46
47
  end
47
48
  end
48
49
 
49
- PRIMARY = "primary".freeze
50
+ PRIMARY = "primary"
50
51
  def resolve_connection_name(sharded:, configurations:)
51
52
  resolved_shard = sharded ? shard : nil
52
53
  env = ActiveRecordShards.rails_env
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ActiveRecordShards
3
4
  class ShardSupport
4
5
  class ShardEnumerator
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'active_record_shards'
3
4
 
4
5
  %w[db:drop db:create db:abort_if_pending_migrations db:reset db:test:purge].each do |name|
@@ -10,13 +11,14 @@ namespace :db do
10
11
  task drop: :load_config do
11
12
  ActiveRecord::Base.configurations.to_h.each do |key, conf|
12
13
  next if !key.starts_with?(ActiveRecordShards.rails_env) || key.ends_with?("_slave")
14
+
13
15
  begin
14
16
  ActiveRecordShards::Tasks.root_connection(conf).drop_database(conf['database'])
15
17
  # rescue ActiveRecord::NoDatabaseError # TODO: exists in AR but never is raised here ...
16
18
  # $stderr.puts "Database '#{conf['database']}' does not exist"
17
- rescue StandardError => error
18
- $stderr.puts error, *error.backtrace
19
- $stderr.puts "Couldn't drop #{conf['database']}"
19
+ rescue StandardError => e
20
+ warn e, *e.backtrace
21
+ warn "Couldn't drop #{conf['database']}"
20
22
  end
21
23
  end
22
24
  end
@@ -30,6 +32,7 @@ namespace :db do
30
32
  task create: :load_config do
31
33
  ActiveRecord::Base.configurations.to_h.each do |key, conf|
32
34
  next if !key.starts_with?(ActiveRecordShards.rails_env) || key.ends_with?("_slave")
35
+
33
36
  begin
34
37
  # MysqlAdapter takes charset instead of encoding in Rails 4.2 or greater
35
38
  # https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/tasks/mysql_database_tasks.rb#L85-L96
@@ -37,11 +40,11 @@ namespace :db do
37
40
  symbolized_configuration[:charset] = symbolized_configuration[:encoding]
38
41
 
39
42
  ActiveRecordShards::Tasks.root_connection(conf).create_database(conf['database'], symbolized_configuration)
40
- rescue ActiveRecord::StatementInvalid => ex
41
- if ex.message.include?('database exists')
43
+ rescue ActiveRecord::StatementInvalid => e
44
+ if e.message.include?('database exists')
42
45
  puts "#{conf['database']} already exists"
43
46
  else
44
- raise ex
47
+ raise e
45
48
  end
46
49
  end
47
50
  end
@@ -63,9 +66,9 @@ namespace :db do
63
66
  end
64
67
 
65
68
  if pending_migrations.any?
66
- $stderr.puts "You have #{pending_migrations.size} pending migrations:"
69
+ warn "You have #{pending_migrations.size} pending migrations:"
67
70
  pending_migrations.each do |pending_migration|
68
- $stderr.puts ' %4d %s' % [pending_migration.version, pending_migration.name]
71
+ warn ' %4d %s' % [pending_migration.version, pending_migration.name]
69
72
  end
70
73
  abort %(Run "rake db:migrate" to update your database then try again.)
71
74
  end
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: 3.16.0
4
+ version: 3.17.0
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: 2019-12-10 00:00:00.000000000 Z
16
+ date: 2020-04-02 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: activerecord
@@ -56,35 +56,35 @@ dependencies:
56
56
  - !ruby/object:Gem::Version
57
57
  version: '6.1'
58
58
  - !ruby/object:Gem::Dependency
59
- name: rake
59
+ name: bump
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - "~>"
62
+ - - ">="
63
63
  - !ruby/object:Gem::Version
64
- version: '12.0'
64
+ version: '0'
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - "~>"
69
+ - - ">="
70
70
  - !ruby/object:Gem::Version
71
- version: '12.0'
71
+ version: '0'
72
72
  - !ruby/object:Gem::Dependency
73
- name: mysql2
73
+ name: minitest
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
76
  - - ">="
77
77
  - !ruby/object:Gem::Version
78
- version: '0'
78
+ version: 5.10.0
79
79
  type: :development
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - ">="
84
84
  - !ruby/object:Gem::Version
85
- version: '0'
85
+ version: 5.10.0
86
86
  - !ruby/object:Gem::Dependency
87
- name: bump
87
+ name: minitest-rg
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
90
  - - ">="
@@ -98,75 +98,103 @@ dependencies:
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  - !ruby/object:Gem::Dependency
101
- name: rubocop
101
+ name: mocha
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - '='
104
+ - - ">="
105
105
  - !ruby/object:Gem::Version
106
- version: 0.50.0
106
+ version: 1.4.0
107
107
  type: :development
108
108
  prerelease: false
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
- - - '='
111
+ - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: 0.50.0
113
+ version: 1.4.0
114
114
  - !ruby/object:Gem::Dependency
115
- name: minitest
115
+ name: mysql2
116
116
  requirement: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: 5.10.0
120
+ version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
124
124
  requirements:
125
125
  - - ">="
126
126
  - !ruby/object:Gem::Version
127
- version: 5.10.0
127
+ version: '0'
128
128
  - !ruby/object:Gem::Dependency
129
- name: minitest-rg
129
+ name: phenix
130
130
  requirement: !ruby/object:Gem::Requirement
131
131
  requirements:
132
132
  - - ">="
133
133
  - !ruby/object:Gem::Version
134
- version: '0'
134
+ version: 0.6.0
135
135
  type: :development
136
136
  prerelease: false
137
137
  version_requirements: !ruby/object:Gem::Requirement
138
138
  requirements:
139
139
  - - ">="
140
140
  - !ruby/object:Gem::Version
141
- version: '0'
141
+ version: 0.6.0
142
142
  - !ruby/object:Gem::Dependency
143
- name: mocha
143
+ name: rake
144
144
  requirement: !ruby/object:Gem::Requirement
145
145
  requirements:
146
- - - ">="
146
+ - - "~>"
147
147
  - !ruby/object:Gem::Version
148
- version: 1.4.0
148
+ version: '12.0'
149
149
  type: :development
150
150
  prerelease: false
151
151
  version_requirements: !ruby/object:Gem::Requirement
152
152
  requirements:
153
- - - ">="
153
+ - - "~>"
154
154
  - !ruby/object:Gem::Version
155
- version: 1.4.0
155
+ version: '12.0'
156
156
  - !ruby/object:Gem::Dependency
157
- name: phenix
157
+ name: rubocop
158
158
  requirement: !ruby/object:Gem::Requirement
159
159
  requirements:
160
- - - ">="
160
+ - - "~>"
161
161
  - !ruby/object:Gem::Version
162
- version: 0.6.0
162
+ version: 0.77.0
163
163
  type: :development
164
164
  prerelease: false
165
165
  version_requirements: !ruby/object:Gem::Requirement
166
166
  requirements:
167
- - - ">="
167
+ - - "~>"
168
168
  - !ruby/object:Gem::Version
169
- version: 0.6.0
169
+ version: 0.77.0
170
+ - !ruby/object:Gem::Dependency
171
+ name: rubocop-minitest
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: 0.5.0
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - "~>"
182
+ - !ruby/object:Gem::Version
183
+ version: 0.5.0
184
+ - !ruby/object:Gem::Dependency
185
+ name: rubocop-performance
186
+ requirement: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - "~>"
189
+ - !ruby/object:Gem::Version
190
+ version: 1.5.1
191
+ type: :development
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: 1.5.1
170
198
  description: Easily run queries on shard and slave databases.
171
199
  email:
172
200
  - bquorning@zendesk.com
@@ -216,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
244
  - !ruby/object:Gem::Version
217
245
  version: '0'
218
246
  requirements: []
219
- rubygems_version: 3.0.3
247
+ rubygems_version: 3.1.1
220
248
  signing_key:
221
249
  specification_version: 4
222
250
  summary: Simple database switching for ActiveRecord.