ros-apartment 2.10.0 → 3.0.1
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 +4 -4
- data/.rubocop.yml +4 -0
- data/.rubocop_todo.yml +256 -59
- data/.ruby-version +1 -1
- data/Appraisals +14 -35
- data/CHANGELOG.md +5 -3
- data/README.md +5 -6
- data/Rakefile +3 -17
- data/lib/apartment/active_record/connection_handling.rb +18 -7
- data/lib/apartment/active_record/postgresql_adapter.rb +43 -0
- data/lib/apartment/active_record/schema_migration.rb +1 -1
- data/lib/apartment/adapters/postgresql_adapter.rb +10 -22
- data/lib/apartment/console.rb +0 -16
- data/lib/apartment/log_subscriber.rb +21 -9
- data/lib/apartment/migrator.rb +3 -21
- data/lib/apartment/railtie.rb +6 -20
- data/lib/apartment/version.rb +1 -1
- data/lib/apartment.rb +6 -16
- data/ros-apartment.gemspec +12 -9
- metadata +24 -38
- data/.circleci/config.yml +0 -76
- data/.github/ISSUE_TEMPLATE.md +0 -21
- data/.github/workflows/changelog.yml +0 -63
- data/.github/workflows/reviewdog.yml +0 -22
- data/.story_branch.yml +0 -5
- data/HISTORY.md +0 -496
- data/TODO.md +0 -50
- data/docker-compose.yml +0 -33
- data/gemfiles/rails_4_2.gemfile +0 -25
- data/gemfiles/rails_5_0.gemfile +0 -23
- data/gemfiles/rails_5_1.gemfile +0 -23
- data/gemfiles/rails_5_2.gemfile +0 -19
- data/gemfiles/rails_6_0.gemfile +0 -23
- data/gemfiles/rails_6_1.gemfile +0 -23
- data/gemfiles/rails_master.gemfile +0 -23
- data/lib/apartment/reloader.rb +0 -22
@@ -1,16 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module ActiveRecord
|
4
|
-
# This is monkeypatching
|
3
|
+
module ActiveRecord # :nodoc:
|
4
|
+
# This is monkeypatching Active Record to ensure that whenever a new connection is established it
|
5
5
|
# switches to the same tenant as before the connection switching. This problem is more evident when
|
6
6
|
# using read replica in Rails 6
|
7
7
|
module ConnectionHandling
|
8
|
-
|
9
|
-
|
8
|
+
if ActiveRecord.version.release <= Gem::Version.new('6.2')
|
9
|
+
def connected_to_with_tenant(database: nil, role: nil, prevent_writes: false, &blk)
|
10
|
+
current_tenant = Apartment::Tenant.current
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
connected_to_without_tenant(database: database, role: role, prevent_writes: prevent_writes) do
|
13
|
+
Apartment::Tenant.switch!(current_tenant)
|
14
|
+
yield(blk)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
else
|
18
|
+
def connected_to_with_tenant(role: nil, prevent_writes: false, &blk)
|
19
|
+
current_tenant = Apartment::Tenant.current
|
20
|
+
|
21
|
+
connected_to_without_tenant(role: role, prevent_writes: prevent_writes) do
|
22
|
+
Apartment::Tenant.switch!(current_tenant)
|
23
|
+
yield(blk)
|
24
|
+
end
|
14
25
|
end
|
15
26
|
end
|
16
27
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Style/ClassAndModuleChildren
|
4
|
+
|
5
|
+
# NOTE: This patch is meant to remove any schema_prefix appart from the ones for
|
6
|
+
# excluded models. The schema_prefix would be resolved by apartment's setting
|
7
|
+
# of search path
|
8
|
+
module Apartment::PostgreSqlAdapterPatch
|
9
|
+
def default_sequence_name(table, _column)
|
10
|
+
res = super
|
11
|
+
|
12
|
+
# for JDBC driver, if rescued in super_method, trim leading and trailing quotes
|
13
|
+
res.delete!('"') if defined?(JRUBY_VERSION)
|
14
|
+
|
15
|
+
schema_prefix = "#{Apartment::Tenant.current}."
|
16
|
+
default_tenant_prefix = "#{Apartment::Tenant.default_tenant}."
|
17
|
+
|
18
|
+
# NOTE: Excluded models should always access the sequence from the default
|
19
|
+
# tenant schema
|
20
|
+
if excluded_model?(table)
|
21
|
+
res.sub!(schema_prefix, default_tenant_prefix) if schema_prefix != default_tenant_prefix
|
22
|
+
return res
|
23
|
+
end
|
24
|
+
|
25
|
+
res.delete_prefix!(schema_prefix) if res&.starts_with?(schema_prefix)
|
26
|
+
|
27
|
+
res
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def excluded_model?(table)
|
33
|
+
Apartment.excluded_models.any? { |m| m.constantize.table_name == table }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
require 'active_record/connection_adapters/postgresql_adapter'
|
38
|
+
|
39
|
+
# NOTE: inject this into postgresql adapters
|
40
|
+
class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
|
41
|
+
include Apartment::PostgreSqlAdapterPatch
|
42
|
+
end
|
43
|
+
# rubocop:enable Style/ClassAndModuleChildren
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'apartment/adapters/abstract_adapter'
|
4
|
+
require 'apartment/active_record/postgresql_adapter'
|
4
5
|
|
5
6
|
module Apartment
|
6
7
|
module Tenant
|
@@ -41,7 +42,6 @@ module Apartment
|
|
41
42
|
def reset
|
42
43
|
@current = default_tenant
|
43
44
|
Apartment.connection.schema_search_path = full_search_path
|
44
|
-
reset_sequence_names
|
45
45
|
end
|
46
46
|
|
47
47
|
def init
|
@@ -81,9 +81,8 @@ module Apartment
|
|
81
81
|
# there is a issue for prepared statement with changing search_path.
|
82
82
|
# https://www.postgresql.org/docs/9.3/static/sql-prepare.html
|
83
83
|
Apartment.connection.clear_cache! if postgresql_version < 90_300
|
84
|
-
|
85
|
-
|
86
|
-
raise TenantNotFound, "One of the following schema(s) is invalid: \"#{tenant}\" #{full_search_path}"
|
84
|
+
rescue *rescuable_exceptions => e
|
85
|
+
raise_schema_connect_to_new(tenant, e)
|
87
86
|
end
|
88
87
|
|
89
88
|
private
|
@@ -130,29 +129,18 @@ module Apartment
|
|
130
129
|
Apartment.connection.send(:postgresql_version)
|
131
130
|
end
|
132
131
|
|
133
|
-
def reset_sequence_names
|
134
|
-
# sequence_name contains the schema, so it must be reset after switch
|
135
|
-
# There is `reset_sequence_name`, but that method actually goes to the database
|
136
|
-
# to find out the new name. Therefore, we do this hack to only unset the name,
|
137
|
-
# and it will be dynamically found the next time it is needed
|
138
|
-
descendants_to_unset = ActiveRecord::Base.descendants
|
139
|
-
.select { |c| c.instance_variable_defined?(:@sequence_name) }
|
140
|
-
.reject do |c|
|
141
|
-
c.instance_variable_defined?(:@explicit_sequence_name) &&
|
142
|
-
c.instance_variable_get(:@explicit_sequence_name)
|
143
|
-
end
|
144
|
-
descendants_to_unset.each do |c|
|
145
|
-
# NOTE: due to this https://github.com/rails-on-services/apartment/issues/81
|
146
|
-
# unreproduceable error we're checking before trying to remove it
|
147
|
-
c.remove_instance_variable :@sequence_name if c.instance_variable_defined?(:@sequence_name)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
132
|
def schema_exists?(schemas)
|
152
133
|
return true unless Apartment.tenant_presence_check
|
153
134
|
|
154
135
|
Array(schemas).all? { |schema| Apartment.connection.schema_exists?(schema.to_s) }
|
155
136
|
end
|
137
|
+
|
138
|
+
def raise_schema_connect_to_new(tenant, exception)
|
139
|
+
raise TenantNotFound, <<~EXCEPTION_MESSAGE
|
140
|
+
Could not set search path to schemas, they may be invalid: "#{tenant}" #{full_search_path}.
|
141
|
+
Original error: #{exception.class}: #{exception}
|
142
|
+
EXCEPTION_MESSAGE
|
143
|
+
end
|
156
144
|
end
|
157
145
|
|
158
146
|
# Another Adapter for Postgresql when using schemas and SQL
|
data/lib/apartment/console.rb
CHANGED
@@ -1,21 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# A workaround to get `reload!` to also call Apartment::Tenant.init
|
4
|
-
# This is unfortunate, but I haven't figured out how to hook into the reload process *after* files are reloaded
|
5
|
-
|
6
|
-
# reloads the environment
|
7
|
-
# rubocop:disable Style/OptionalBooleanParameter
|
8
|
-
def reload!(print = true)
|
9
|
-
puts 'Reloading...' if print
|
10
|
-
|
11
|
-
# This triggers the to_prepare callbacks
|
12
|
-
ActionDispatch::Callbacks.new(proc {}).call({})
|
13
|
-
# Manually init Apartment again once classes are reloaded
|
14
|
-
Apartment::Tenant.init
|
15
|
-
true
|
16
|
-
end
|
17
|
-
# rubocop:enable Style/OptionalBooleanParameter
|
18
|
-
|
19
3
|
def st(schema_name = nil)
|
20
4
|
if schema_name.nil?
|
21
5
|
tenant_list.each { |t| puts t }
|
@@ -8,26 +8,38 @@ module Apartment
|
|
8
8
|
# NOTE: for some reason, if the method definition is not here, then the custom debug method is not called
|
9
9
|
# rubocop:disable Lint/UselessMethodDefinition
|
10
10
|
def sql(event)
|
11
|
-
super
|
11
|
+
super
|
12
12
|
end
|
13
13
|
# rubocop:enable Lint/UselessMethodDefinition
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
|
-
def debug(progname = nil, &
|
17
|
+
def debug(progname = nil, &)
|
18
18
|
progname = " #{apartment_log}#{progname}" unless progname.nil?
|
19
19
|
|
20
|
-
super
|
20
|
+
super
|
21
21
|
end
|
22
22
|
|
23
23
|
def apartment_log
|
24
|
-
database = color("[#{
|
25
|
-
schema =
|
26
|
-
unless
|
27
|
-
schema = color("[#{Apartment.connection.schema_search_path.tr('"', '')}] ",
|
28
|
-
ActiveSupport::LogSubscriber::YELLOW, true)
|
29
|
-
end
|
24
|
+
database = color("[#{database_name}] ", ActiveSupport::LogSubscriber::MAGENTA, bold: true)
|
25
|
+
schema = current_search_path
|
26
|
+
schema = color("[#{schema.tr('"', '')}] ", ActiveSupport::LogSubscriber::YELLOW, bold: true) unless schema.nil?
|
30
27
|
"#{database}#{schema}"
|
31
28
|
end
|
29
|
+
|
30
|
+
def current_search_path
|
31
|
+
if Apartment.connection.respond_to?(:schema_search_path)
|
32
|
+
Apartment.connection.schema_search_path
|
33
|
+
else
|
34
|
+
Apartment::Tenant.current # all others
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def database_name
|
39
|
+
db_name = Apartment.connection.raw_connection.try(:db) # PostgreSQL, PostGIS
|
40
|
+
db_name ||= Apartment.connection.raw_connection.try(:query_options)&.dig(:database) # Mysql
|
41
|
+
db_name ||= Apartment.connection.current_database # Failover
|
42
|
+
db_name
|
43
|
+
end
|
32
44
|
end
|
33
45
|
end
|
data/lib/apartment/migrator.rb
CHANGED
@@ -13,40 +13,22 @@ module Apartment
|
|
13
13
|
|
14
14
|
migration_scope_block = ->(migration) { ENV['SCOPE'].blank? || (ENV['SCOPE'] == migration.scope) }
|
15
15
|
|
16
|
-
|
17
|
-
ActiveRecord::Migrator.migrate(ActiveRecord::Migrator.migrations_paths, version, &migration_scope_block)
|
18
|
-
else
|
19
|
-
ActiveRecord::Base.connection.migration_context.migrate(version, &migration_scope_block)
|
20
|
-
end
|
16
|
+
ActiveRecord::Base.connection.migration_context.migrate(version, &migration_scope_block)
|
21
17
|
end
|
22
18
|
end
|
23
19
|
|
24
20
|
# Migrate up/down to a specific version
|
25
21
|
def run(direction, database, version)
|
26
22
|
Tenant.switch(database) do
|
27
|
-
|
28
|
-
ActiveRecord::Migrator.run(direction, ActiveRecord::Migrator.migrations_paths, version)
|
29
|
-
else
|
30
|
-
ActiveRecord::Base.connection.migration_context.run(direction, version)
|
31
|
-
end
|
23
|
+
ActiveRecord::Base.connection.migration_context.run(direction, version)
|
32
24
|
end
|
33
25
|
end
|
34
26
|
|
35
27
|
# rollback latest migration `step` number of times
|
36
28
|
def rollback(database, step = 1)
|
37
29
|
Tenant.switch(database) do
|
38
|
-
|
39
|
-
ActiveRecord::Migrator.rollback(ActiveRecord::Migrator.migrations_paths, step)
|
40
|
-
else
|
41
|
-
ActiveRecord::Base.connection.migration_context.rollback(step)
|
42
|
-
end
|
30
|
+
ActiveRecord::Base.connection.migration_context.rollback(step)
|
43
31
|
end
|
44
32
|
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def activerecord_below_5_2?
|
49
|
-
ActiveRecord.version.release < Gem::Version.new('5.2.0')
|
50
|
-
end
|
51
33
|
end
|
52
34
|
end
|
data/lib/apartment/railtie.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require 'rails'
|
4
4
|
require 'apartment/tenant'
|
5
|
-
require 'apartment/reloader'
|
6
5
|
|
7
6
|
module Apartment
|
8
7
|
class Railtie < Rails::Railtie
|
@@ -48,7 +47,12 @@ module Apartment
|
|
48
47
|
config.after_initialize do
|
49
48
|
# NOTE: Load the custom log subscriber if enabled
|
50
49
|
if Apartment.active_record_log
|
51
|
-
ActiveSupport::Notifications.
|
50
|
+
ActiveSupport::Notifications.notifier.listeners_for('sql.active_record').each do |listener|
|
51
|
+
next unless listener.instance_variable_get('@delegate').is_a?(ActiveRecord::LogSubscriber)
|
52
|
+
|
53
|
+
ActiveSupport::Notifications.unsubscribe listener
|
54
|
+
end
|
55
|
+
|
52
56
|
Apartment::LogSubscriber.attach_to :active_record
|
53
57
|
end
|
54
58
|
end
|
@@ -60,23 +64,5 @@ module Apartment
|
|
60
64
|
load 'tasks/apartment.rake'
|
61
65
|
require 'apartment/tasks/enhancements' if Apartment.db_migrate_tenants
|
62
66
|
end
|
63
|
-
|
64
|
-
#
|
65
|
-
# The following initializers are a workaround to the fact that I can't properly hook into the rails reloader
|
66
|
-
# Note this is technically valid for any environment where cache_classes is false, for us, it's just development
|
67
|
-
#
|
68
|
-
if Rails.env.development?
|
69
|
-
|
70
|
-
# Apartment::Reloader is middleware to initialize things properly on each request to dev
|
71
|
-
initializer 'apartment.init' do |app|
|
72
|
-
app.config.middleware.use Apartment::Reloader
|
73
|
-
end
|
74
|
-
|
75
|
-
# Overrides reload! to also call Apartment::Tenant.init as well
|
76
|
-
# so that the reloaded classes have the proper table_names
|
77
|
-
console do
|
78
|
-
require 'apartment/console'
|
79
|
-
end
|
80
|
-
end
|
81
67
|
end
|
82
68
|
end
|
data/lib/apartment/version.rb
CHANGED
data/lib/apartment.rb
CHANGED
@@ -7,15 +7,9 @@ require 'active_record'
|
|
7
7
|
require 'apartment/tenant'
|
8
8
|
|
9
9
|
require_relative 'apartment/log_subscriber'
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
if ActiveRecord.version.release >= Gem::Version.new('6.1')
|
16
|
-
require_relative 'apartment/active_record/schema_migration'
|
17
|
-
require_relative 'apartment/active_record/internal_metadata'
|
18
|
-
end
|
10
|
+
require_relative 'apartment/active_record/connection_handling'
|
11
|
+
require_relative 'apartment/active_record/schema_migration'
|
12
|
+
require_relative 'apartment/active_record/internal_metadata'
|
19
13
|
|
20
14
|
# Apartment main definitions
|
21
15
|
module Apartment
|
@@ -33,14 +27,10 @@ module Apartment
|
|
33
27
|
attr_accessor(*ACCESSOR_METHODS)
|
34
28
|
attr_writer(*WRITER_METHODS)
|
35
29
|
|
36
|
-
|
37
|
-
def_delegators :connection_class, :connection, :connection_db_config, :establish_connection
|
30
|
+
def_delegators :connection_class, :connection, :connection_db_config, :establish_connection
|
38
31
|
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
else
|
43
|
-
def_delegators :connection_class, :connection, :connection_config, :establish_connection
|
32
|
+
def connection_config
|
33
|
+
connection_db_config.configuration_hash
|
44
34
|
end
|
45
35
|
|
46
36
|
# configure apartment with available options
|
data/ros-apartment.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.files = Dir.chdir(File.expand_path(__dir__)) do
|
18
18
|
`git ls-files -z`.split("\x0").reject do |f|
|
19
19
|
# NOTE: ignore all test related
|
20
|
-
f.match(%r{^(test|spec|features|documentation)/})
|
20
|
+
f.match(%r{^(test|spec|features|documentation|gemfiles|.github)/})
|
21
21
|
end
|
22
22
|
end
|
23
23
|
s.executables = s.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
@@ -26,11 +26,14 @@ Gem::Specification.new do |s|
|
|
26
26
|
|
27
27
|
s.homepage = 'https://github.com/rails-on-services/apartment'
|
28
28
|
s.licenses = ['MIT']
|
29
|
+
s.metadata = {
|
30
|
+
'github_repo' => 'ssh://github.com/rails-on-services/apartment'
|
31
|
+
}
|
29
32
|
|
30
|
-
s.add_dependency 'activerecord', '>=
|
33
|
+
s.add_dependency 'activerecord', '>= 6.1.0', '< 7.2'
|
31
34
|
s.add_dependency 'parallel', '< 2.0'
|
32
|
-
s.add_dependency 'public_suffix', '>= 2.0.5', '<
|
33
|
-
s.add_dependency 'rack', '>= 1.3.6', '<
|
35
|
+
s.add_dependency 'public_suffix', '>= 2.0.5', '< 6.0'
|
36
|
+
s.add_dependency 'rack', '>= 1.3.6', '< 4.0'
|
34
37
|
|
35
38
|
s.add_development_dependency 'appraisal', '~> 2.2'
|
36
39
|
s.add_development_dependency 'bundler', '>= 1.3', '< 3.0'
|
@@ -39,11 +42,11 @@ Gem::Specification.new do |s|
|
|
39
42
|
s.add_development_dependency 'rake', '~> 13.0'
|
40
43
|
s.add_development_dependency 'rspec', '~> 3.4'
|
41
44
|
s.add_development_dependency 'rspec_junit_formatter'
|
42
|
-
s.add_development_dependency 'rspec-rails', '~>
|
43
|
-
s.add_development_dependency 'rubocop', '~>
|
44
|
-
s.add_development_dependency 'rubocop-performance', '~> 1.
|
45
|
-
s.add_development_dependency 'rubocop-rails', '~> 2.
|
46
|
-
s.add_development_dependency 'rubocop-rspec', '~>
|
45
|
+
s.add_development_dependency 'rspec-rails', '~> 6.1'
|
46
|
+
s.add_development_dependency 'rubocop', '~> 1.63'
|
47
|
+
s.add_development_dependency 'rubocop-performance', '~> 1.21'
|
48
|
+
s.add_development_dependency 'rubocop-rails', '~> 2.24'
|
49
|
+
s.add_development_dependency 'rubocop-rspec', '~> 2.29'
|
47
50
|
|
48
51
|
if defined?(JRUBY_VERSION)
|
49
52
|
s.add_development_dependency 'activerecord-jdbc-adapter'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ros-apartment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Brunner
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2024-05-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -18,20 +18,20 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 6.1.0
|
22
22
|
- - "<"
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
24
|
+
version: '7.2'
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
28
28
|
requirements:
|
29
29
|
- - ">="
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
version:
|
31
|
+
version: 6.1.0
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '7.2'
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: parallel
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -55,7 +55,7 @@ dependencies:
|
|
55
55
|
version: 2.0.5
|
56
56
|
- - "<"
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version: '
|
58
|
+
version: '6.0'
|
59
59
|
type: :runtime
|
60
60
|
prerelease: false
|
61
61
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 2.0.5
|
66
66
|
- - "<"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '6.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rack
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,7 +75,7 @@ dependencies:
|
|
75
75
|
version: 1.3.6
|
76
76
|
- - "<"
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: '
|
78
|
+
version: '4.0'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -85,7 +85,7 @@ dependencies:
|
|
85
85
|
version: 1.3.6
|
86
86
|
- - "<"
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
88
|
+
version: '4.0'
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
90
|
name: appraisal
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -196,70 +196,70 @@ dependencies:
|
|
196
196
|
requirements:
|
197
197
|
- - "~>"
|
198
198
|
- !ruby/object:Gem::Version
|
199
|
-
version: '
|
199
|
+
version: '6.1'
|
200
200
|
type: :development
|
201
201
|
prerelease: false
|
202
202
|
version_requirements: !ruby/object:Gem::Requirement
|
203
203
|
requirements:
|
204
204
|
- - "~>"
|
205
205
|
- !ruby/object:Gem::Version
|
206
|
-
version: '
|
206
|
+
version: '6.1'
|
207
207
|
- !ruby/object:Gem::Dependency
|
208
208
|
name: rubocop
|
209
209
|
requirement: !ruby/object:Gem::Requirement
|
210
210
|
requirements:
|
211
211
|
- - "~>"
|
212
212
|
- !ruby/object:Gem::Version
|
213
|
-
version: '
|
213
|
+
version: '1.63'
|
214
214
|
type: :development
|
215
215
|
prerelease: false
|
216
216
|
version_requirements: !ruby/object:Gem::Requirement
|
217
217
|
requirements:
|
218
218
|
- - "~>"
|
219
219
|
- !ruby/object:Gem::Version
|
220
|
-
version: '
|
220
|
+
version: '1.63'
|
221
221
|
- !ruby/object:Gem::Dependency
|
222
222
|
name: rubocop-performance
|
223
223
|
requirement: !ruby/object:Gem::Requirement
|
224
224
|
requirements:
|
225
225
|
- - "~>"
|
226
226
|
- !ruby/object:Gem::Version
|
227
|
-
version: '1.
|
227
|
+
version: '1.21'
|
228
228
|
type: :development
|
229
229
|
prerelease: false
|
230
230
|
version_requirements: !ruby/object:Gem::Requirement
|
231
231
|
requirements:
|
232
232
|
- - "~>"
|
233
233
|
- !ruby/object:Gem::Version
|
234
|
-
version: '1.
|
234
|
+
version: '1.21'
|
235
235
|
- !ruby/object:Gem::Dependency
|
236
236
|
name: rubocop-rails
|
237
237
|
requirement: !ruby/object:Gem::Requirement
|
238
238
|
requirements:
|
239
239
|
- - "~>"
|
240
240
|
- !ruby/object:Gem::Version
|
241
|
-
version: '2.
|
241
|
+
version: '2.24'
|
242
242
|
type: :development
|
243
243
|
prerelease: false
|
244
244
|
version_requirements: !ruby/object:Gem::Requirement
|
245
245
|
requirements:
|
246
246
|
- - "~>"
|
247
247
|
- !ruby/object:Gem::Version
|
248
|
-
version: '2.
|
248
|
+
version: '2.24'
|
249
249
|
- !ruby/object:Gem::Dependency
|
250
250
|
name: rubocop-rspec
|
251
251
|
requirement: !ruby/object:Gem::Requirement
|
252
252
|
requirements:
|
253
253
|
- - "~>"
|
254
254
|
- !ruby/object:Gem::Version
|
255
|
-
version: '
|
255
|
+
version: '2.29'
|
256
256
|
type: :development
|
257
257
|
prerelease: false
|
258
258
|
version_requirements: !ruby/object:Gem::Requirement
|
259
259
|
requirements:
|
260
260
|
- - "~>"
|
261
261
|
- !ruby/object:Gem::Version
|
262
|
-
version: '
|
262
|
+
version: '2.29'
|
263
263
|
- !ruby/object:Gem::Dependency
|
264
264
|
name: mysql2
|
265
265
|
requirement: !ruby/object:Gem::Requirement
|
@@ -312,36 +312,22 @@ executables: []
|
|
312
312
|
extensions: []
|
313
313
|
extra_rdoc_files: []
|
314
314
|
files:
|
315
|
-
- ".circleci/config.yml"
|
316
|
-
- ".github/ISSUE_TEMPLATE.md"
|
317
|
-
- ".github/workflows/changelog.yml"
|
318
|
-
- ".github/workflows/reviewdog.yml"
|
319
315
|
- ".gitignore"
|
320
316
|
- ".pryrc"
|
321
317
|
- ".rspec"
|
322
318
|
- ".rubocop.yml"
|
323
319
|
- ".rubocop_todo.yml"
|
324
320
|
- ".ruby-version"
|
325
|
-
- ".story_branch.yml"
|
326
321
|
- Appraisals
|
327
322
|
- CHANGELOG.md
|
328
323
|
- Gemfile
|
329
324
|
- Guardfile
|
330
|
-
- HISTORY.md
|
331
325
|
- README.md
|
332
326
|
- Rakefile
|
333
|
-
- TODO.md
|
334
|
-
- docker-compose.yml
|
335
|
-
- gemfiles/rails_4_2.gemfile
|
336
|
-
- gemfiles/rails_5_0.gemfile
|
337
|
-
- gemfiles/rails_5_1.gemfile
|
338
|
-
- gemfiles/rails_5_2.gemfile
|
339
|
-
- gemfiles/rails_6_0.gemfile
|
340
|
-
- gemfiles/rails_6_1.gemfile
|
341
|
-
- gemfiles/rails_master.gemfile
|
342
327
|
- lib/apartment.rb
|
343
328
|
- lib/apartment/active_record/connection_handling.rb
|
344
329
|
- lib/apartment/active_record/internal_metadata.rb
|
330
|
+
- lib/apartment/active_record/postgresql_adapter.rb
|
345
331
|
- lib/apartment/active_record/schema_migration.rb
|
346
332
|
- lib/apartment/adapters/abstract_adapter.rb
|
347
333
|
- lib/apartment/adapters/abstract_jdbc_adapter.rb
|
@@ -364,7 +350,6 @@ files:
|
|
364
350
|
- lib/apartment/migrator.rb
|
365
351
|
- lib/apartment/model.rb
|
366
352
|
- lib/apartment/railtie.rb
|
367
|
-
- lib/apartment/reloader.rb
|
368
353
|
- lib/apartment/tasks/enhancements.rb
|
369
354
|
- lib/apartment/tasks/task_helper.rb
|
370
355
|
- lib/apartment/tenant.rb
|
@@ -377,7 +362,8 @@ files:
|
|
377
362
|
homepage: https://github.com/rails-on-services/apartment
|
378
363
|
licenses:
|
379
364
|
- MIT
|
380
|
-
metadata:
|
365
|
+
metadata:
|
366
|
+
github_repo: ssh://github.com/rails-on-services/apartment
|
381
367
|
post_install_message:
|
382
368
|
rdoc_options: []
|
383
369
|
require_paths:
|
@@ -393,7 +379,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
393
379
|
- !ruby/object:Gem::Version
|
394
380
|
version: '0'
|
395
381
|
requirements: []
|
396
|
-
rubygems_version: 3.
|
382
|
+
rubygems_version: 3.3.26
|
397
383
|
signing_key:
|
398
384
|
specification_version: 4
|
399
385
|
summary: A Ruby gem for managing database multitenancy. Apartment Gem drop in replacement
|