ros-apartment 2.8.1.rc1 → 2.8.1.rc2
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/.circleci/config.yml +78 -0
- data/.rubocop.yml +5 -0
- data/CHANGELOG.md +1 -0
- data/README.md +1 -1
- data/Rakefile +3 -2
- data/lib/apartment/adapters/abstract_adapter.rb +2 -0
- data/lib/apartment/adapters/postgresql_adapter.rb +2 -2
- data/lib/apartment/console.rb +3 -1
- data/lib/apartment/log_subscriber.rb +5 -1
- data/lib/apartment/railtie.rb +8 -5
- data/lib/apartment/tenant.rb +3 -2
- data/lib/apartment/version.rb +1 -1
- metadata +2 -2
- data/.travis.yml +0 -49
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f4eae53ab581ffa6402db4640424f23f864b8a4f72a1cf38bd35dc200fc014bf
|
|
4
|
+
data.tar.gz: f0ca3c1ae5102e4aa644aab5758543032455d6266fc86c5b3d97bb6e21eab731
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f4bca612be122515d41ab388cf1bc22d96216b0baa8178a6d6d1a52418c932bcafe97f4089dfc1eff3725544ee1044391772f35935b86caf67c66d311e85c7ac
|
|
7
|
+
data.tar.gz: fb489d69d50d6caea7c3a19be53b8e693fb8ea24782c8850eb4efca070eecce7364f3f2fc7d8f17a37e93caeed6a08ef6cfad3dbd7c47857c91442803e44e51c
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
|
|
3
|
+
orbs:
|
|
4
|
+
rubocop: hanachin/rubocop@0.0.6
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
build:
|
|
8
|
+
docker:
|
|
9
|
+
- image: circleci/<< parameters.ruby_version >>
|
|
10
|
+
- image: circleci/postgres:9.6.2-alpine
|
|
11
|
+
- image: circleci/mysql:5.7
|
|
12
|
+
environment:
|
|
13
|
+
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
|
14
|
+
parameters:
|
|
15
|
+
ruby_version:
|
|
16
|
+
type: string
|
|
17
|
+
gemfile:
|
|
18
|
+
type: string
|
|
19
|
+
environment:
|
|
20
|
+
BUNDLE_GEMFILE: << parameters.gemfile >>
|
|
21
|
+
steps:
|
|
22
|
+
- checkout
|
|
23
|
+
# Restore Cached Dependencies
|
|
24
|
+
# - restore_cache:
|
|
25
|
+
# keys:
|
|
26
|
+
# - gem-cache-v1-{{ arch }}-{{ .Branch }}-{{ checksum "<< parameters.gemfile >>.lock" }}
|
|
27
|
+
# - gem-cache-v1-{{ arch }}-{{ .Branch }}
|
|
28
|
+
# - gem-cache-v1
|
|
29
|
+
|
|
30
|
+
- run: bundle install --path vendor/bundle
|
|
31
|
+
|
|
32
|
+
# - save_cache:
|
|
33
|
+
# key: gem-cache-v1-{{ arch }}-{{ .Branch }}-{{ checksum "<< parameters.gemfile >>.lock" }}
|
|
34
|
+
# paths:
|
|
35
|
+
# - vendor/bundle
|
|
36
|
+
|
|
37
|
+
- run:
|
|
38
|
+
name: Install postgres client
|
|
39
|
+
command: sudo apt install -y postgresql-client
|
|
40
|
+
|
|
41
|
+
- run:
|
|
42
|
+
name: Install mysql client
|
|
43
|
+
command: sudo apt install -y default-mysql-client
|
|
44
|
+
|
|
45
|
+
- run:
|
|
46
|
+
name: Configure config database.yml
|
|
47
|
+
command: bundle exec rake db:copy_credentials
|
|
48
|
+
|
|
49
|
+
- run:
|
|
50
|
+
name: wait for postgresql
|
|
51
|
+
command: dockerize -wait tcp://localhost:5432 -timeout 1m
|
|
52
|
+
|
|
53
|
+
- run:
|
|
54
|
+
name: wait for mysql
|
|
55
|
+
command: dockerize -wait tcp://localhost:3306 -timeout 1m
|
|
56
|
+
|
|
57
|
+
- run:
|
|
58
|
+
name: Database Setup
|
|
59
|
+
command: |
|
|
60
|
+
bundle exec rake db:test:prepare
|
|
61
|
+
|
|
62
|
+
- run:
|
|
63
|
+
name: Run tests
|
|
64
|
+
command: bundle exec rspec
|
|
65
|
+
|
|
66
|
+
workflows:
|
|
67
|
+
tests:
|
|
68
|
+
jobs:
|
|
69
|
+
- build:
|
|
70
|
+
matrix:
|
|
71
|
+
parameters:
|
|
72
|
+
ruby_version: ["ruby:2.6-buster", "ruby:2.7-buster"]
|
|
73
|
+
gemfile: ["gemfiles/rails_5_2.gemfile", "gemfiles/rails_6_0.gemfile"]
|
|
74
|
+
|
|
75
|
+
rubocop:
|
|
76
|
+
jobs:
|
|
77
|
+
- rubocop/rubocop:
|
|
78
|
+
version: 0.88.0
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
**Fixed bugs:**
|
|
10
10
|
|
|
11
11
|
- New version raises an error with ActiveSupport::LogSubscriber [#128](https://github.com/rails-on-services/apartment/issues/128)
|
|
12
|
+
- Weird logs when tenant fails to create [#127](<https://github.com/rails-on-services/apartment/issues/127>)
|
|
12
13
|
|
|
13
14
|
**Closed issues:**
|
|
14
15
|
|
data/README.md
CHANGED
data/Rakefile
CHANGED
|
@@ -47,9 +47,9 @@ namespace :db do
|
|
|
47
47
|
rails_db_file = 'spec/dummy/config/database.yml'
|
|
48
48
|
|
|
49
49
|
unless File.exist?(apartment_db_file)
|
|
50
|
-
FileUtils.copy(apartment_db_file
|
|
50
|
+
FileUtils.copy("#{apartment_db_file}.sample", apartment_db_file, verbose: true)
|
|
51
51
|
end
|
|
52
|
-
FileUtils.copy(rails_db_file
|
|
52
|
+
FileUtils.copy("#{rails_db_file}.sample", rails_db_file, verbose: true) unless File.exist?(rails_db_file)
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
@@ -65,6 +65,7 @@ namespace :postgres do
|
|
|
65
65
|
params << "-U#{pg_config['username']}"
|
|
66
66
|
params << "-h#{pg_config['host']}" if pg_config['host']
|
|
67
67
|
params << "-p#{pg_config['port']}" if pg_config['port']
|
|
68
|
+
|
|
68
69
|
begin
|
|
69
70
|
`createdb #{params.join(' ')}`
|
|
70
71
|
rescue StandardError
|
|
@@ -201,11 +201,13 @@ module Apartment
|
|
|
201
201
|
# @param {String} tenant: Database name
|
|
202
202
|
# @param {Boolean} with_database: if true, use the actual tenant's db name
|
|
203
203
|
# if false, use the default db name from the db
|
|
204
|
+
# rubocop:disable Style/OptionalBooleanParameter
|
|
204
205
|
def multi_tenantify(tenant, with_database = true)
|
|
205
206
|
db_connection_config(tenant).tap do |config|
|
|
206
207
|
multi_tenantify_with_tenant_db_name(config, tenant) if with_database
|
|
207
208
|
end
|
|
208
209
|
end
|
|
210
|
+
# rubocop:enable Style/OptionalBooleanParameter
|
|
209
211
|
|
|
210
212
|
def multi_tenantify_with_tenant_db_name(config, tenant)
|
|
211
213
|
config[:database] = environmentify(tenant)
|
|
@@ -98,7 +98,7 @@ module Apartment
|
|
|
98
98
|
|
|
99
99
|
def create_tenant_command(conn, tenant)
|
|
100
100
|
# NOTE: This was causing some tests to fail because of the database strategy for rspec
|
|
101
|
-
if ActiveRecord::Base.connection.open_transactions
|
|
101
|
+
if ActiveRecord::Base.connection.open_transactions.positive?
|
|
102
102
|
conn.execute(%(CREATE SCHEMA "#{tenant}"))
|
|
103
103
|
else
|
|
104
104
|
schema = %(BEGIN;
|
|
@@ -113,7 +113,7 @@ module Apartment
|
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
def rollback_transaction(conn)
|
|
116
|
-
conn.execute(
|
|
116
|
+
conn.execute('ROLLBACK;')
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
# Generate the final search path to set including persistent_schemas
|
data/lib/apartment/console.rb
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# A
|
|
3
|
+
# A workaround to get `reload!` to also call Apartment::Tenant.init
|
|
4
4
|
# This is unfortunate, but I haven't figured out how to hook into the reload process *after* files are reloaded
|
|
5
5
|
|
|
6
6
|
# reloads the environment
|
|
7
|
+
# rubocop:disable Style/OptionalBooleanParameter
|
|
7
8
|
def reload!(print = true)
|
|
8
9
|
puts 'Reloading...' if print
|
|
9
10
|
|
|
@@ -13,6 +14,7 @@ def reload!(print = true)
|
|
|
13
14
|
Apartment::Tenant.init
|
|
14
15
|
true
|
|
15
16
|
end
|
|
17
|
+
# rubocop:enable Style/OptionalBooleanParameter
|
|
16
18
|
|
|
17
19
|
def st(schema_name = nil)
|
|
18
20
|
if schema_name.nil?
|
|
@@ -3,10 +3,14 @@
|
|
|
3
3
|
require 'active_record/log_subscriber'
|
|
4
4
|
|
|
5
5
|
module Apartment
|
|
6
|
+
# Custom Log subscriber to include database name and schema name in sql logs
|
|
6
7
|
class LogSubscriber < ActiveRecord::LogSubscriber
|
|
8
|
+
# NOTE: for some reason, if the method definition is not here, then the custom debug method is not called
|
|
9
|
+
# rubocop:disable Lint/UselessMethodDefinition
|
|
7
10
|
def sql(event)
|
|
8
11
|
super(event)
|
|
9
12
|
end
|
|
13
|
+
# rubocop:enable Lint/UselessMethodDefinition
|
|
10
14
|
|
|
11
15
|
private
|
|
12
16
|
|
|
@@ -17,7 +21,7 @@ module Apartment
|
|
|
17
21
|
end
|
|
18
22
|
|
|
19
23
|
def apartment_log
|
|
20
|
-
database = color("[#{Apartment.connection.
|
|
24
|
+
database = color("[#{Apartment.connection.raw_connection.db}] ", ActiveSupport::LogSubscriber::MAGENTA, true)
|
|
21
25
|
schema = nil
|
|
22
26
|
unless Apartment.connection.schema_search_path.nil?
|
|
23
27
|
schema = color("[#{Apartment.connection.schema_search_path.tr('"', '')}] ",
|
data/lib/apartment/railtie.rb
CHANGED
|
@@ -6,7 +6,6 @@ require 'apartment/reloader'
|
|
|
6
6
|
|
|
7
7
|
module Apartment
|
|
8
8
|
class Railtie < Rails::Railtie
|
|
9
|
-
|
|
10
9
|
#
|
|
11
10
|
# Set up our default config options
|
|
12
11
|
# Do this before the app initializers run so we don't override custom settings
|
|
@@ -27,13 +26,14 @@ module Apartment
|
|
|
27
26
|
end
|
|
28
27
|
|
|
29
28
|
# Hook into ActionDispatch::Reloader to ensure Apartment is properly initialized
|
|
30
|
-
# Note that this
|
|
29
|
+
# Note that this doesn't entirely work as expected in Development,
|
|
30
|
+
# because this is called before classes are reloaded
|
|
31
31
|
# See the middleware/console declarations below to help with this. Hope to fix that soon.
|
|
32
32
|
#
|
|
33
33
|
config.to_prepare do
|
|
34
34
|
next if ARGV.any? { |arg| arg =~ /\Aassets:(?:precompile|clean)\z/ }
|
|
35
35
|
next if ARGV.any? { |arg| arg == 'webpacker:compile' }
|
|
36
|
-
next if ENV[
|
|
36
|
+
next if ENV['APARTMENT_DISABLE_INIT']
|
|
37
37
|
|
|
38
38
|
begin
|
|
39
39
|
Apartment.connection_class.connection_pool.with_connection do
|
|
@@ -45,7 +45,7 @@ module Apartment
|
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
config.after_initialize do
|
|
48
|
+
config.after_initialize do
|
|
49
49
|
# NOTE: Load the custom log subscriber if enabled
|
|
50
50
|
if Apartment.active_record_log
|
|
51
51
|
ActiveSupport::Notifications.unsubscribe 'sql.active_record'
|
|
@@ -72,10 +72,13 @@ module Apartment
|
|
|
72
72
|
app.config.middleware.use Apartment::Reloader
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
-
# Overrides reload! to also call Apartment::Tenant.init as well
|
|
75
|
+
# Overrides reload! to also call Apartment::Tenant.init as well
|
|
76
|
+
# so that the reloaded classes have the proper table_names
|
|
77
|
+
# rubocop:disable Lint/Debugger
|
|
76
78
|
console do
|
|
77
79
|
require 'apartment/console'
|
|
78
80
|
end
|
|
81
|
+
# rubocop:enable Lint/Debugger
|
|
79
82
|
end
|
|
80
83
|
end
|
|
81
84
|
end
|
data/lib/apartment/tenant.rb
CHANGED
|
@@ -24,9 +24,10 @@ module Apartment
|
|
|
24
24
|
adapter_method = "#{config[:adapter]}_adapter"
|
|
25
25
|
|
|
26
26
|
if defined?(JRUBY_VERSION)
|
|
27
|
-
|
|
27
|
+
case config[:adapter]
|
|
28
|
+
when /mysql/
|
|
28
29
|
adapter_method = 'jdbc_mysql_adapter'
|
|
29
|
-
|
|
30
|
+
when /postgresql/
|
|
30
31
|
adapter_method = 'jdbc_postgresql_adapter'
|
|
31
32
|
end
|
|
32
33
|
end
|
data/lib/apartment/version.rb
CHANGED
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: 2.8.1.
|
|
4
|
+
version: 2.8.1.rc2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ryan Brunner
|
|
@@ -228,6 +228,7 @@ executables: []
|
|
|
228
228
|
extensions: []
|
|
229
229
|
extra_rdoc_files: []
|
|
230
230
|
files:
|
|
231
|
+
- ".circleci/config.yml"
|
|
231
232
|
- ".github/ISSUE_TEMPLATE.md"
|
|
232
233
|
- ".github/workflows/changelog.yml"
|
|
233
234
|
- ".gitignore"
|
|
@@ -236,7 +237,6 @@ files:
|
|
|
236
237
|
- ".rubocop.yml"
|
|
237
238
|
- ".rubocop_todo.yml"
|
|
238
239
|
- ".story_branch.yml"
|
|
239
|
-
- ".travis.yml"
|
|
240
240
|
- Appraisals
|
|
241
241
|
- CHANGELOG.md
|
|
242
242
|
- Gemfile
|
data/.travis.yml
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
os: linux
|
|
2
|
-
|
|
3
|
-
language: ruby
|
|
4
|
-
services:
|
|
5
|
-
- docker
|
|
6
|
-
rvm:
|
|
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
|
|
13
|
-
- ruby-head
|
|
14
|
-
|
|
15
|
-
branches:
|
|
16
|
-
only:
|
|
17
|
-
- master
|
|
18
|
-
- development
|
|
19
|
-
|
|
20
|
-
gemfile:
|
|
21
|
-
- gemfiles/rails_5_0.gemfile
|
|
22
|
-
- gemfiles/rails_5_1.gemfile
|
|
23
|
-
- gemfiles/rails_5_2.gemfile
|
|
24
|
-
- gemfiles/rails_6_0.gemfile
|
|
25
|
-
- gemfiles/rails_master.gemfile
|
|
26
|
-
|
|
27
|
-
bundler_args: --without local
|
|
28
|
-
before_install:
|
|
29
|
-
- sudo /etc/init.d/mysql stop
|
|
30
|
-
- sudo /etc/init.d/postgresql stop
|
|
31
|
-
- docker-compose up -d
|
|
32
|
-
|
|
33
|
-
env:
|
|
34
|
-
RUBY_GC_MALLOC_LIMIT: 90000000
|
|
35
|
-
RUBY_GC_HEAP_FREE_SLOTS: 200000
|
|
36
|
-
jobs:
|
|
37
|
-
include:
|
|
38
|
-
- name: Rubocop Lint
|
|
39
|
-
script: gem install rubocop
|
|
40
|
-
|
|
41
|
-
allow_failures:
|
|
42
|
-
- rvm: ruby-head
|
|
43
|
-
- rvm: jruby-head
|
|
44
|
-
- gemfile: gemfiles/rails_master.gemfile
|
|
45
|
-
exclude:
|
|
46
|
-
- rvm: 2.4.10
|
|
47
|
-
gemfile: gemfiles/rails_6_0.gemfile
|
|
48
|
-
fast_finish: true
|
|
49
|
-
cache: bundler
|