ros-apartment 2.3.0.alpha2 → 2.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/.rubocop-linter.yml +22 -0
- data/.pryrc +5 -3
- data/.rubocop.yml +21 -0
- data/.rubocop_todo.yml +29 -0
- data/.story_branch.yml +4 -0
- data/.travis.yml +15 -36
- data/Appraisals +16 -29
- data/Gemfile +4 -1
- data/Guardfile +3 -1
- data/HISTORY.md +7 -0
- data/README.md +80 -39
- data/Rakefile +45 -23
- data/apartment.gemspec +33 -25
- data/gemfiles/rails_4_2.gemfile +12 -10
- data/gemfiles/rails_5_0.gemfile +2 -1
- data/gemfiles/rails_5_1.gemfile +2 -1
- data/gemfiles/rails_5_2.gemfile +2 -1
- data/gemfiles/rails_6_0.gemfile +6 -5
- data/gemfiles/rails_master.gemfile +2 -1
- data/lib/apartment.rb +36 -11
- data/lib/apartment/active_record/connection_handling.rb +17 -0
- data/lib/apartment/active_record/internal_metadata.rb +11 -0
- data/lib/apartment/active_record/schema_migration.rb +13 -0
- data/lib/apartment/adapters/abstract_adapter.rb +50 -45
- data/lib/apartment/adapters/abstract_jdbc_adapter.rb +4 -3
- data/lib/apartment/adapters/jdbc_mysql_adapter.rb +3 -3
- data/lib/apartment/adapters/jdbc_postgresql_adapter.rb +20 -13
- data/lib/apartment/adapters/mysql2_adapter.rb +10 -9
- data/lib/apartment/adapters/postgis_adapter.rb +3 -2
- data/lib/apartment/adapters/postgresql_adapter.rb +55 -27
- data/lib/apartment/adapters/sqlite3_adapter.rb +18 -8
- data/lib/apartment/console.rb +35 -3
- data/lib/apartment/custom_console.rb +42 -0
- data/lib/apartment/deprecation.rb +2 -1
- data/lib/apartment/elevators/domain.rb +4 -3
- data/lib/apartment/elevators/first_subdomain.rb +3 -2
- data/lib/apartment/elevators/generic.rb +4 -3
- data/lib/apartment/elevators/host.rb +6 -1
- data/lib/apartment/elevators/host_hash.rb +6 -2
- data/lib/apartment/elevators/subdomain.rb +9 -5
- data/lib/apartment/migrator.rb +4 -3
- data/lib/apartment/model.rb +27 -0
- data/lib/apartment/railtie.rb +26 -15
- data/lib/apartment/reloader.rb +2 -1
- data/lib/apartment/tasks/enhancements.rb +4 -6
- data/lib/apartment/tenant.rb +19 -9
- data/lib/apartment/version.rb +3 -1
- data/lib/generators/apartment/install/install_generator.rb +4 -3
- data/lib/generators/apartment/install/templates/apartment.rb +3 -2
- data/lib/tasks/apartment.rake +24 -19
- metadata +79 -256
- data/spec/adapters/jdbc_mysql_adapter_spec.rb +0 -19
- data/spec/adapters/jdbc_postgresql_adapter_spec.rb +0 -41
- data/spec/adapters/mysql2_adapter_spec.rb +0 -59
- data/spec/adapters/postgresql_adapter_spec.rb +0 -61
- data/spec/adapters/sqlite3_adapter_spec.rb +0 -83
- data/spec/apartment_spec.rb +0 -11
- data/spec/config/database.yml.sample +0 -49
- data/spec/dummy/Rakefile +0 -7
- data/spec/dummy/app/controllers/application_controller.rb +0 -6
- data/spec/dummy/app/helpers/application_helper.rb +0 -2
- data/spec/dummy/app/models/company.rb +0 -3
- data/spec/dummy/app/models/user.rb +0 -3
- data/spec/dummy/app/views/application/index.html.erb +0 -1
- data/spec/dummy/app/views/layouts/application.html.erb +0 -14
- data/spec/dummy/config.ru +0 -4
- data/spec/dummy/config/application.rb +0 -49
- data/spec/dummy/config/boot.rb +0 -11
- data/spec/dummy/config/database.yml.sample +0 -44
- data/spec/dummy/config/environment.rb +0 -5
- data/spec/dummy/config/environments/development.rb +0 -28
- data/spec/dummy/config/environments/production.rb +0 -51
- data/spec/dummy/config/environments/test.rb +0 -34
- data/spec/dummy/config/initializers/apartment.rb +0 -4
- data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/dummy/config/initializers/inflections.rb +0 -10
- data/spec/dummy/config/initializers/mime_types.rb +0 -5
- data/spec/dummy/config/initializers/secret_token.rb +0 -7
- data/spec/dummy/config/initializers/session_store.rb +0 -8
- data/spec/dummy/config/locales/en.yml +0 -5
- data/spec/dummy/config/routes.rb +0 -3
- data/spec/dummy/db/migrate/20110613152810_create_dummy_models.rb +0 -39
- data/spec/dummy/db/migrate/20111202022214_create_table_books.rb +0 -14
- data/spec/dummy/db/migrate/20180415260934_create_public_tokens.rb +0 -13
- data/spec/dummy/db/schema.rb +0 -55
- data/spec/dummy/db/seeds.rb +0 -5
- data/spec/dummy/db/seeds/import.rb +0 -5
- data/spec/dummy/public/404.html +0 -26
- data/spec/dummy/public/422.html +0 -26
- data/spec/dummy/public/500.html +0 -26
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/stylesheets/.gitkeep +0 -0
- data/spec/dummy/script/rails +0 -6
- data/spec/dummy_engine/.gitignore +0 -8
- data/spec/dummy_engine/Gemfile +0 -15
- data/spec/dummy_engine/Rakefile +0 -34
- data/spec/dummy_engine/bin/rails +0 -12
- data/spec/dummy_engine/config/initializers/apartment.rb +0 -51
- data/spec/dummy_engine/dummy_engine.gemspec +0 -24
- data/spec/dummy_engine/lib/dummy_engine.rb +0 -4
- data/spec/dummy_engine/lib/dummy_engine/engine.rb +0 -4
- data/spec/dummy_engine/lib/dummy_engine/version.rb +0 -3
- data/spec/dummy_engine/test/dummy/Rakefile +0 -6
- data/spec/dummy_engine/test/dummy/config.ru +0 -4
- data/spec/dummy_engine/test/dummy/config/application.rb +0 -22
- data/spec/dummy_engine/test/dummy/config/boot.rb +0 -5
- data/spec/dummy_engine/test/dummy/config/database.yml +0 -25
- data/spec/dummy_engine/test/dummy/config/environment.rb +0 -5
- data/spec/dummy_engine/test/dummy/config/environments/development.rb +0 -37
- data/spec/dummy_engine/test/dummy/config/environments/production.rb +0 -78
- data/spec/dummy_engine/test/dummy/config/environments/test.rb +0 -39
- data/spec/dummy_engine/test/dummy/config/initializers/assets.rb +0 -8
- data/spec/dummy_engine/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/dummy_engine/test/dummy/config/initializers/cookies_serializer.rb +0 -3
- data/spec/dummy_engine/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
- data/spec/dummy_engine/test/dummy/config/initializers/inflections.rb +0 -16
- data/spec/dummy_engine/test/dummy/config/initializers/mime_types.rb +0 -4
- data/spec/dummy_engine/test/dummy/config/initializers/session_store.rb +0 -3
- data/spec/dummy_engine/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/spec/dummy_engine/test/dummy/config/locales/en.yml +0 -23
- data/spec/dummy_engine/test/dummy/config/routes.rb +0 -56
- data/spec/dummy_engine/test/dummy/config/secrets.yml +0 -22
- data/spec/examples/connection_adapter_examples.rb +0 -42
- data/spec/examples/generic_adapter_custom_configuration_example.rb +0 -95
- data/spec/examples/generic_adapter_examples.rb +0 -163
- data/spec/examples/schema_adapter_examples.rb +0 -234
- data/spec/integration/apartment_rake_integration_spec.rb +0 -107
- data/spec/integration/query_caching_spec.rb +0 -81
- data/spec/integration/use_within_an_engine_spec.rb +0 -28
- data/spec/schemas/v1.rb +0 -16
- data/spec/schemas/v2.rb +0 -43
- data/spec/schemas/v3.rb +0 -49
- data/spec/spec_helper.rb +0 -61
- data/spec/support/apartment_helpers.rb +0 -43
- data/spec/support/capybara_sessions.rb +0 -15
- data/spec/support/config.rb +0 -10
- data/spec/support/contexts.rb +0 -52
- data/spec/support/requirements.rb +0 -35
- data/spec/support/setup.rb +0 -46
- data/spec/tasks/apartment_rake_spec.rb +0 -129
- data/spec/tenant_spec.rb +0 -190
- data/spec/unit/config_spec.rb +0 -112
- data/spec/unit/elevators/domain_spec.rb +0 -32
- data/spec/unit/elevators/first_subdomain_spec.rb +0 -24
- data/spec/unit/elevators/generic_spec.rb +0 -54
- data/spec/unit/elevators/host_hash_spec.rb +0 -32
- data/spec/unit/elevators/host_spec.rb +0 -89
- data/spec/unit/elevators/subdomain_spec.rb +0 -76
- data/spec/unit/migrator_spec.rb +0 -77
- data/spec/unit/reloader_spec.rb +0 -24
data/Rakefile
CHANGED
@@ -1,19 +1,25 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'bundler'
|
5
|
+
rescue StandardError
|
6
|
+
'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
+
end
|
2
8
|
Bundler.setup
|
3
9
|
Bundler::GemHelper.install_tasks
|
4
10
|
|
5
11
|
require 'appraisal'
|
6
12
|
|
7
|
-
require
|
8
|
-
require
|
13
|
+
require 'rspec'
|
14
|
+
require 'rspec/core/rake_task'
|
9
15
|
|
10
|
-
RSpec::Core::RakeTask.new(:
|
11
|
-
spec.pattern =
|
16
|
+
RSpec::Core::RakeTask.new(spec: %w[db:copy_credentials db:test:prepare]) do |spec|
|
17
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
12
18
|
# spec.rspec_opts = '--order rand:47078'
|
13
19
|
end
|
14
20
|
|
15
21
|
namespace :spec do
|
16
|
-
[
|
22
|
+
%i[tasks unit adapters integration].each do |type|
|
17
23
|
RSpec::Core::RakeTask.new(type => :spec) do |spec|
|
18
24
|
spec.pattern = "spec/#{type}/**/*_spec.rb"
|
19
25
|
end
|
@@ -27,11 +33,11 @@ task :console do
|
|
27
33
|
Pry.start
|
28
34
|
end
|
29
35
|
|
30
|
-
task :
|
36
|
+
task default: :spec
|
31
37
|
|
32
38
|
namespace :db do
|
33
39
|
namespace :test do
|
34
|
-
task :
|
40
|
+
task prepare: %w[postgres:drop_db postgres:build_db mysql:drop_db mysql:build_db]
|
35
41
|
end
|
36
42
|
|
37
43
|
desc "copy sample database credential files over if real files don't exist"
|
@@ -40,29 +46,33 @@ namespace :db do
|
|
40
46
|
apartment_db_file = 'spec/config/database.yml'
|
41
47
|
rails_db_file = 'spec/dummy/config/database.yml'
|
42
48
|
|
43
|
-
FileUtils.copy(apartment_db_file + '.sample', apartment_db_file, :
|
44
|
-
FileUtils.copy(rails_db_file + '.sample', rails_db_file, :
|
49
|
+
FileUtils.copy(apartment_db_file + '.sample', apartment_db_file, verbose: true) unless File.exist?(apartment_db_file)
|
50
|
+
FileUtils.copy(rails_db_file + '.sample', rails_db_file, verbose: true) unless File.exist?(rails_db_file)
|
45
51
|
end
|
46
52
|
end
|
47
53
|
|
48
54
|
namespace :postgres do
|
49
55
|
require 'active_record'
|
50
|
-
require
|
56
|
+
require File.join(File.dirname(__FILE__), 'spec', 'support', 'config').to_s
|
51
57
|
|
52
58
|
desc 'Build the PostgreSQL test databases'
|
53
59
|
task :build_db do
|
54
60
|
params = []
|
55
|
-
params <<
|
61
|
+
params << '-E UTF8'
|
56
62
|
params << pg_config['database']
|
57
63
|
params << "-U#{pg_config['username']}"
|
58
64
|
params << "-h#{pg_config['host']}" if pg_config['host']
|
59
65
|
params << "-p#{pg_config['port']}" if pg_config['port']
|
60
|
-
|
66
|
+
begin
|
67
|
+
`createdb #{params.join(' ')}`
|
68
|
+
rescue StandardError
|
69
|
+
'test db already exists'
|
70
|
+
end
|
61
71
|
ActiveRecord::Base.establish_connection pg_config
|
62
72
|
migrate
|
63
73
|
end
|
64
74
|
|
65
|
-
desc
|
75
|
+
desc 'drop the PostgreSQL test database'
|
66
76
|
task :drop_db do
|
67
77
|
puts "dropping database #{pg_config['database']}"
|
68
78
|
params = []
|
@@ -70,14 +80,13 @@ namespace :postgres do
|
|
70
80
|
params << "-U#{pg_config['username']}"
|
71
81
|
params << "-h#{pg_config['host']}" if pg_config['host']
|
72
82
|
params << "-p#{pg_config['port']}" if pg_config['port']
|
73
|
-
|
83
|
+
`dropdb #{params.join(' ')}`
|
74
84
|
end
|
75
|
-
|
76
85
|
end
|
77
86
|
|
78
87
|
namespace :mysql do
|
79
88
|
require 'active_record'
|
80
|
-
require
|
89
|
+
require File.join(File.dirname(__FILE__), 'spec', 'support', 'config').to_s
|
81
90
|
|
82
91
|
desc 'Build the MySQL test databases'
|
83
92
|
task :build_db do
|
@@ -85,24 +94,29 @@ namespace :mysql do
|
|
85
94
|
params << "-h #{my_config['host']}" if my_config['host']
|
86
95
|
params << "-u #{my_config['username']}" if my_config['username']
|
87
96
|
params << "-p#{my_config['password']}" if my_config['password']
|
88
|
-
|
97
|
+
params << "--port #{my_config['port']}" if my_config['port']
|
98
|
+
begin
|
99
|
+
`mysqladmin #{params.join(' ')} create #{my_config['database']}`
|
100
|
+
rescue StandardError
|
101
|
+
'test db already exists'
|
102
|
+
end
|
89
103
|
ActiveRecord::Base.establish_connection my_config
|
90
104
|
migrate
|
91
105
|
end
|
92
106
|
|
93
|
-
desc
|
107
|
+
desc 'drop the MySQL test database'
|
94
108
|
task :drop_db do
|
95
109
|
puts "dropping database #{my_config['database']}"
|
96
110
|
params = []
|
97
111
|
params << "-h #{my_config['host']}" if my_config['host']
|
98
112
|
params << "-u #{my_config['username']}" if my_config['username']
|
99
113
|
params << "-p#{my_config['password']}" if my_config['password']
|
100
|
-
|
114
|
+
params << "--port #{my_config['port']}" if my_config['port']
|
115
|
+
`mysqladmin #{params.join(' ')} drop #{my_config['database']} --force`
|
101
116
|
end
|
102
|
-
|
103
117
|
end
|
104
118
|
|
105
|
-
# TODO clean this up
|
119
|
+
# TODO: clean this up
|
106
120
|
def config
|
107
121
|
Apartment::Test.config['connections']
|
108
122
|
end
|
@@ -119,10 +133,18 @@ def activerecord_below_5_2?
|
|
119
133
|
ActiveRecord.version.release < Gem::Version.new('5.2.0')
|
120
134
|
end
|
121
135
|
|
136
|
+
def activerecord_below_6_0?
|
137
|
+
ActiveRecord.version.release < Gem::Version.new('6.0.0')
|
138
|
+
end
|
139
|
+
|
122
140
|
def migrate
|
123
141
|
if activerecord_below_5_2?
|
124
142
|
ActiveRecord::Migrator.migrate('spec/dummy/db/migrate')
|
125
|
-
|
143
|
+
elsif activerecord_below_6_0?
|
126
144
|
ActiveRecord::MigrationContext.new('spec/dummy/db/migrate').migrate
|
145
|
+
else
|
146
|
+
# TODO: Figure out if there is any other possibility that can/should be
|
147
|
+
# passed here as the second argument for the migration context
|
148
|
+
ActiveRecord::MigrationContext.new('spec/dummy/db/migrate', ActiveRecord::SchemaMigration).migrate
|
127
149
|
end
|
128
150
|
end
|
data/apartment.gemspec
CHANGED
@@ -1,46 +1,54 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH << File.expand_path('lib', __dir__)
|
4
|
+
require 'apartment/version'
|
4
5
|
|
5
6
|
Gem::Specification.new do |s|
|
6
|
-
s.name =
|
7
|
+
s.name = 'ros-apartment'
|
7
8
|
s.version = Apartment::VERSION
|
8
9
|
|
9
|
-
s.authors = [
|
10
|
-
s.summary =
|
11
|
-
s.description =
|
12
|
-
s.email = [
|
13
|
-
|
14
|
-
|
10
|
+
s.authors = ['Ryan Brunner', 'Brad Robertson', 'Rui Baltazar']
|
11
|
+
s.summary = 'A Ruby gem for managing database multitenancy. Apartment Gem drop in replacement'
|
12
|
+
s.description = 'Apartment allows Rack applications to deal with database multitenancy through ActiveRecord'
|
13
|
+
s.email = ['ryan@influitive.com', 'brad@influitive.com', 'rui.p.baltazar@gmail.com']
|
14
|
+
# Specify which files should be added to the gem when it is released.
|
15
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been
|
16
|
+
# added into git.
|
17
|
+
s.files = Dir.chdir(File.expand_path(__dir__)) do
|
18
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
19
|
+
# NOTE: ignore all test related
|
20
|
+
f.match(%r{^(test|spec|features)/})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
s.executables = s.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
15
24
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
16
|
-
s.require_paths = [
|
25
|
+
s.require_paths = ['lib']
|
17
26
|
|
18
|
-
s.homepage =
|
19
|
-
s.licenses = [
|
27
|
+
s.homepage = 'https://github.com/rails-on-services/apartment'
|
28
|
+
s.licenses = ['MIT']
|
20
29
|
|
21
30
|
# must be >= 3.1.2 due to bug in prepared_statements
|
22
|
-
s.add_dependency 'activerecord', '>=
|
23
|
-
s.add_dependency '
|
24
|
-
s.add_dependency 'public_suffix', '>= 2'
|
25
|
-
s.add_dependency '
|
31
|
+
s.add_dependency 'activerecord', '>= 5.0.0', '< 6.1'
|
32
|
+
s.add_dependency 'parallel', '< 2.0'
|
33
|
+
s.add_dependency 'public_suffix', '>= 2.0.5', '< 5.0'
|
34
|
+
s.add_dependency 'rack', '>= 1.3.6', '< 3.0'
|
26
35
|
|
27
|
-
s.add_development_dependency 'appraisal'
|
36
|
+
s.add_development_dependency 'appraisal', '~> 2.2'
|
37
|
+
s.add_development_dependency 'bundler', '>= 1.3', '< 3.0'
|
38
|
+
s.add_development_dependency 'capybara', '~> 2.0'
|
28
39
|
s.add_development_dependency 'rake', '~> 0.9'
|
29
40
|
s.add_development_dependency 'rspec', '~> 3.4'
|
30
41
|
s.add_development_dependency 'rspec-rails', '~> 3.4'
|
31
|
-
s.add_development_dependency 'capybara', '~> 2.0'
|
32
|
-
s.add_development_dependency 'bundler', '>= 1.3', '< 2.0'
|
33
42
|
|
34
43
|
if defined?(JRUBY_VERSION)
|
35
44
|
s.add_development_dependency 'activerecord-jdbc-adapter'
|
36
|
-
s.add_development_dependency 'activerecord-jdbcpostgresql-adapter'
|
37
45
|
s.add_development_dependency 'activerecord-jdbcmysql-adapter'
|
38
|
-
s.add_development_dependency '
|
46
|
+
s.add_development_dependency 'activerecord-jdbcpostgresql-adapter'
|
39
47
|
s.add_development_dependency 'jdbc-mysql'
|
40
|
-
s.add_development_dependency '
|
48
|
+
s.add_development_dependency 'jdbc-postgres'
|
41
49
|
else
|
42
|
-
s.add_development_dependency 'mysql2'
|
43
|
-
s.add_development_dependency 'pg'
|
50
|
+
s.add_development_dependency 'mysql2', '~> 0.5'
|
51
|
+
s.add_development_dependency 'pg', '~> 1.2'
|
44
52
|
s.add_development_dependency 'sqlite3', '~> 1.3.6'
|
45
53
|
end
|
46
54
|
end
|
data/gemfiles/rails_4_2.gemfile
CHANGED
@@ -1,23 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# This file was generated by Appraisal
|
2
4
|
|
3
|
-
source
|
5
|
+
source 'http://rubygems.org'
|
4
6
|
|
5
|
-
gem
|
7
|
+
gem 'rails', '~> 4.2.0'
|
6
8
|
|
7
9
|
group :local do
|
8
|
-
gem
|
9
|
-
gem
|
10
|
+
gem 'guard-rspec', '~> 4.2'
|
11
|
+
gem 'pry'
|
10
12
|
end
|
11
13
|
|
12
14
|
platforms :ruby do
|
13
|
-
gem
|
14
|
-
gem
|
15
|
+
gem 'mysql2', '~> 0.4.0'
|
16
|
+
gem 'pg', '< 1.0.0'
|
15
17
|
end
|
16
18
|
|
17
19
|
platforms :jruby do
|
18
|
-
gem
|
19
|
-
gem
|
20
|
-
gem
|
20
|
+
gem 'activerecord-jdbc-adapter', '~> 1.3'
|
21
|
+
gem 'activerecord-jdbcmysql-adapter', '~> 1.3'
|
22
|
+
gem 'activerecord-jdbcpostgresql-adapter', '~> 1.3'
|
21
23
|
end
|
22
24
|
|
23
|
-
gemspec path:
|
25
|
+
gemspec path: '../'
|
data/gemfiles/rails_5_0.gemfile
CHANGED
data/gemfiles/rails_5_1.gemfile
CHANGED
data/gemfiles/rails_5_2.gemfile
CHANGED
data/gemfiles/rails_6_0.gemfile
CHANGED
@@ -2,11 +2,12 @@
|
|
2
2
|
|
3
3
|
source "http://rubygems.org"
|
4
4
|
|
5
|
-
gem "
|
5
|
+
gem "perx-rubocop", "~> 0.0.3"
|
6
|
+
gem "rails", "~> 6.0.0"
|
6
7
|
|
7
8
|
group :local do
|
8
|
-
gem "pry"
|
9
9
|
gem "guard-rspec", "~> 4.2"
|
10
|
+
gem "pry"
|
10
11
|
end
|
11
12
|
|
12
13
|
platforms :ruby do
|
@@ -14,9 +15,9 @@ platforms :ruby do
|
|
14
15
|
end
|
15
16
|
|
16
17
|
platforms :jruby do
|
17
|
-
gem "activerecord-jdbc-adapter", "~> 60.0
|
18
|
-
gem "activerecord-jdbcpostgresql-adapter", "~> 60.0
|
19
|
-
gem "activerecord-jdbcmysql-adapter", "~> 60.0
|
18
|
+
gem "activerecord-jdbc-adapter", "~> 60.0"
|
19
|
+
gem "activerecord-jdbcpostgresql-adapter", "~> 60.0"
|
20
|
+
gem "activerecord-jdbcmysql-adapter", "~> 60.0"
|
20
21
|
end
|
21
22
|
|
22
23
|
gemspec path: "../"
|
data/lib/apartment.rb
CHANGED
@@ -1,22 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'apartment/railtie' if defined?(Rails)
|
2
4
|
require 'active_support/core_ext/object/blank'
|
3
5
|
require 'forwardable'
|
4
6
|
require 'active_record'
|
5
7
|
require 'apartment/tenant'
|
6
8
|
|
7
|
-
|
9
|
+
# require_relative 'apartment/arel/visitors/postgresql'
|
8
10
|
|
9
|
-
|
11
|
+
require_relative 'apartment/active_record/connection_handling' if ActiveRecord.version.release >= Gem::Version.new('6.0')
|
10
12
|
|
13
|
+
if ActiveRecord.version.release >= Gem::Version.new('6.1')
|
14
|
+
require_relative 'apartment/active_record/schema_migration'
|
15
|
+
require_relative 'apartment/active_record/internal_metadata'
|
16
|
+
end
|
17
|
+
|
18
|
+
module Apartment
|
19
|
+
class << self
|
11
20
|
extend Forwardable
|
12
21
|
|
13
|
-
ACCESSOR_METHODS
|
14
|
-
|
22
|
+
ACCESSOR_METHODS = %i[use_schemas use_sql seed_after_create prepend_environment
|
23
|
+
append_environment with_multi_server_setup tenant_presence_check].freeze
|
24
|
+
|
25
|
+
WRITER_METHODS = %i[tenant_names database_schema_file excluded_models
|
26
|
+
default_schema persistent_schemas connection_class
|
27
|
+
tld_length db_migrate_tenants seed_data_file
|
28
|
+
parallel_migration_threads pg_excluded_names].freeze
|
15
29
|
|
16
30
|
attr_accessor(*ACCESSOR_METHODS)
|
17
31
|
attr_writer(*WRITER_METHODS)
|
18
32
|
|
19
|
-
|
33
|
+
if ActiveRecord.version.release >= Gem::Version.new('6.1')
|
34
|
+
def_delegators :connection_class, :connection, :connection_db_config, :establish_connection
|
35
|
+
|
36
|
+
def connection_config
|
37
|
+
connection_db_config.configuration_hash
|
38
|
+
end
|
39
|
+
else
|
40
|
+
def_delegators :connection_class, :connection, :connection_config, :establish_connection
|
41
|
+
end
|
20
42
|
|
21
43
|
# configure apartment with available options
|
22
44
|
def configure
|
@@ -32,7 +54,7 @@ module Apartment
|
|
32
54
|
end
|
33
55
|
|
34
56
|
def db_config_for(tenant)
|
35
|
-
(tenants_with_config[tenant] || connection_config)
|
57
|
+
(tenants_with_config[tenant] || connection_config)
|
36
58
|
end
|
37
59
|
|
38
60
|
# Whether or not db:migrate should also migrate tenants
|
@@ -49,14 +71,14 @@ module Apartment
|
|
49
71
|
end
|
50
72
|
|
51
73
|
def default_schema
|
52
|
-
@default_schema ||
|
74
|
+
@default_schema || 'public' # TODO: 'public' is postgres specific
|
53
75
|
end
|
54
76
|
|
55
77
|
def parallel_migration_threads
|
56
78
|
@parallel_migration_threads || 0
|
57
79
|
end
|
58
|
-
alias
|
59
|
-
alias
|
80
|
+
alias default_tenant default_schema
|
81
|
+
alias default_tenant= default_schema=
|
60
82
|
|
61
83
|
def persistent_schemas
|
62
84
|
@persistent_schemas || []
|
@@ -75,7 +97,7 @@ module Apartment
|
|
75
97
|
def seed_data_file
|
76
98
|
return @seed_data_file if defined?(@seed_data_file)
|
77
99
|
|
78
|
-
@seed_data_file =
|
100
|
+
@seed_data_file = Rails.root.join('db', 'seeds.rb')
|
79
101
|
end
|
80
102
|
|
81
103
|
def pg_excluded_names
|
@@ -84,11 +106,14 @@ module Apartment
|
|
84
106
|
|
85
107
|
# Reset all the config for Apartment
|
86
108
|
def reset
|
87
|
-
(ACCESSOR_METHODS + WRITER_METHODS).each
|
109
|
+
(ACCESSOR_METHODS + WRITER_METHODS).each do |method|
|
110
|
+
remove_instance_variable(:"@#{method}") if instance_variable_defined?(:"@#{method}")
|
111
|
+
end
|
88
112
|
end
|
89
113
|
|
90
114
|
def extract_tenant_config
|
91
115
|
return {} unless @tenant_names
|
116
|
+
|
92
117
|
values = @tenant_names.respond_to?(:call) ? @tenant_names.call : @tenant_names
|
93
118
|
unless values.is_a? Hash
|
94
119
|
values = values.each_with_object({}) do |tenant, hash|
|