ros-apartment 2.3.0 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.pryrc +5 -3
- data/.rubocop.yml +22 -0
- data/.rubocop_todo.yml +29 -0
- data/.story_branch.yml +5 -0
- data/.travis.yml +20 -36
- data/Appraisals +16 -29
- data/Gemfile +5 -2
- data/Guardfile +3 -1
- data/HISTORY.md +57 -0
- data/README.md +64 -21
- data/Rakefile +36 -22
- data/TODO.md +0 -1
- data/apartment.gemspec +17 -10
- 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 +38 -14
- 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/log_subscriber.rb +41 -0
- data/lib/apartment/active_record/schema_migration.rb +13 -0
- data/lib/apartment/adapters/abstract_adapter.rb +49 -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 +12 -9
- data/lib/apartment/adapters/postgis_adapter.rb +3 -2
- data/lib/apartment/adapters/postgresql_adapter.rb +59 -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 +27 -15
- data/lib/apartment/reloader.rb +2 -1
- data/lib/apartment/tasks/enhancements.rb +4 -6
- data/lib/apartment/tasks/task_helper.rb +35 -0
- 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 +8 -2
- data/lib/tasks/apartment.rake +22 -44
- metadata +51 -230
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c5ea61531091303bdf3ab60326eadb7ffda6ea92b03079fd8a93583067037c7
|
4
|
+
data.tar.gz: 95c482e8304a914d6098f1f4ea498f93e1a4827d851e4ea4a283f18ca51079ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09f36cbd0d164f3f692aaf9b2a60b55aa5289537b07c299e49d651a1f1fe6aba6a8d67578076ccad94c2ad62bcaf46e74900c532664f696d1dd4ae673fb49d1d'
|
7
|
+
data.tar.gz: b38b9708487fa0e64c93d8349f922dafe2678b09020f5c5a5e77aca5acff4510254737094636d3c25a03e57e76280a20c403fe4021b6e64bcb3e9956b4a77acb
|
data/.pryrc
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
2
|
+
|
3
|
+
inherit_gem:
|
4
|
+
perx-rubocop:
|
5
|
+
- default.yml
|
6
|
+
|
7
|
+
AllCops:
|
8
|
+
Exclude:
|
9
|
+
- 'gemfiles/**/*.gemfile'
|
10
|
+
- 'gemfiles/vendor/**/*'
|
11
|
+
|
12
|
+
Style/WordArray:
|
13
|
+
Exclude:
|
14
|
+
- spec/schemas/**/*.rb
|
15
|
+
|
16
|
+
Style/NumericLiterals:
|
17
|
+
Exclude:
|
18
|
+
- spec/schemas/**/*.rb
|
19
|
+
|
20
|
+
Layout/EmptyLineAfterMagicComment:
|
21
|
+
Exclude:
|
22
|
+
- spec/schemas/**/*.rb
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2020-02-16 15:36:55 +0800 using RuboCop version 0.77.0.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 5
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 33
|
12
|
+
|
13
|
+
# Offense count: 11
|
14
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
15
|
+
# ExcludedMethods: refine
|
16
|
+
Metrics/BlockLength:
|
17
|
+
Max: 176
|
18
|
+
|
19
|
+
# Offense count: 18
|
20
|
+
# Cop supports --auto-correct.
|
21
|
+
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
22
|
+
# URISchemes: http, https
|
23
|
+
Metrics/LineLength:
|
24
|
+
Max: 200
|
25
|
+
|
26
|
+
# Offense count: 4
|
27
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
28
|
+
Metrics/MethodLength:
|
29
|
+
Max: 24
|
data/.story_branch.yml
ADDED
data/.travis.yml
CHANGED
@@ -4,62 +4,46 @@ language: ruby
|
|
4
4
|
services:
|
5
5
|
- docker
|
6
6
|
rvm:
|
7
|
-
- jruby-9.
|
8
|
-
- 2.
|
9
|
-
- 2.
|
10
|
-
- 2.
|
11
|
-
- 2.
|
12
|
-
-
|
13
|
-
- 2.6.2
|
7
|
+
- jruby-9.2.11.0
|
8
|
+
- 2.4.10
|
9
|
+
- 2.5.8
|
10
|
+
- 2.6.6
|
11
|
+
- 2.7.1
|
12
|
+
- jruby-head
|
14
13
|
- ruby-head
|
14
|
+
|
15
|
+
branches:
|
16
|
+
only:
|
17
|
+
- master
|
18
|
+
- development
|
19
|
+
|
15
20
|
gemfile:
|
16
|
-
- gemfiles/rails_4_2.gemfile
|
17
21
|
- gemfiles/rails_5_0.gemfile
|
18
22
|
- gemfiles/rails_5_1.gemfile
|
19
23
|
- gemfiles/rails_5_2.gemfile
|
20
24
|
- gemfiles/rails_6_0.gemfile
|
21
25
|
- gemfiles/rails_master.gemfile
|
26
|
+
|
22
27
|
bundler_args: --without local
|
23
28
|
before_install:
|
24
29
|
- sudo /etc/init.d/mysql stop
|
25
30
|
- sudo /etc/init.d/postgresql stop
|
26
31
|
- docker-compose up -d
|
27
|
-
|
28
|
-
- gem uninstall bundler -v '>= 2' -x || true
|
29
|
-
- gem install bundler -v '< 2'
|
32
|
+
|
30
33
|
env:
|
31
34
|
RUBY_GC_MALLOC_LIMIT: 90000000
|
32
35
|
RUBY_GC_HEAP_FREE_SLOTS: 200000
|
33
36
|
jobs:
|
37
|
+
include:
|
38
|
+
- name: Rubocop Lint
|
39
|
+
script: gem install perx-rubocop && rubocop
|
40
|
+
|
34
41
|
allow_failures:
|
35
42
|
- rvm: ruby-head
|
43
|
+
- rvm: jruby-head
|
36
44
|
- gemfile: gemfiles/rails_master.gemfile
|
37
|
-
- rvm: jruby-9.1.17.0
|
38
|
-
gemfile: gemfiles/rails_5_0.gemfile
|
39
45
|
exclude:
|
40
|
-
- rvm: 2.
|
41
|
-
gemfile: gemfiles/rails_5_0.gemfile
|
42
|
-
- rvm: 2.1.9
|
43
|
-
gemfile: gemfiles/rails_5_1.gemfile
|
44
|
-
- rvm: 2.1.9
|
45
|
-
gemfile: gemfiles/rails_5_2.gemfile
|
46
|
-
- rvm: 2.1.9
|
47
|
-
gemfile: gemfiles/rails_6_0.gemfile
|
48
|
-
- rvm: 2.1.9
|
49
|
-
gemfile: gemfiles/rails_master.gemfile
|
50
|
-
- rvm: 2.2.9
|
51
|
-
gemfile: gemfiles/rails_6_0.gemfile
|
52
|
-
- rvm: 2.3.6
|
53
|
-
gemfile: gemfiles/rails_6_0.gemfile
|
54
|
-
- rvm: 2.4.3
|
55
|
-
gemfile: gemfiles/rails_6_0.gemfile
|
56
|
-
- rvm: jruby-9.1.17.0
|
57
|
-
gemfile: gemfiles/rails_5_1.gemfile
|
58
|
-
- rvm: jruby-9.1.17.0
|
59
|
-
gemfile: gemfiles/rails_5_2.gemfile
|
60
|
-
- rvm: jruby-9.1.17.0
|
46
|
+
- rvm: 2.4.10
|
61
47
|
gemfile: gemfiles/rails_6_0.gemfile
|
62
|
-
- rvm: jruby-9.1.17.0
|
63
|
-
gemfile: gemfiles/rails_master.gemfile
|
64
48
|
fast_finish: true
|
65
49
|
cache: bundler
|
data/Appraisals
CHANGED
@@ -1,20 +1,9 @@
|
|
1
|
-
|
2
|
-
gem "rails", "~> 4.2.0"
|
3
|
-
platforms :ruby do
|
4
|
-
gem "pg", "< 1.0.0"
|
5
|
-
gem "mysql2", "~> 0.4.0"
|
6
|
-
end
|
7
|
-
platforms :jruby do
|
8
|
-
gem 'activerecord-jdbc-adapter', '~> 1.3'
|
9
|
-
gem 'activerecord-jdbcpostgresql-adapter', '~> 1.3'
|
10
|
-
gem 'activerecord-jdbcmysql-adapter', '~> 1.3'
|
11
|
-
end
|
12
|
-
end
|
1
|
+
# frozen_string_literal: true
|
13
2
|
|
14
|
-
appraise
|
15
|
-
gem
|
3
|
+
appraise 'rails-5-0' do
|
4
|
+
gem 'rails', '~> 5.0.0'
|
16
5
|
platforms :ruby do
|
17
|
-
gem
|
6
|
+
gem 'pg', '< 1.0.0'
|
18
7
|
end
|
19
8
|
platforms :jruby do
|
20
9
|
gem 'activerecord-jdbc-adapter', '~> 50.0'
|
@@ -23,10 +12,10 @@ appraise "rails-5-0" do
|
|
23
12
|
end
|
24
13
|
end
|
25
14
|
|
26
|
-
appraise
|
27
|
-
gem
|
15
|
+
appraise 'rails-5-1' do
|
16
|
+
gem 'rails', '~> 5.1.0'
|
28
17
|
platforms :ruby do
|
29
|
-
gem
|
18
|
+
gem 'pg', '< 1.0.0'
|
30
19
|
end
|
31
20
|
platforms :jruby do
|
32
21
|
gem 'activerecord-jdbc-adapter', '~> 51.0'
|
@@ -35,8 +24,8 @@ appraise "rails-5-1" do
|
|
35
24
|
end
|
36
25
|
end
|
37
26
|
|
38
|
-
appraise
|
39
|
-
gem
|
27
|
+
appraise 'rails-5-2' do
|
28
|
+
gem 'rails', '~> 5.2.0'
|
40
29
|
platforms :jruby do
|
41
30
|
gem 'activerecord-jdbc-adapter', '~> 52.0'
|
42
31
|
gem 'activerecord-jdbcpostgresql-adapter', '~> 52.0'
|
@@ -44,22 +33,20 @@ appraise "rails-5-2" do
|
|
44
33
|
end
|
45
34
|
end
|
46
35
|
|
47
|
-
|
48
|
-
|
49
|
-
gem "rails", "~> 6.0.0.rc1"
|
36
|
+
appraise 'rails-6-0' do
|
37
|
+
gem 'rails', '~> 6.0.0'
|
50
38
|
platforms :ruby do
|
51
39
|
gem 'sqlite3', '~> 1.4'
|
52
40
|
end
|
53
41
|
platforms :jruby do
|
54
|
-
gem 'activerecord-jdbc-adapter', '~> 60.0
|
55
|
-
gem 'activerecord-jdbcpostgresql-adapter', '~> 60.0
|
56
|
-
gem 'activerecord-jdbcmysql-adapter', '~> 60.0
|
42
|
+
gem 'activerecord-jdbc-adapter', '~> 60.0'
|
43
|
+
gem 'activerecord-jdbcpostgresql-adapter', '~> 60.0'
|
44
|
+
gem 'activerecord-jdbcmysql-adapter', '~> 60.0'
|
57
45
|
end
|
58
46
|
end
|
59
47
|
|
60
|
-
|
61
|
-
|
62
|
-
gem "rails", git: 'https://github.com/rails/rails.git'
|
48
|
+
appraise 'rails-master' do
|
49
|
+
gem 'rails', git: 'https://github.com/rails/rails.git'
|
63
50
|
platforms :ruby do
|
64
51
|
gem 'sqlite3', '~> 1.4'
|
65
52
|
end
|
data/Gemfile
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://my.diffend.io/protect/gems'
|
2
4
|
|
3
5
|
gemspec
|
4
6
|
|
7
|
+
gem 'perx-rubocop', '~> 0.0.3'
|
5
8
|
gem 'rails', '>= 3.1.2'
|
6
9
|
|
7
10
|
group :local do
|
8
|
-
gem 'pry'
|
9
11
|
gem 'guard-rspec', '~> 4.2'
|
12
|
+
gem 'pry'
|
10
13
|
end
|
data/Guardfile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# A sample Guardfile
|
2
4
|
# More info at https://github.com/guard/guard#readme
|
3
5
|
|
@@ -5,7 +7,7 @@ guard :rspec do
|
|
5
7
|
watch(%r{^spec/.+_spec\.rb$})
|
6
8
|
watch(%r{^lib/apartment/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
|
7
9
|
watch(%r{^lib/apartment/(.+)\.rb$}) { |m| "spec/integration/#{m[1]}_spec.rb" }
|
8
|
-
watch('spec/spec_helper.rb')
|
10
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
9
11
|
|
10
12
|
# # Rails example
|
11
13
|
# watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
data/HISTORY.md
CHANGED
@@ -1,3 +1,60 @@
|
|
1
|
+
# 2.6.1
|
2
|
+
|
3
|
+
## Enhancements
|
4
|
+
- N/a
|
5
|
+
|
6
|
+
## Bugfixes
|
7
|
+
- [Resolves influitive#607] Avoid early connection
|
8
|
+
- <https://github.com/rails-on-services/apartment/pull/39>
|
9
|
+
- <https://github.com/rails-on-services/apartment/pull/53>
|
10
|
+
- <https://github.com/rails-on-services/apartment/pull/51>
|
11
|
+
- [Resolves #52] Rake db:setup tries to seed non existent tenant - <https://github.com/rails-on-services/apartment/pull/54>
|
12
|
+
- [Resolves #56] DB rollback uses second last migration - <https://github.com/rails-on-services/apartment/pull/57>
|
13
|
+
|
14
|
+
## Chores
|
15
|
+
- N/a
|
16
|
+
|
17
|
+
# 2.6.0
|
18
|
+
|
19
|
+
## Enhancements
|
20
|
+
- [Resolves #26] Support configuration for skip checking of schema existence before switching
|
21
|
+
- [Resolves #41] Add tenant info to console boot
|
22
|
+
|
23
|
+
## Bugfixes
|
24
|
+
- [Resolves #37] Custom Console deprecation warning
|
25
|
+
- [Resolves #42] After switch callback not working with nil argument
|
26
|
+
|
27
|
+
## Chores
|
28
|
+
- Updated github actions configuration to run on PRs as well
|
29
|
+
|
30
|
+
# 2.5.0
|
31
|
+
|
32
|
+
## Enhancements
|
33
|
+
- [Resolves #6] Adds support for rails 6.1
|
34
|
+
- [Resolves #27] Adds support to not rely on set search path, but instead prepends the schema name to the table name when using postgresql with schemas.
|
35
|
+
- [Resolves #35] Cache keys are now tenant dependent
|
36
|
+
|
37
|
+
## Bugfixes
|
38
|
+
- [Resolves #27] Manually switching connection between read and write forgets the schema
|
39
|
+
|
40
|
+
## Chores
|
41
|
+
- [Resolves #31] Add latest ruby versions to test matrix
|
42
|
+
|
43
|
+
# 2.4.0
|
44
|
+
|
45
|
+
## Enhancements
|
46
|
+
- [Resolves #14] Add console info about tenants and fast switches #17
|
47
|
+
- Skip init if we're running webpacker:compile #18
|
48
|
+
|
49
|
+
## Bugfixes
|
50
|
+
- Don't crash when no database connection is present #16
|
51
|
+
- Rescuing ActiveRecord::NoDatabaseError when dropping tenants #19
|
52
|
+
|
53
|
+
## Chores
|
54
|
+
- Rakefile should use mysql port from configuration #5
|
55
|
+
- [Resolves #9] Cleanup rubocop todo #8
|
56
|
+
- Cleanup travis matrix #23
|
57
|
+
|
1
58
|
# 2.3.0
|
2
59
|
* January 3, 2020
|
3
60
|
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Apartment
|
2
2
|
|
3
|
-
[![Gem Version](https://badge.fury.io/rb/apartment.svg)](https://badge.fury.io/rb/apartment)
|
4
|
-
[![Code Climate](https://codeclimate.com/
|
5
|
-
[![Build Status](https://travis-ci.org/
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/ros-apartment.svg)](https://badge.fury.io/rb/apartment)
|
4
|
+
[![Code Climate](https://api.codeclimate.com/v1/badges/b0dc327380bb8438f991/maintainability)](https://codeclimate.com/github/rails-on-services/apartment/maintainability)
|
5
|
+
[![Build Status](https://travis-ci.org/rails-on-services/apartment.svg?branch=development)](https://travis-ci.org/rails-on-services/apartment)
|
6
6
|
|
7
7
|
*Multitenancy for Rails and ActiveRecord*
|
8
8
|
|
@@ -33,7 +33,7 @@ may find or proposing improvements to the gem itself. Feel free to reach out.
|
|
33
33
|
Add the following to your Gemfile:
|
34
34
|
|
35
35
|
```ruby
|
36
|
-
gem 'ros-apartment'
|
36
|
+
gem 'ros-apartment', require: 'apartment'
|
37
37
|
```
|
38
38
|
|
39
39
|
Then generate your `Apartment` config file using
|
@@ -229,7 +229,7 @@ A Generic Elevator exists that allows you to pass a `Proc` (or anything that res
|
|
229
229
|
module MyApplication
|
230
230
|
class Application < Rails::Application
|
231
231
|
# Obviously not a contrived example
|
232
|
-
config.middleware.use Apartment::Elevators::Generic,
|
232
|
+
config.middleware.use Apartment::Elevators::Generic, proc { |request| request.host.reverse }
|
233
233
|
end
|
234
234
|
end
|
235
235
|
```
|
@@ -289,6 +289,27 @@ Apartment::Tenant.drop('tenant_name')
|
|
289
289
|
|
290
290
|
When method is called, the schema is dropped and all data from itself will be lost. Be careful with this method.
|
291
291
|
|
292
|
+
### Custom Prompt
|
293
|
+
|
294
|
+
#### Console methods
|
295
|
+
|
296
|
+
`ros-apartment` console configures two helper methods:
|
297
|
+
1. `tenant_list` - list available tenants while using the console
|
298
|
+
2. `st(tenant_name:String)` - Switches the context to the tenant name passed, if
|
299
|
+
it exists.
|
300
|
+
|
301
|
+
#### Custom printed prompt
|
302
|
+
|
303
|
+
`ros-apartment` also has a custom prompt that gives a bit more information about
|
304
|
+
the context in which you're running. It shows the environment as well as the tenant
|
305
|
+
that is currently switched to. In order for you to enable this, you need to require
|
306
|
+
the custom console in your application.
|
307
|
+
|
308
|
+
In `application.rb` add `require 'apartment/custom_console'`.
|
309
|
+
Please note that we rely on `pry-rails` to edit the prompt, thus your project needs
|
310
|
+
to install it as well. In order to do so, you need to add `gem 'pry-rails'` to your
|
311
|
+
project's gemfile.
|
312
|
+
|
292
313
|
## Config
|
293
314
|
|
294
315
|
The following config options should be set up in a Rails initializer such as:
|
@@ -303,6 +324,20 @@ Apartment.configure do |config|
|
|
303
324
|
end
|
304
325
|
```
|
305
326
|
|
327
|
+
### Skip tenant schema check
|
328
|
+
|
329
|
+
This is configurable by setting: `tenant_presence_check`. It defaults to true
|
330
|
+
in order to maintain the original gem behavior. This is only checked when using one of the PostgreSQL adapters.
|
331
|
+
The original gem behavior, when running `switch` would look for the existence of the schema before switching. This adds an extra query on every context switch. While in the default simple scenarios this is a valid check, in high volume platforms this adds some unnecessary overhead which can be detected in some other ways on the application level.
|
332
|
+
|
333
|
+
Setting this configuration value to `false` will disable the schema presence check before trying to switch the context.
|
334
|
+
|
335
|
+
```ruby
|
336
|
+
Apartment.configure do |config|
|
337
|
+
tenant_presence_check = false
|
338
|
+
end
|
339
|
+
```
|
340
|
+
|
306
341
|
### Excluding models
|
307
342
|
|
308
343
|
If you have some models that should always access the 'public' tenant, you can specify this by configuring Apartment using `Apartment.configure`. This will yield a config object for you. You can set excluded models like so:
|
@@ -320,17 +355,30 @@ Rails will always access the 'public' tenant when accessing these models, but no
|
|
320
355
|
|
321
356
|
### Postgresql Schemas
|
322
357
|
|
323
|
-
|
358
|
+
#### Alternative: Creating new schemas by using raw SQL dumps
|
359
|
+
|
360
|
+
Apartment can be forced to use raw SQL dumps insted of `schema.rb` for creating new schemas. Use this when you are using some extra features in postgres that can't be represented in `schema.rb`, like materialized views etc.
|
361
|
+
|
362
|
+
This only applies while using postgres adapter and `config.use_schemas` is set to `true`.
|
363
|
+
(Note: this option doesn't use `db/structure.sql`, it creates SQL dump by executing `pg_dump`)
|
364
|
+
|
365
|
+
Enable this option with:
|
366
|
+
|
367
|
+
```ruby
|
368
|
+
config.use_sql = true
|
369
|
+
```
|
370
|
+
|
371
|
+
### Providing a Different default_tenant
|
324
372
|
|
325
373
|
By default, ActiveRecord will use `"$user", public` as the default `schema_search_path`. This can be modified if you wish to use a different default schema be setting:
|
326
374
|
|
327
375
|
```ruby
|
328
|
-
config.
|
376
|
+
config.default_tenant = "some_other_schema"
|
329
377
|
```
|
330
378
|
|
331
379
|
With that set, all excluded models will use this schema as the table name prefix instead of `public` and `reset` on `Apartment::Tenant` will return to this schema as well.
|
332
380
|
|
333
|
-
|
381
|
+
### Persistent Schemas
|
334
382
|
|
335
383
|
Apartment will normally just switch the `schema_search_path` whole hog to the one passed in. This can lead to problems if you want other schemas to always be searched as well. Enter `persistent_schemas`. You can configure a list of other schemas that will always remain in the search path, while the default gets swapped out:
|
336
384
|
|
@@ -398,7 +446,7 @@ schema_search_path: "public,shared_extensions"
|
|
398
446
|
...
|
399
447
|
```
|
400
448
|
|
401
|
-
This would be for a config with `
|
449
|
+
This would be for a config with `default_tenant` set to `public` and `persistent_schemas` set to `['shared_extensions']`. **Note**: This only works on Heroku with [Rails 4.1+](https://devcenter.heroku.com/changelog-items/426). For apps that use older Rails versions hosted on Heroku, the only way to properly setup is to start with a fresh PostgreSQL instance:
|
402
450
|
|
403
451
|
1. Append `?schema_search_path=public,hstore` to your `DATABASE_URL` environment variable, by this you don't have to revise the `database.yml` file (which is impossible since Heroku regenerates a completely different and immutable `database.yml` of its own on each deploy)
|
404
452
|
2. Run `heroku pg:psql` from your command line
|
@@ -436,18 +484,6 @@ schema in the `search_path` at all times. We won't be able to do this though unt
|
|
436
484
|
also contain the tenanted tables, which is an open issue with no real milestone to be completed.
|
437
485
|
Happy to accept PR's on the matter.
|
438
486
|
|
439
|
-
#### Alternative: Creating new schemas by using raw SQL dumps
|
440
|
-
|
441
|
-
Apartment can be forced to use raw SQL dumps insted of `schema.rb` for creating new schemas. Use this when you are using some extra features in postgres that can't be represented in `schema.rb`, like materialized views etc.
|
442
|
-
|
443
|
-
This only applies while using postgres adapter and `config.use_schemas` is set to `true`.
|
444
|
-
(Note: this option doesn't use `db/structure.sql`, it creates SQL dump by executing `pg_dump`)
|
445
|
-
|
446
|
-
Enable this option with:
|
447
|
-
```ruby
|
448
|
-
config.use_sql = true
|
449
|
-
```
|
450
|
-
|
451
487
|
### Managing Migrations
|
452
488
|
|
453
489
|
In order to migrate all of your tenants (or postgresql schemas) you need to provide a list
|
@@ -569,6 +605,13 @@ end
|
|
569
605
|
|
570
606
|
* If you're looking to help, check out the TODO file for some upcoming changes I'd like to implement in Apartment.
|
571
607
|
|
608
|
+
### Running bundle install
|
609
|
+
|
610
|
+
mysql2 gem in some cases fails to install.
|
611
|
+
If you face problems running bundle install in OSX, try installing the gem running:
|
612
|
+
|
613
|
+
`gem install mysql2 -v '0.5.3' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include`
|
614
|
+
|
572
615
|
## License
|
573
616
|
|
574
617
|
Apartment is released under the [MIT License](http://www.opensource.org/licenses/MIT).
|