apartment 0.22.1 → 0.23.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 +4 -4
- data/.gitignore +2 -2
- data/.rspec +2 -1
- data/.travis.yml +3 -1
- data/Appraisals +7 -0
- data/Gemfile +0 -21
- data/HISTORY.md +6 -0
- data/README.md +13 -71
- data/Rakefile +4 -2
- data/TODO.md +0 -5
- data/apartment.gemspec +19 -0
- data/gemfiles/rails3.2.gemfile +7 -0
- data/gemfiles/rails4.0.gemfile +7 -0
- data/lib/apartment.rb +2 -28
- data/lib/apartment/adapters/abstract_adapter.rb +0 -2
- data/lib/apartment/adapters/abstract_jdbc_adapter.rb +2 -0
- data/lib/apartment/adapters/jdbc_mysql_adapter.rb +2 -0
- data/lib/apartment/adapters/jdbc_postgresql_adapter.rb +1 -1
- data/lib/apartment/adapters/mysql2_adapter.rb +2 -3
- data/lib/apartment/adapters/postgis_adapter.rb +0 -1
- data/lib/apartment/adapters/postgresql_adapter.rb +2 -3
- data/lib/apartment/adapters/sqlite3_adapter.rb +2 -0
- data/lib/apartment/database.rb +0 -4
- data/lib/apartment/elevators/domain.rb +2 -0
- data/lib/apartment/elevators/first_subdomain.rb +2 -0
- data/lib/apartment/elevators/generic.rb +3 -0
- data/lib/apartment/elevators/host_hash.rb +2 -0
- data/lib/apartment/elevators/subdomain.rb +19 -2
- data/lib/apartment/migrator.rb +2 -1
- data/lib/apartment/railtie.rb +2 -2
- data/lib/apartment/reloader.rb +0 -3
- data/lib/apartment/version.rb +2 -2
- data/lib/tasks/apartment.rake +2 -0
- data/spec/adapters/jdbc_mysql_adapter_spec.rb +1 -3
- data/spec/adapters/jdbc_postgresql_adapter_spec.rb +1 -3
- data/spec/adapters/mysql2_adapter_spec.rb +1 -2
- data/spec/adapters/postgresql_adapter_spec.rb +1 -2
- data/spec/adapters/sqlite3_adapter_spec.rb +1 -2
- data/spec/database_spec.rb +32 -50
- data/spec/dummy/app/models/user.rb +0 -2
- data/spec/dummy/config/application.rb +2 -0
- data/spec/dummy/config/environments/development.rb +2 -0
- data/spec/dummy/config/environments/production.rb +2 -0
- data/spec/dummy/config/environments/test.rb +1 -2
- data/spec/dummy/config/initializers/apartment.rb +1 -1
- data/spec/dummy/db/seeds.rb +1 -4
- data/spec/examples/elevator_examples.rb +4 -4
- data/spec/integration/apartment_rake_integration_spec.rb +15 -19
- data/spec/integration/middleware/domain_elevator_spec.rb +4 -3
- data/spec/integration/middleware/generic_elevator_spec.rb +4 -3
- data/spec/integration/middleware/subdomain_elevator_spec.rb +29 -3
- data/spec/integration/query_caching_spec.rb +8 -4
- data/spec/schemas/v1.rb +16 -0
- data/spec/schemas/v2.rb +43 -0
- data/spec/schemas/v3.rb +49 -0
- data/spec/spec_helper.rb +5 -11
- data/spec/support/apartment_helpers.rb +4 -2
- data/spec/support/contexts.rb +15 -19
- data/spec/support/requirements.rb +1 -17
- data/spec/support/setup.rb +47 -0
- data/spec/tasks/apartment_rake_spec.rb +6 -3
- data/spec/unit/config_spec.rb +3 -3
- data/spec/unit/middleware/domain_elevator_spec.rb +1 -2
- data/spec/{integration → unit}/middleware/first_subdomain_elevator_spec.rb +1 -0
- data/spec/unit/middleware/host_hash_elevator_spec.rb +1 -2
- data/spec/unit/middleware/subdomain_elevator_spec.rb +1 -2
- data/spec/unit/migrator_spec.rb +5 -4
- data/spec/unit/reloader_spec.rb +6 -4
- metadata +130 -14
- data/lib/apartment/delayed_job/enqueue.rb +0 -26
- data/lib/apartment/delayed_job/hooks.rb +0 -26
- data/lib/apartment/delayed_job/psych_ext.rb +0 -61
- data/lib/apartment/delayed_job/requirements.rb +0 -23
- data/lib/apartment/delayed_job/syck_ext.rb +0 -29
- data/spec/dummy/lib/fake_dj_class.rb +0 -6
- data/spec/integration/delayed_job_integration_spec.rb +0 -99
@@ -1,34 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'rake'
|
3
3
|
|
4
|
-
describe "apartment rake tasks" do
|
4
|
+
describe "apartment rake tasks", database: :postgresql do
|
5
5
|
|
6
6
|
before do
|
7
7
|
@rake = Rake::Application.new
|
8
8
|
Rake.application = @rake
|
9
9
|
Dummy::Application.load_tasks
|
10
10
|
|
11
|
-
#
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
after do
|
19
|
-
Rake.application = nil
|
20
|
-
end
|
11
|
+
# rails tasks running F up the schema...
|
12
|
+
Rake::Task.define_task('db:migrate')
|
13
|
+
Rake::Task.define_task('db:seed')
|
14
|
+
Rake::Task.define_task('db:rollback')
|
15
|
+
Rake::Task.define_task('db:migrate:up')
|
16
|
+
Rake::Task.define_task('db:migrate:down')
|
17
|
+
Rake::Task.define_task('db:migrate:redo')
|
21
18
|
|
22
|
-
before do
|
23
19
|
Apartment.configure do |config|
|
20
|
+
config.use_schemas = true
|
24
21
|
config.excluded_models = ["Company"]
|
25
|
-
config.database_names = lambda{ Company.
|
22
|
+
config.database_names = lambda{ Company.pluck(:database) }
|
26
23
|
end
|
24
|
+
Apartment::Database.reload!(config)
|
27
25
|
|
28
26
|
# fix up table name of shared/excluded models
|
29
27
|
Company.table_name = 'public.companies'
|
30
28
|
end
|
31
29
|
|
30
|
+
after { Rake.application = nil }
|
31
|
+
|
32
32
|
context "with x number of databases" do
|
33
33
|
|
34
34
|
let(:x){ 1 + rand(5) } # random number of dbs to create
|
@@ -49,7 +49,7 @@ describe "apartment rake tasks" do
|
|
49
49
|
|
50
50
|
describe "#migrate" do
|
51
51
|
it "should migrate all databases" do
|
52
|
-
|
52
|
+
ActiveRecord::Migrator.should_receive(:migrate).exactly(company_count+1).times
|
53
53
|
|
54
54
|
@rake['apartment:migrate'].invoke
|
55
55
|
end
|
@@ -57,12 +57,9 @@ describe "apartment rake tasks" do
|
|
57
57
|
|
58
58
|
describe "#rollback" do
|
59
59
|
it "should rollback all dbs" do
|
60
|
-
|
61
|
-
Apartment::Migrator.should_receive(:rollback).with(name, anything)
|
62
|
-
end
|
60
|
+
ActiveRecord::Migrator.should_receive(:rollback).exactly(company_count+1).times
|
63
61
|
|
64
62
|
@rake['apartment:rollback'].invoke
|
65
|
-
@rake['apartment:migrate'].invoke # migrate again so that our next test 'seed' can run (requires migrations to be complete)
|
66
63
|
end
|
67
64
|
end
|
68
65
|
|
@@ -73,6 +70,5 @@ describe "apartment rake tasks" do
|
|
73
70
|
@rake['apartment:seed'].invoke
|
74
71
|
end
|
75
72
|
end
|
76
|
-
|
77
73
|
end
|
78
74
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'apartment/elevators/domain'
|
2
3
|
|
3
|
-
describe Apartment::Elevators::Domain, :
|
4
|
+
describe Apartment::Elevators::Domain, elevator: true do
|
4
5
|
|
5
|
-
let(:domain1) { "http://#{
|
6
|
-
let(:domain2) { "http://#{
|
6
|
+
let(:domain1) { "http://#{db1}.com" }
|
7
|
+
let(:domain2) { "http://#{db2}.com" }
|
7
8
|
|
8
9
|
it_should_behave_like "an apartment elevator"
|
9
10
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'apartment/elevators/generic'
|
2
3
|
|
3
|
-
describe Apartment::Elevators::Generic, :
|
4
|
+
describe Apartment::Elevators::Generic, elevator: true do
|
4
5
|
|
5
6
|
# NOTE, see spec/dummy/config/application.rb to see the Proc that defines the behaviour here
|
6
|
-
let(:domain1) { "http://#{
|
7
|
-
let(:domain2) { "http://#{
|
7
|
+
let(:domain1) { "http://#{db1}.com?db=#{db1}" }
|
8
|
+
let(:domain2) { "http://#{db2}.com?db=#{db2}" }
|
8
9
|
|
9
10
|
it_should_behave_like "an apartment elevator"
|
10
11
|
end
|
@@ -1,9 +1,35 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'apartment/elevators/generic'
|
2
3
|
|
3
|
-
describe Apartment::Elevators::Subdomain, :
|
4
|
+
describe Apartment::Elevators::Subdomain, elevator: true do
|
4
5
|
|
5
|
-
let(:domain1) { "http://#{
|
6
|
-
let(:domain2) { "http://#{
|
6
|
+
let(:domain1) { "http://#{db1}.example.com" }
|
7
|
+
let(:domain2) { "http://#{db2}.example.com" }
|
7
8
|
|
8
9
|
it_should_behave_like "an apartment elevator"
|
10
|
+
|
11
|
+
context "With Subdomain Excluded" do
|
12
|
+
let(:domain_with_excluded_subdomain) { "http://www.example.com" }
|
13
|
+
|
14
|
+
before do
|
15
|
+
Apartment::Elevators::Subdomain.excluded_subdomains = %w(www)
|
16
|
+
# FIXME:
|
17
|
+
# This is used because the dummy app includes all three middlewares. The domain middleware specifically
|
18
|
+
# tries to lookup the example schema and tries to switch to it. I don't know how to go around this.
|
19
|
+
Apartment::Database.create("example")
|
20
|
+
end
|
21
|
+
|
22
|
+
it_should_behave_like "an apartment elevator"
|
23
|
+
|
24
|
+
it "shouldnt switch the schema if the subdomain is excluded" do
|
25
|
+
ActiveRecord::Base.connection.schema_search_path.scan(/\w+/).should_not include("www")
|
26
|
+
visit(domain_with_excluded_subdomain)
|
27
|
+
ActiveRecord::Base.connection.schema_search_path.scan(/\w+/).should_not include("www")
|
28
|
+
end
|
29
|
+
|
30
|
+
after do
|
31
|
+
Apartment::Elevators::Subdomain.excluded_subdomains = []
|
32
|
+
Apartment::Database.drop("example")
|
33
|
+
end
|
34
|
+
end
|
9
35
|
end
|
@@ -1,25 +1,29 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'query caching' do
|
4
|
+
let(:db_names) { [db1, db2] }
|
5
|
+
|
4
6
|
before do
|
5
7
|
Apartment.configure do |config|
|
6
8
|
config.excluded_models = ["Company"]
|
7
|
-
config.database_names = lambda{ Company.
|
9
|
+
config.database_names = lambda{ Company.pluck(:database) }
|
10
|
+
config.use_schemas = true
|
8
11
|
end
|
9
12
|
|
13
|
+
Apartment::Database.reload!(config)
|
14
|
+
|
10
15
|
db_names.each do |db_name|
|
11
16
|
Apartment::Database.create(db_name)
|
12
|
-
Company.create :
|
17
|
+
Company.create database: db_name
|
13
18
|
end
|
14
19
|
end
|
15
20
|
|
16
21
|
after do
|
17
22
|
db_names.each{ |db| Apartment::Database.drop(db) }
|
23
|
+
Apartment::Database.reset
|
18
24
|
Company.delete_all
|
19
25
|
end
|
20
26
|
|
21
|
-
let(:db_names) { 2.times.map{ Apartment::Test.next_db } }
|
22
|
-
|
23
27
|
it 'clears the ActiveRecord::QueryCache after switching databases' do
|
24
28
|
db_names.each do |db_name|
|
25
29
|
Apartment::Database.switch db_name
|
data/spec/schemas/v1.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# This file is auto-generated from the current state of the database. Instead
|
3
|
+
# of editing this file, please use the migrations feature of Active Record to
|
4
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
+
#
|
6
|
+
# Note that this schema.rb definition is the authoritative source for your
|
7
|
+
# database schema. If you need to create the application database on another
|
8
|
+
# system, you should be using db:schema:load, not running all the migrations
|
9
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
+
#
|
12
|
+
# It's strongly recommended to check this file into your version control system.
|
13
|
+
|
14
|
+
ActiveRecord::Schema.define(:version => 0) do
|
15
|
+
|
16
|
+
end
|
data/spec/schemas/v2.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# This file is auto-generated from the current state of the database. Instead
|
3
|
+
# of editing this file, please use the migrations feature of Active Record to
|
4
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
+
#
|
6
|
+
# Note that this schema.rb definition is the authoritative source for your
|
7
|
+
# database schema. If you need to create the application database on another
|
8
|
+
# system, you should be using db:schema:load, not running all the migrations
|
9
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
+
#
|
12
|
+
# It's strongly recommended to check this file into your version control system.
|
13
|
+
|
14
|
+
ActiveRecord::Schema.define(:version => 20110613152810) do
|
15
|
+
|
16
|
+
create_table "companies", :force => true do |t|
|
17
|
+
t.boolean "dummy"
|
18
|
+
t.string "database"
|
19
|
+
end
|
20
|
+
|
21
|
+
create_table "delayed_jobs", :force => true do |t|
|
22
|
+
t.integer "priority", :default => 0
|
23
|
+
t.integer "attempts", :default => 0
|
24
|
+
t.text "handler"
|
25
|
+
t.text "last_error"
|
26
|
+
t.datetime "run_at"
|
27
|
+
t.datetime "locked_at"
|
28
|
+
t.datetime "failed_at"
|
29
|
+
t.string "locked_by"
|
30
|
+
t.datetime "created_at"
|
31
|
+
t.datetime "updated_at"
|
32
|
+
t.string "queue"
|
33
|
+
end
|
34
|
+
|
35
|
+
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
|
36
|
+
|
37
|
+
create_table "users", :force => true do |t|
|
38
|
+
t.string "name"
|
39
|
+
t.datetime "birthdate"
|
40
|
+
t.string "sex"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/spec/schemas/v3.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# This file is auto-generated from the current state of the database. Instead
|
3
|
+
# of editing this file, please use the migrations feature of Active Record to
|
4
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
+
#
|
6
|
+
# Note that this schema.rb definition is the authoritative source for your
|
7
|
+
# database schema. If you need to create the application database on another
|
8
|
+
# system, you should be using db:schema:load, not running all the migrations
|
9
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
+
#
|
12
|
+
# It's strongly recommended to check this file into your version control system.
|
13
|
+
|
14
|
+
ActiveRecord::Schema.define(:version => 20111202022214) do
|
15
|
+
|
16
|
+
create_table "books", :force => true do |t|
|
17
|
+
t.string "name"
|
18
|
+
t.integer "pages"
|
19
|
+
t.datetime "published"
|
20
|
+
end
|
21
|
+
|
22
|
+
create_table "companies", :force => true do |t|
|
23
|
+
t.boolean "dummy"
|
24
|
+
t.string "database"
|
25
|
+
end
|
26
|
+
|
27
|
+
create_table "delayed_jobs", :force => true do |t|
|
28
|
+
t.integer "priority", :default => 0
|
29
|
+
t.integer "attempts", :default => 0
|
30
|
+
t.text "handler"
|
31
|
+
t.text "last_error"
|
32
|
+
t.datetime "run_at"
|
33
|
+
t.datetime "locked_at"
|
34
|
+
t.datetime "failed_at"
|
35
|
+
t.string "locked_by"
|
36
|
+
t.datetime "created_at"
|
37
|
+
t.datetime "updated_at"
|
38
|
+
t.string "queue"
|
39
|
+
end
|
40
|
+
|
41
|
+
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
|
42
|
+
|
43
|
+
create_table "users", :force => true do |t|
|
44
|
+
t.string "name"
|
45
|
+
t.datetime "birthdate"
|
46
|
+
t.string "sex"
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -23,21 +23,15 @@ Rails.backtrace_cleaner.remove_silencers!
|
|
23
23
|
# Load support files
|
24
24
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
25
25
|
|
26
|
-
|
27
26
|
RSpec.configure do |config|
|
28
27
|
|
29
|
-
config.include RSpec::Integration::CapybaraSessions, :
|
30
|
-
|
31
|
-
config.before(:all) do
|
32
|
-
# Ensure that each test starts with a clean connection
|
33
|
-
# Necessary as some tests will leak things like current_schema into the next test
|
34
|
-
ActiveRecord::Base.clear_all_connections!
|
35
|
-
end
|
28
|
+
config.include RSpec::Integration::CapybaraSessions, type: :request
|
29
|
+
config.include Apartment::Spec::Setup
|
36
30
|
|
37
|
-
|
38
|
-
|
31
|
+
# Somewhat brutal hack so that rails 4 postgres extensions don't modify this file
|
32
|
+
config.after(:suite) do
|
33
|
+
`git checkout -- spec/dummy/db/schema.rb`
|
39
34
|
end
|
40
|
-
|
41
35
|
end
|
42
36
|
|
43
37
|
# Load shared examples, must happen after configure for RSpec 3
|
@@ -25,8 +25,10 @@ module Apartment
|
|
25
25
|
ActiveRecord::Base.connection.execute("CREATE SCHEMA #{schema}")
|
26
26
|
end
|
27
27
|
|
28
|
-
def load_schema
|
29
|
-
|
28
|
+
def load_schema(version = 3)
|
29
|
+
file = File.expand_path("../../schemas/v#{version}.rb", __FILE__)
|
30
|
+
|
31
|
+
silence_stream(STDOUT){ load(file) }
|
30
32
|
end
|
31
33
|
|
32
34
|
def migrate
|
data/spec/support/contexts.rb
CHANGED
@@ -16,28 +16,24 @@ shared_context "with default schema", :default_schema => true do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# Some default setup for elevator specs
|
19
|
-
shared_context "elevators", :
|
20
|
-
|
21
|
-
|
19
|
+
shared_context "elevators", elevator: true do
|
20
|
+
let(:company1) { mock_model(Company, database: db1).as_null_object }
|
21
|
+
let(:company2) { mock_model(Company, database: db2).as_null_object }
|
22
22
|
|
23
|
-
|
24
|
-
let(:database2) { company2.database }
|
23
|
+
let(:api) { Apartment::Database }
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
api.create(database1)
|
35
|
-
api.create(database2)
|
36
|
-
end
|
25
|
+
before do
|
26
|
+
Apartment.reset # reset all config
|
27
|
+
Apartment.seed_after_create = false
|
28
|
+
Apartment.use_schemas = true
|
29
|
+
api.reload!(config)
|
30
|
+
api.create(db1)
|
31
|
+
api.create(db2)
|
32
|
+
end
|
37
33
|
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
after do
|
35
|
+
api.drop(db1)
|
36
|
+
api.drop(db2)
|
41
37
|
end
|
42
38
|
end
|
43
39
|
|
@@ -11,14 +11,8 @@ module Apartment
|
|
11
11
|
extend ActiveSupport::Concern
|
12
12
|
|
13
13
|
included do
|
14
|
-
let(:db1){ Apartment::Test.next_db }
|
15
|
-
let(:db2){ Apartment::Test.next_db }
|
16
|
-
let(:connection){ ActiveRecord::Base.connection }
|
17
14
|
|
18
15
|
before do
|
19
|
-
Apartment::Database.reload!(config.symbolize_keys)
|
20
|
-
ActiveRecord::Base.establish_connection config
|
21
|
-
|
22
16
|
subject.create(db1)
|
23
17
|
subject.create(db2)
|
24
18
|
end
|
@@ -30,20 +24,10 @@ module Apartment
|
|
30
24
|
# sometimes we manually drop these schemas in testing, don't care if we can't drop, hence rescue
|
31
25
|
subject.drop(db1) rescue true
|
32
26
|
subject.drop(db2) rescue true
|
33
|
-
|
34
|
-
# This is annoying, but for each sublcass that establishes its own connection (ie Company for excluded models for connection based adapters)
|
35
|
-
# a separate connection is maintained (clear_all_connections! doesn't appear to deal with these)
|
36
|
-
# This causes problems because previous tests that established this connection could F up the next test, so we'll just remove them all for each test :(
|
37
|
-
Apartment.excluded_models.each do |m|
|
38
|
-
klass = m.constantize
|
39
|
-
Apartment.connection_class.remove_connection(klass)
|
40
|
-
klass.reset_table_name
|
41
|
-
end
|
42
|
-
ActiveRecord::Base.clear_all_connections!
|
43
27
|
end
|
44
28
|
end
|
45
29
|
|
46
|
-
%w{subject
|
30
|
+
%w{subject database_names default_database}.each do |method|
|
47
31
|
define_method method do
|
48
32
|
raise "You must define a `#{method}` method in your host group"
|
49
33
|
end unless defined?(method)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Apartment
|
2
|
+
module Spec
|
3
|
+
module Setup
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.instance_eval do
|
7
|
+
let(:config){ database_config }
|
8
|
+
|
9
|
+
let(:db1){ Apartment::Test.next_db }
|
10
|
+
let(:db2){ Apartment::Test.next_db }
|
11
|
+
let(:connection){ ActiveRecord::Base.connection }
|
12
|
+
|
13
|
+
# This around ensures that we run these hooks before and after
|
14
|
+
# any before/after hooks defined in individual tests
|
15
|
+
# Otherwise these actually get run after test defined hooks
|
16
|
+
around(:each) do |example|
|
17
|
+
# before
|
18
|
+
Apartment::Database.reload!(config)
|
19
|
+
ActiveRecord::Base.establish_connection config
|
20
|
+
|
21
|
+
example.run
|
22
|
+
|
23
|
+
# after
|
24
|
+
Rails.configuration.database_configuration = {}
|
25
|
+
ActiveRecord::Base.clear_all_connections!
|
26
|
+
|
27
|
+
Apartment.excluded_models.each do |model|
|
28
|
+
klass = model.constantize
|
29
|
+
|
30
|
+
Apartment.connection_class.remove_connection(klass)
|
31
|
+
klass.clear_all_connections!
|
32
|
+
klass.reset_table_name
|
33
|
+
end
|
34
|
+
|
35
|
+
Apartment.reset
|
36
|
+
Apartment::Database.reload!
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def database_config
|
42
|
+
db = example.metadata.fetch(:database, :postgresql)
|
43
|
+
Apartment::Test.config['connections'][db.to_s].symbolize_keys
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|