secondbase 0.6.0 → 1.0.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 +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +16 -0
- data/.yardopts +1 -0
- data/Appraisals +12 -0
- data/CHANGELOG.md +18 -6
- data/Gemfile +3 -12
- data/Guardfile +16 -0
- data/LICENSE.txt +2 -1
- data/README.md +144 -0
- data/Rakefile +18 -41
- data/VERSION +1 -1
- data/gemfiles/rails40.gemfile +8 -0
- data/gemfiles/rails41.gemfile +8 -0
- data/gemfiles/rails42.gemfile +8 -0
- data/lib/rails/second_base/generators/migration_generator.rb +25 -0
- data/lib/second_base.rb +20 -0
- data/lib/second_base/base.rb +8 -0
- data/lib/second_base/databases.rake +127 -0
- data/lib/second_base/forced.rb +21 -0
- data/lib/second_base/on_base.rb +36 -0
- data/lib/second_base/railtie.rb +40 -0
- data/lib/second_base/test_help.rb +11 -0
- data/lib/second_base/version.rb +3 -0
- data/lib/secondbase.rb +1 -46
- data/secondbase.gemspec +25 -75
- data/test/cases/dbtask_test.rb +225 -0
- data/test/cases/forced_test.rb +49 -0
- data/test/cases/generator_test.rb +41 -0
- data/test/cases/on_base_test.rb +35 -0
- data/test/cases/railtie_test.rb +31 -0
- data/test/dummy_app/Rakefile +2 -0
- data/test/dummy_app/app/controllers/application_controller.rb +7 -0
- data/test/dummy_app/app/helpers/application_helper.rb +3 -0
- data/test/dummy_app/app/models/comment.rb +6 -0
- data/test/dummy_app/app/models/comment_forced.rb +6 -0
- data/test/dummy_app/app/models/post.rb +7 -0
- data/test/dummy_app/app/models/user.rb +6 -0
- data/test/dummy_app/bin/rails +5 -0
- data/test/dummy_app/config/database.yml +14 -0
- data/test/dummy_app/config/routes.rb +3 -0
- data/test/dummy_app/db/migrate/20141209165002_create_users.rb +11 -0
- data/test/dummy_app/db/migrate/20141214142700_create_posts.rb +12 -0
- data/test/dummy_app/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
- data/test/dummy_app/init.rb +40 -0
- data/test/dummy_app/log/.keep +0 -0
- data/test/dummy_app/tmp/.keep +0 -0
- data/test/test_helper.rb +36 -0
- data/test/test_helpers/dummy_app_helpers.rb +90 -0
- data/test/test_helpers/rails_version_helpers.rb +29 -0
- data/test/test_helpers/stream_helpers.rb +40 -0
- metadata +220 -139
- data/.document +0 -5
- data/Gemfile.lock +0 -38
- data/README.rdoc +0 -143
- data/lib/generators/secondbase/USAGE +0 -19
- data/lib/generators/secondbase/migration_generator.rb +0 -36
- data/lib/generators/secondbase/templates/migration.rb +0 -13
- data/lib/secondbase/active_record/associations/has_and_belongs_to_many_association.rb +0 -66
- data/lib/secondbase/active_record/base.rb +0 -13
- data/lib/secondbase/active_record/fixtures.rb +0 -66
- data/lib/secondbase/active_record/patches.rb +0 -13
- data/lib/secondbase/active_record/test_fixtures.rb +0 -32
- data/lib/secondbase/model.rb +0 -11
- data/lib/secondbase/railtie.rb +0 -10
- data/lib/secondbase/rake_method_chain.rb +0 -22
- data/lib/secondbase/tasks.rb +0 -219
- data/rails_generators/secondbase/USAGE +0 -29
- data/rails_generators/secondbase/secondbase_migration_generator.rb +0 -20
- data/rails_generators/secondbase/templates/migration.rb +0 -15
- data/test/helper.rb +0 -18
- data/test/test_secondbase.rb +0 -7
@@ -0,0 +1,21 @@
|
|
1
|
+
module SecondBase
|
2
|
+
module Forced
|
3
|
+
|
4
|
+
def connection_pool
|
5
|
+
SecondBase::Base.connection_pool
|
6
|
+
end
|
7
|
+
|
8
|
+
def retrieve_connection
|
9
|
+
SecondBase::Base.retrieve_connection
|
10
|
+
end
|
11
|
+
|
12
|
+
def connected?
|
13
|
+
SecondBase::Base.connected?
|
14
|
+
end
|
15
|
+
|
16
|
+
def remove_connection(klass = self)
|
17
|
+
SecondBase::Base.remove_connection
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module SecondBase
|
2
|
+
|
3
|
+
mattr_accessor :is_on_base, instance_accessor: false
|
4
|
+
self.is_on_base = false
|
5
|
+
|
6
|
+
def self.on_base
|
7
|
+
already_on_base = is_on_base
|
8
|
+
if already_on_base
|
9
|
+
yield
|
10
|
+
return
|
11
|
+
end
|
12
|
+
original_config = ActiveRecord::Tasks::DatabaseTasks.current_config
|
13
|
+
original_configurations = ActiveRecord::Base.configurations
|
14
|
+
original_migrations_path = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
|
15
|
+
original_db_dir = ActiveRecord::Tasks::DatabaseTasks.db_dir
|
16
|
+
ActiveRecord::Tasks::DatabaseTasks.current_config = config
|
17
|
+
ActiveRecord::Base.configurations = original_configurations[Railtie.config_key]
|
18
|
+
ActiveRecord::Base.establish_connection(config)
|
19
|
+
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = SecondBase::Railtie.fullpath('migrate')
|
20
|
+
ActiveRecord::Tasks::DatabaseTasks.db_dir = SecondBase::Railtie.fullpath
|
21
|
+
ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
|
22
|
+
self.is_on_base = true
|
23
|
+
yield
|
24
|
+
ensure
|
25
|
+
unless already_on_base
|
26
|
+
ActiveRecord::Base.configurations = original_configurations
|
27
|
+
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = original_migrations_path
|
28
|
+
ActiveRecord::Tasks::DatabaseTasks.db_dir = original_db_dir
|
29
|
+
ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
|
30
|
+
ActiveRecord::Tasks::DatabaseTasks.current_config = original_config
|
31
|
+
ActiveRecord::Base.establish_connection(original_config)
|
32
|
+
self.is_on_base = false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module SecondBase
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
|
4
|
+
config.second_base = ActiveSupport::OrderedOptions.new
|
5
|
+
config.second_base.path = 'db/secondbase'
|
6
|
+
config.second_base.config_key = 'secondbase'
|
7
|
+
|
8
|
+
config.after_initialize do |app|
|
9
|
+
secondbase_dir = app.root.join(config.second_base.path)
|
10
|
+
FileUtils.mkdir(secondbase_dir) unless File.directory?(secondbase_dir)
|
11
|
+
end
|
12
|
+
|
13
|
+
rake_tasks do
|
14
|
+
load 'second_base/databases.rake'
|
15
|
+
end
|
16
|
+
|
17
|
+
generators do
|
18
|
+
require 'rails/second_base/generators/migration_generator'
|
19
|
+
end
|
20
|
+
|
21
|
+
initializer 'second_base.add_watchable_files' do |app|
|
22
|
+
secondbase_dir = app.root.join(config.second_base.path)
|
23
|
+
config.watchable_files.concat ["#{secondbase_dir}/schema.rb", "#{secondbase_dir}/structure.sql"]
|
24
|
+
end
|
25
|
+
|
26
|
+
def config_path
|
27
|
+
config.second_base.path
|
28
|
+
end
|
29
|
+
|
30
|
+
def config_key
|
31
|
+
config.second_base.config_key
|
32
|
+
end
|
33
|
+
|
34
|
+
def fullpath(extra=nil)
|
35
|
+
path = Rails.root.join(config.second_base.path)
|
36
|
+
(extra ? path.join(path, extra) : path).to_s
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
data/lib/secondbase.rb
CHANGED
@@ -1,46 +1 @@
|
|
1
|
-
require '
|
2
|
-
require 'secondbase/active_record/patches'
|
3
|
-
|
4
|
-
module SecondBase
|
5
|
-
CONNECTION_PREFIX = 'secondbase'
|
6
|
-
|
7
|
-
require 'secondbase/railtie'
|
8
|
-
require 'secondbase/rake_method_chain'
|
9
|
-
|
10
|
-
def self.do
|
11
|
-
"You have just gotten to SecondBase, my friend."
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.has_runner(env)
|
15
|
-
ActiveRecord::Base.establish_connection(SecondBase::config(env))
|
16
|
-
reset_visitor_cache
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.config(env)
|
20
|
-
ActiveRecord::Base.configurations[SecondBase::CONNECTION_PREFIX][env]
|
21
|
-
end
|
22
|
-
|
23
|
-
# TODO: We should really look at faking out the connection used by ActiveRecord
|
24
|
-
# during migrations, this would prevent us from digging around Arel internals.
|
25
|
-
# Arel caches the SQL translator based on the engine (ActiveRecord::Base). This
|
26
|
-
# means that if we swap out the base connection we risk the SQL translator being wrong.
|
27
|
-
# This is an ugly hack that resets the adapter. See Line 27 of Arel's visitors.rb class.
|
28
|
-
def self.reset_visitor_cache
|
29
|
-
if Rails.version.to_i >= 3
|
30
|
-
engine = ActiveRecord::Base
|
31
|
-
adapter = engine.connection_pool.spec.config[:adapter]
|
32
|
-
Arel::Visitors::ENGINE_VISITORS[engine] = (Arel::Visitors::VISITORS[adapter] || Arel::Visitors::ToSql).new(engine)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
module FirstBase
|
38
|
-
def self.config(env)
|
39
|
-
ActiveRecord::Base.configurations[env]
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.has_runner(env)
|
43
|
-
ActiveRecord::Base.establish_connection(FirstBase::config(env))
|
44
|
-
SecondBase.reset_visitor_cache
|
45
|
-
end
|
46
|
-
end
|
1
|
+
require 'second_base'
|
data/secondbase.gemspec
CHANGED
@@ -1,78 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
1
|
+
$:.push File.expand_path('../lib', __FILE__)
|
2
|
+
require 'second_base/version'
|
5
3
|
|
6
4
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
"
|
17
|
-
|
18
|
-
]
|
19
|
-
s.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
"lib/generators/secondbase/templates/migration.rb",
|
31
|
-
"lib/secondbase.rb",
|
32
|
-
"lib/secondbase/active_record/associations/has_and_belongs_to_many_association.rb",
|
33
|
-
"lib/secondbase/active_record/base.rb",
|
34
|
-
"lib/secondbase/active_record/fixtures.rb",
|
35
|
-
"lib/secondbase/active_record/patches.rb",
|
36
|
-
"lib/secondbase/active_record/test_fixtures.rb",
|
37
|
-
"lib/secondbase/model.rb",
|
38
|
-
"lib/secondbase/railtie.rb",
|
39
|
-
"lib/secondbase/rake_method_chain.rb",
|
40
|
-
"lib/secondbase/tasks.rb",
|
41
|
-
"rails_generators/secondbase/USAGE",
|
42
|
-
"rails_generators/secondbase/secondbase_migration_generator.rb",
|
43
|
-
"rails_generators/secondbase/templates/migration.rb",
|
44
|
-
"secondbase.gemspec",
|
45
|
-
"test/helper.rb",
|
46
|
-
"test/test_secondbase.rb"
|
47
|
-
]
|
48
|
-
s.homepage = %q{http://github.com/karledurante/secondbase}
|
49
|
-
s.licenses = ["MIT"]
|
50
|
-
s.require_paths = ["lib"]
|
51
|
-
s.rubygems_version = %q{1.4.2}
|
52
|
-
s.summary = %q{Allow Rails manage second database in your projects}
|
53
|
-
|
54
|
-
if s.respond_to? :specification_version then
|
55
|
-
s.specification_version = 3
|
56
|
-
|
57
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
58
|
-
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
59
|
-
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
60
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.8.2"])
|
61
|
-
s.add_development_dependency(%q<activerecord>, ["~> 3.0.0"])
|
62
|
-
s.add_development_dependency(%q<activerecord>, ["~> 3.0.0"])
|
63
|
-
else
|
64
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
65
|
-
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
66
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.2"])
|
67
|
-
s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
|
68
|
-
s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
|
69
|
-
end
|
70
|
-
else
|
71
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
72
|
-
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
73
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.2"])
|
74
|
-
s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
|
75
|
-
s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
|
76
|
-
end
|
5
|
+
s.name = 'secondbase'
|
6
|
+
s.version = SecondBase::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ['Karle Durante', 'Hunter Madison', 'Ken Collins']
|
9
|
+
s.email = ['kdurante@customink.com', 'hunterglenmadison@icloud.com', 'ken@metaskills.net']
|
10
|
+
s.homepage = 'http://github.com/customink/secondbase'
|
11
|
+
s.summary = 'Seamless second database integration for Rails.'
|
12
|
+
s.description = "SecondBase provides support for Rails to manage dual databases by focusing on ActiveRecord tasks that create, migrate, and test your databases."
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
+
s.require_paths = ['lib']
|
17
|
+
s.rdoc_options = ['--charset=UTF-8']
|
18
|
+
s.license = 'MIT'
|
19
|
+
s.add_runtime_dependency 'rails', '~> 4.0'
|
20
|
+
s.add_development_dependency 'appraisal'
|
21
|
+
s.add_development_dependency 'guard'
|
22
|
+
s.add_development_dependency 'guard-minitest'
|
23
|
+
s.add_development_dependency 'mysql'
|
24
|
+
s.add_development_dependency 'pry'
|
25
|
+
s.add_development_dependency 'rake'
|
26
|
+
s.add_development_dependency 'sqlite3'
|
27
|
+
s.add_development_dependency 'yard'
|
77
28
|
end
|
78
|
-
|
@@ -0,0 +1,225 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class DbTaskTest < SecondBase::TestCase
|
4
|
+
|
5
|
+
def test_db_create
|
6
|
+
refute_dummy_databases
|
7
|
+
run_db :create
|
8
|
+
assert_dummy_databases
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_db_create_all
|
12
|
+
refute_dummy_databases
|
13
|
+
run_db 'create:all'
|
14
|
+
assert_dummy_databases
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_db_setup
|
18
|
+
run_db :create
|
19
|
+
run_db :migrate
|
20
|
+
assert_dummy_databases
|
21
|
+
run_db :drop
|
22
|
+
refute_dummy_databases
|
23
|
+
run_db :setup
|
24
|
+
assert_dummy_databases
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_db_drop
|
28
|
+
run_db :create
|
29
|
+
run_db :drop
|
30
|
+
refute_dummy_databases
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_db_drop_all
|
34
|
+
run_db :create
|
35
|
+
run_db 'drop:all'
|
36
|
+
refute_dummy_databases
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_db_purge_all
|
40
|
+
skip 'Rails 4.2 & Up' unless rails_42_up?
|
41
|
+
run_db :create
|
42
|
+
run_db :migrate
|
43
|
+
assert_dummy_databases
|
44
|
+
run_db 'purge:all'
|
45
|
+
establish_connection
|
46
|
+
assert_equal [], ActiveRecord::Base.connection.tables
|
47
|
+
assert_equal [], SecondBase::Base.connection.tables
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_db_purge
|
51
|
+
skip 'Rails 4.2 & Up' unless rails_42_up?
|
52
|
+
run_db :create
|
53
|
+
run_db :migrate
|
54
|
+
assert_dummy_databases
|
55
|
+
run_db :purge
|
56
|
+
establish_connection
|
57
|
+
assert_equal [], ActiveRecord::Base.connection.tables
|
58
|
+
assert_equal [], SecondBase::Base.connection.tables
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_db_migrate
|
62
|
+
run_db :create
|
63
|
+
run_db :migrate
|
64
|
+
# First database and schema.
|
65
|
+
schema = File.read(dummy_schema)
|
66
|
+
assert_match %r{version: 20141214142700}, schema
|
67
|
+
assert_match %r{create_table "users"}, schema
|
68
|
+
assert_match %r{create_table "posts"}, schema
|
69
|
+
refute_match %r{create_table "comments"}, schema
|
70
|
+
assert_connection_tables ActiveRecord::Base, ['users', 'posts']
|
71
|
+
# Second database and schema.
|
72
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
73
|
+
assert_match %r{version: 20151202075826}, secondbase_schema
|
74
|
+
refute_match %r{create_table "users"}, secondbase_schema
|
75
|
+
refute_match %r{create_table "posts"}, secondbase_schema
|
76
|
+
assert_match %r{create_table "comments"}, secondbase_schema
|
77
|
+
assert_connection_tables SecondBase::Base, ['comments']
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_secondbase_migrate_updown
|
81
|
+
run_db :create
|
82
|
+
run_db :migrate
|
83
|
+
assert_match /no migration.*20151202075826/i, run_db('migrate:down VERSION=20151202075826', :stderr)
|
84
|
+
run_secondbase 'migrate:down VERSION=20151202075826'
|
85
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
86
|
+
refute_match %r{version: 20151202075826}, secondbase_schema
|
87
|
+
refute_match %r{create_table "comments"}, secondbase_schema
|
88
|
+
assert_match /no migration.*20151202075826/i, run_db('migrate:up VERSION=20151202075826', :stderr)
|
89
|
+
run_secondbase 'migrate:up VERSION=20151202075826'
|
90
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
91
|
+
assert_match %r{version: 20151202075826}, secondbase_schema
|
92
|
+
assert_match %r{create_table "comments"}, secondbase_schema
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_secondbase_migrate_reset
|
96
|
+
run_db :create
|
97
|
+
run_db :migrate
|
98
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
99
|
+
assert_match %r{version: 20151202075826}, secondbase_schema
|
100
|
+
assert_match %r{create_table "comments"}, secondbase_schema
|
101
|
+
FileUtils.rm_rf dummy_secondbase_schema
|
102
|
+
run_secondbase 'migrate:reset'
|
103
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
104
|
+
assert_match %r{version: 20151202075826}, secondbase_schema
|
105
|
+
assert_match %r{create_table "comments"}, secondbase_schema
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_secondbase_migrate_redo
|
109
|
+
run_db :create
|
110
|
+
run_db :migrate
|
111
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
112
|
+
assert_match %r{version: 20151202075826}, secondbase_schema
|
113
|
+
assert_match %r{create_table "comments"}, secondbase_schema
|
114
|
+
FileUtils.rm_rf dummy_secondbase_schema
|
115
|
+
run_secondbase 'migrate:redo'
|
116
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
117
|
+
assert_match %r{version: 20151202075826}, secondbase_schema
|
118
|
+
assert_match %r{create_table "comments"}, secondbase_schema
|
119
|
+
# Can redo latest SecondBase migration using previous VERSION env.
|
120
|
+
version = dummy_migration[:version]
|
121
|
+
run_db :migrate
|
122
|
+
assert_match %r{version: #{version}}, File.read(dummy_secondbase_schema)
|
123
|
+
establish_connection
|
124
|
+
Comment.create! body: 'test', user_id: 420
|
125
|
+
run_secondbase 'migrate:redo VERSION=20151202075826'
|
126
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
127
|
+
assert_match %r{version: #{version}}, secondbase_schema
|
128
|
+
assert_match %r{create_table "comments"}, secondbase_schema
|
129
|
+
establish_connection
|
130
|
+
assert_nil Comment.first
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_secondbase_migrate_status
|
134
|
+
run_db :create
|
135
|
+
stream = rails_42_up? ? :stderr : :stdout
|
136
|
+
assert_match %r{migrations table does not exist}, run_secondbase('migrate:status', stream)
|
137
|
+
run_db :migrate
|
138
|
+
assert_match %r{up.*20151202075826}, run_secondbase('migrate:status')
|
139
|
+
version = dummy_migration[:version]
|
140
|
+
status = run_secondbase('migrate:status')
|
141
|
+
assert_match %r{up.*20151202075826}, status
|
142
|
+
assert_match %r{down.*#{version}}, status
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_secondbase_forward_and_rollback
|
146
|
+
run_db :create
|
147
|
+
run_db :migrate
|
148
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
149
|
+
assert_match %r{version: 20151202075826}, secondbase_schema
|
150
|
+
refute_match %r{create_table "foos"}, secondbase_schema
|
151
|
+
version = dummy_migration[:version] # ActiveRecord does not support start index 0.
|
152
|
+
run_secondbase :forward
|
153
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
154
|
+
assert_match %r{version: #{version}}, secondbase_schema
|
155
|
+
assert_match %r{create_table "foos"}, secondbase_schema
|
156
|
+
run_secondbase :rollback
|
157
|
+
secondbase_schema = File.read(dummy_secondbase_schema)
|
158
|
+
assert_match %r{version: 20151202075826}, secondbase_schema
|
159
|
+
refute_match %r{create_table "foos"}, secondbase_schema
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_db_test_purge
|
163
|
+
run_db :create
|
164
|
+
assert_dummy_databases
|
165
|
+
run_db 'test:purge'
|
166
|
+
establish_connection
|
167
|
+
assert_equal [], ActiveRecord::Base.connection.tables
|
168
|
+
assert_equal [], SecondBase::Base.connection.tables
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_db_test_load_schema
|
172
|
+
run_db :create
|
173
|
+
assert_dummy_databases
|
174
|
+
run_db 'test:purge'
|
175
|
+
run_db :migrate
|
176
|
+
Dir.chdir(dummy_root) { `rake db:test:load_schema` }
|
177
|
+
establish_connection
|
178
|
+
assert_connection_tables ActiveRecord::Base, ['users', 'posts']
|
179
|
+
assert_connection_tables SecondBase::Base, ['comments']
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_abort_if_pending
|
183
|
+
run_db :create
|
184
|
+
run_db :migrate
|
185
|
+
assert_equal "", run_db(:abort_if_pending_migrations, :stderr)
|
186
|
+
version = dummy_migration[:version]
|
187
|
+
capture(:stderr) do
|
188
|
+
stdout = run_db :abort_if_pending_migrations
|
189
|
+
assert_match /1 pending migration/, stdout
|
190
|
+
assert_match /#{version}/, stdout
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_db_test_load_structure
|
195
|
+
run_db :create
|
196
|
+
assert_dummy_databases
|
197
|
+
run_db 'test:purge'
|
198
|
+
Dir.chdir(dummy_root) { `env SCHEMA_FORMAT=sql rake db:migrate` }
|
199
|
+
Dir.chdir(dummy_root) { `rake db:test:load_structure` }
|
200
|
+
establish_connection
|
201
|
+
assert_connection_tables ActiveRecord::Base, ['users', 'posts']
|
202
|
+
assert_connection_tables SecondBase::Base, ['comments']
|
203
|
+
end
|
204
|
+
|
205
|
+
def test_secondbase_version
|
206
|
+
run_db :create
|
207
|
+
assert_match /version: 0/, run_secondbase(:version)
|
208
|
+
run_db :migrate
|
209
|
+
assert_match /version: 20141214142700/, run_db(:version)
|
210
|
+
assert_match /version: 20151202075826/, run_secondbase(:version)
|
211
|
+
end
|
212
|
+
|
213
|
+
|
214
|
+
private
|
215
|
+
|
216
|
+
def assert_connection_tables(model, expected_tables)
|
217
|
+
establish_connection
|
218
|
+
tables = model.connection.tables
|
219
|
+
expected_tables.each do |table|
|
220
|
+
message = "Expected #{model.name} tables #{tables.inspect} to include #{table.inspect}"
|
221
|
+
assert tables.include?(table), message
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|