fourthbase 2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.travis.yml +24 -0
- data/.yardopts +1 -0
- data/Appraisals +19 -0
- data/CHANGELOG.md +37 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +21 -0
- data/README.md +191 -0
- data/Rakefile +24 -0
- data/VERSION +1 -0
- data/fourthbase.gemspec +25 -0
- data/gemfiles/rails40.gemfile +8 -0
- data/gemfiles/rails41.gemfile +8 -0
- data/gemfiles/rails42.gemfile +8 -0
- data/gemfiles/rails50.gemfile +8 -0
- data/lib/fourth_base.rb +20 -0
- data/lib/fourth_base/base.rb +8 -0
- data/lib/fourth_base/databases.rake +121 -0
- data/lib/fourth_base/databases_rails_five.rake +22 -0
- data/lib/fourth_base/databases_rails_four.rake +22 -0
- data/lib/fourth_base/forced.rb +21 -0
- data/lib/fourth_base/on_base.rb +36 -0
- data/lib/fourth_base/railtie.rb +52 -0
- data/lib/fourth_base/test_help.rb +11 -0
- data/lib/fourth_base/version.rb +3 -0
- data/lib/fourthbase.rb +1 -0
- data/lib/rails/fourth_base/generators/migration_generator.rb +25 -0
- data/test/cases/dbtask_test.rb +248 -0
- data/test/cases/forced_test.rb +49 -0
- data/test/cases/generator_test.rb +64 -0
- data/test/cases/on_base_test.rb +35 -0
- data/test/cases/railtie_test.rb +31 -0
- data/test/cases/rake_test.rb +0 -0
- data/test/dummy_apps/rails_five/Rakefile +2 -0
- data/test/dummy_apps/rails_five/app/controllers/application_controller.rb +7 -0
- data/test/dummy_apps/rails_five/app/helpers/application_helper.rb +3 -0
- data/test/dummy_apps/rails_five/app/models/application_record.rb +3 -0
- data/test/dummy_apps/rails_five/app/models/comment.rb +6 -0
- data/test/dummy_apps/rails_five/app/models/comment_forced.rb +6 -0
- data/test/dummy_apps/rails_five/app/models/post.rb +7 -0
- data/test/dummy_apps/rails_five/app/models/user.rb +6 -0
- data/test/dummy_apps/rails_five/bin/rails +5 -0
- data/test/dummy_apps/rails_five/config/database.yml +13 -0
- data/test/dummy_apps/rails_five/config/routes.rb +3 -0
- data/test/dummy_apps/rails_five/db/migrate/20141209165002_create_users.rb +11 -0
- data/test/dummy_apps/rails_five/db/migrate/20141214142700_create_posts.rb +12 -0
- data/test/dummy_apps/rails_five/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
- data/test/dummy_apps/rails_five/init.rb +42 -0
- data/test/dummy_apps/rails_five/log/.keep +0 -0
- data/test/dummy_apps/rails_five/tmp/.keep +0 -0
- data/test/dummy_apps/rails_four/Rakefile +2 -0
- data/test/dummy_apps/rails_four/app/controllers/application_controller.rb +7 -0
- data/test/dummy_apps/rails_four/app/helpers/application_helper.rb +3 -0
- data/test/dummy_apps/rails_four/app/models/comment.rb +6 -0
- data/test/dummy_apps/rails_four/app/models/comment_forced.rb +6 -0
- data/test/dummy_apps/rails_four/app/models/post.rb +7 -0
- data/test/dummy_apps/rails_four/app/models/user.rb +6 -0
- data/test/dummy_apps/rails_four/bin/rails +5 -0
- data/test/dummy_apps/rails_four/config/database.yml +14 -0
- data/test/dummy_apps/rails_four/config/routes.rb +3 -0
- data/test/dummy_apps/rails_four/db/migrate/20141209165002_create_users.rb +11 -0
- data/test/dummy_apps/rails_four/db/migrate/20141214142700_create_posts.rb +12 -0
- data/test/dummy_apps/rails_four/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
- data/test/dummy_apps/rails_four/init.rb +42 -0
- data/test/dummy_apps/rails_four/log/.keep +0 -0
- data/test/dummy_apps/rails_four/tmp/.keep +0 -0
- data/test/test_helper.rb +46 -0
- data/test/test_helpers/dummy_app_helpers.rb +94 -0
- data/test/test_helpers/rails_version_helpers.rb +29 -0
- data/test/test_helpers/stream_helpers.rb +40 -0
- data/thirdbase-2.1.1.gem +0 -0
- data/thirdbase-2.1.2.gem +0 -0
- metadata +206 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :fourth_base do
|
3
|
+
|
4
|
+
namespace :create do
|
5
|
+
task :all do
|
6
|
+
FourthBase.on_base { Rake::Task['db:create:all'].execute }
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
task :create do
|
11
|
+
FourthBase.on_base { Rake::Task['db:create'].execute }
|
12
|
+
end
|
13
|
+
|
14
|
+
namespace :drop do
|
15
|
+
task :all do
|
16
|
+
FourthBase.on_base { Rake::Task['db:drop:all'].execute }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
namespace :purge do
|
21
|
+
task :all do
|
22
|
+
FourthBase.on_base { Rake::Task['db:purge:all'].execute }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
task :purge do
|
27
|
+
FourthBase.on_base { Rake::Task['db:purge'].execute }
|
28
|
+
end
|
29
|
+
|
30
|
+
task :migrate do
|
31
|
+
FourthBase.on_base { Rake::Task['db:migrate'].execute }
|
32
|
+
end
|
33
|
+
|
34
|
+
namespace :migrate do
|
35
|
+
|
36
|
+
task :redo => ['db:load_config'] do
|
37
|
+
FourthBase.on_base { Rake::Task['db:migrate:redo'].execute }
|
38
|
+
end
|
39
|
+
|
40
|
+
task :up => ['db:load_config'] do
|
41
|
+
FourthBase.on_base { Rake::Task['db:migrate:up'].execute }
|
42
|
+
end
|
43
|
+
|
44
|
+
task :down => ['db:load_config'] do
|
45
|
+
FourthBase.on_base { Rake::Task['db:migrate:down'].execute }
|
46
|
+
end
|
47
|
+
|
48
|
+
task :status => ['db:load_config'] do
|
49
|
+
FourthBase.on_base { Rake::Task['db:migrate:status'].execute }
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
task :rollback => ['db:load_config'] do
|
55
|
+
FourthBase.on_base { Rake::Task['db:rollback'].execute }
|
56
|
+
end
|
57
|
+
|
58
|
+
task :forward => ['db:load_config'] do
|
59
|
+
FourthBase.on_base { Rake::Task['db:forward'].execute }
|
60
|
+
end
|
61
|
+
|
62
|
+
task :abort_if_pending_migrations do
|
63
|
+
FourthBase.on_base { Rake::Task['db:abort_if_pending_migrations'].execute }
|
64
|
+
end
|
65
|
+
|
66
|
+
task :version => ['db:load_config'] do
|
67
|
+
FourthBase.on_base { Rake::Task['db:version'].execute }
|
68
|
+
end
|
69
|
+
|
70
|
+
namespace :schema do
|
71
|
+
|
72
|
+
task :load do
|
73
|
+
FourthBase.on_base { Rake::Task['db:schema:load'].execute }
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
namespace :structure do
|
79
|
+
|
80
|
+
task :load do
|
81
|
+
FourthBase.on_base { Rake::Task['db:structure:load'].execute }
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
namespace :test do
|
87
|
+
|
88
|
+
task :purge do
|
89
|
+
FourthBase.on_base { Rake::Task['db:test:purge'].execute }
|
90
|
+
end
|
91
|
+
|
92
|
+
task :load_schema do
|
93
|
+
FourthBase.on_base { Rake::Task['db:test:load_schema'].execute }
|
94
|
+
end
|
95
|
+
|
96
|
+
task :load_structure do
|
97
|
+
FourthBase.on_base { Rake::Task['db:test:load_structure'].execute }
|
98
|
+
end
|
99
|
+
|
100
|
+
task :prepare do
|
101
|
+
FourthBase.on_base { Rake::Task['db:test:prepare'].execute }
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
%w{
|
110
|
+
create:all create drop:all purge:all purge
|
111
|
+
migrate migrate:status abort_if_pending_migrations
|
112
|
+
schema:load structure:load
|
113
|
+
test:purge test:load_schema test:load_structure test:prepare
|
114
|
+
}.each do |name|
|
115
|
+
task = Rake::Task["db:#{name}"] rescue nil
|
116
|
+
next unless task && FourthBase::Railtie.run_with_db_tasks?
|
117
|
+
task.enhance do
|
118
|
+
Rake::Task["db:load_config"].invoke
|
119
|
+
Rake::Task["db:fourth_base:#{name}"].invoke
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :fourth_base do
|
3
|
+
task "drop:_unsafe" do
|
4
|
+
FourthBase.on_base { Rake::Task['db:drop:_unsafe'].execute }
|
5
|
+
end
|
6
|
+
|
7
|
+
namespace :migrate do
|
8
|
+
task :reset => ['db:fourth_base:drop:_unsafe', 'db:fourth_base:create', 'db:fourth_base:migrate']
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
%w{
|
14
|
+
drop:_unsafe
|
15
|
+
}.each do |name|
|
16
|
+
task = Rake::Task["db:#{name}"] rescue nil
|
17
|
+
next unless task && FourthBase::Railtie.run_with_db_tasks?
|
18
|
+
task.enhance do
|
19
|
+
Rake::Task["db:load_config"].invoke
|
20
|
+
Rake::Task["db:fourth_base:#{name}"].invoke
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :fourth_base do
|
3
|
+
task :drop do
|
4
|
+
FourthBase.on_base { Rake::Task['db:drop'].execute }
|
5
|
+
end
|
6
|
+
|
7
|
+
namespace :migrate do
|
8
|
+
task :reset => ['db:fourth_base:drop', 'db:fourth_base:create', 'db:fourth_base:migrate']
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
%w{
|
14
|
+
drop
|
15
|
+
}.each do |name|
|
16
|
+
task = Rake::Task["db:#{name}"] rescue nil
|
17
|
+
next unless task && FourthBase::Railtie.run_with_db_tasks?
|
18
|
+
task.enhance do
|
19
|
+
Rake::Task["db:load_config"].invoke
|
20
|
+
Rake::Task["db:fourth_base:#{name}"].invoke
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module FourthBase
|
2
|
+
module Forced
|
3
|
+
|
4
|
+
def connection_pool
|
5
|
+
FourthBase::Base.connection_pool
|
6
|
+
end
|
7
|
+
|
8
|
+
def retrieve_connection
|
9
|
+
FourthBase::Base.retrieve_connection
|
10
|
+
end
|
11
|
+
|
12
|
+
def connected?
|
13
|
+
FourthBase::Base.connected?
|
14
|
+
end
|
15
|
+
|
16
|
+
def remove_connection(klass = self)
|
17
|
+
FourthBase::Base.remove_connection
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module FourthBase
|
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 = [FourthBase::Railtie.fullpath('migrate')]
|
20
|
+
ActiveRecord::Tasks::DatabaseTasks.db_dir = FourthBase::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,52 @@
|
|
1
|
+
module FourthBase
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
|
4
|
+
config.fourth_base = ActiveSupport::OrderedOptions.new
|
5
|
+
config.fourth_base.path = 'db/fourthbase'
|
6
|
+
config.fourth_base.config_key = 'fourthbase'
|
7
|
+
config.fourth_base.run_with_db_tasks = true
|
8
|
+
|
9
|
+
config.after_initialize do |app|
|
10
|
+
fourthbase_dir = app.root.join(config.fourth_base.path)
|
11
|
+
FileUtils.mkdir(fourthbase_dir) unless File.directory?(fourthbase_dir)
|
12
|
+
end
|
13
|
+
|
14
|
+
rake_tasks do
|
15
|
+
load 'fourth_base/databases.rake'
|
16
|
+
|
17
|
+
if Rails.version.to_i == 4
|
18
|
+
load 'fourth_base/databases_rails_four.rake'
|
19
|
+
else
|
20
|
+
load 'fourth_base/databases_rails_five.rake'
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
generators do
|
26
|
+
require 'rails/fourth_base/generators/migration_generator'
|
27
|
+
end
|
28
|
+
|
29
|
+
initializer 'fourth_base.add_watchable_files' do |app|
|
30
|
+
fourthbase_dir = app.root.join(config.fourth_base.path)
|
31
|
+
config.watchable_files.concat ["#{fourthbase_dir}/schema.rb", "#{fourthbase_dir}/structure.sql"]
|
32
|
+
end
|
33
|
+
|
34
|
+
def config_path
|
35
|
+
config.fourth_base.path
|
36
|
+
end
|
37
|
+
|
38
|
+
def config_key
|
39
|
+
config.fourth_base.config_key
|
40
|
+
end
|
41
|
+
|
42
|
+
def run_with_db_tasks?
|
43
|
+
config.fourth_base.run_with_db_tasks
|
44
|
+
end
|
45
|
+
|
46
|
+
def fullpath(extra=nil)
|
47
|
+
path = Rails.root.join(config.fourth_base.path)
|
48
|
+
(extra ? path.join(path, extra) : path).to_s
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/lib/fourthbase.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'fourth_base'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/active_record'
|
3
|
+
require 'rails/generators/active_record/migration/migration_generator'
|
4
|
+
|
5
|
+
module FourthBase
|
6
|
+
class MigrationGenerator < ActiveRecord::Generators::MigrationGenerator
|
7
|
+
|
8
|
+
source_root ActiveRecord::Generators::MigrationGenerator.source_root
|
9
|
+
|
10
|
+
def self.desc
|
11
|
+
require 'rails/generators/rails/migration/migration_generator'
|
12
|
+
Rails::Generators::MigrationGenerator.desc
|
13
|
+
end
|
14
|
+
|
15
|
+
include(Module.new{
|
16
|
+
|
17
|
+
def migration_template(*args)
|
18
|
+
args[1].sub! 'db/migrate', "#{Railtie.config_path}/migrate" if args[1]
|
19
|
+
super(*args)
|
20
|
+
end
|
21
|
+
|
22
|
+
})
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,248 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class DbTaskTest < FourthBase::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_no_tables
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_db_purge
|
50
|
+
skip 'Rails 4.2 & Up' unless rails_42_up?
|
51
|
+
run_db :create
|
52
|
+
run_db :migrate
|
53
|
+
assert_dummy_databases
|
54
|
+
run_db :purge
|
55
|
+
establish_connection
|
56
|
+
assert_no_tables
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_db_migrate
|
60
|
+
run_db :create
|
61
|
+
run_db :migrate
|
62
|
+
# First database and schema.
|
63
|
+
schema = File.read(dummy_schema)
|
64
|
+
assert_match %r{version: 20141214142700}, schema
|
65
|
+
assert_match %r{create_table "users"}, schema
|
66
|
+
assert_match %r{create_table "posts"}, schema
|
67
|
+
refute_match %r{create_table "comments"}, schema
|
68
|
+
assert_connection_tables ActiveRecord::Base, ['users', 'posts']
|
69
|
+
# Fourth database and schema.
|
70
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
71
|
+
assert_match %r{version: 20151202075826}, fourthbase_schema
|
72
|
+
refute_match %r{create_table "users"}, fourthbase_schema
|
73
|
+
refute_match %r{create_table "posts"}, fourthbase_schema
|
74
|
+
assert_match %r{create_table "comments"}, fourthbase_schema
|
75
|
+
assert_connection_tables FourthBase::Base, ['comments']
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_fourthbase_migrate_updown
|
79
|
+
run_db :create
|
80
|
+
run_db :migrate
|
81
|
+
assert_match(/no migration.*20151202075826/i, run_db('migrate:down VERSION=20151202075826', :stderr))
|
82
|
+
run_fourthbase 'migrate:down VERSION=20151202075826'
|
83
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
84
|
+
refute_match %r{version: 20151202075826}, fourthbase_schema
|
85
|
+
refute_match %r{create_table "comments"}, fourthbase_schema
|
86
|
+
assert_match(/no migration.*20151202075826/i, run_db('migrate:up VERSION=20151202075826', :stderr))
|
87
|
+
run_fourthbase 'migrate:up VERSION=20151202075826'
|
88
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
89
|
+
assert_match %r{version: 20151202075826}, fourthbase_schema
|
90
|
+
assert_match %r{create_table "comments"}, fourthbase_schema
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_fourthbase_migrate_reset
|
94
|
+
run_db :create
|
95
|
+
run_db :migrate
|
96
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
97
|
+
assert_match %r{version: 20151202075826}, fourthbase_schema
|
98
|
+
assert_match %r{create_table "comments"}, fourthbase_schema
|
99
|
+
FileUtils.rm_rf dummy_fourthbase_schema
|
100
|
+
run_fourthbase 'migrate:reset'
|
101
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
102
|
+
assert_match %r{version: 20151202075826}, fourthbase_schema
|
103
|
+
assert_match %r{create_table "comments"}, fourthbase_schema
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_fourthbase_migrate_redo
|
107
|
+
run_db :create
|
108
|
+
run_db :migrate
|
109
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
110
|
+
assert_match %r{version: 20151202075826}, fourthbase_schema
|
111
|
+
assert_match %r{create_table "comments"}, fourthbase_schema
|
112
|
+
FileUtils.rm_rf dummy_fourthbase_schema
|
113
|
+
run_fourthbase 'migrate:redo'
|
114
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
115
|
+
assert_match %r{version: 20151202075826}, fourthbase_schema
|
116
|
+
assert_match %r{create_table "comments"}, fourthbase_schema
|
117
|
+
# Can redo latest FourthBase migration using previous VERSION env.
|
118
|
+
version = dummy_migration[:version]
|
119
|
+
run_db :migrate
|
120
|
+
assert_match %r{version: #{version}}, File.read(dummy_fourthbase_schema)
|
121
|
+
establish_connection
|
122
|
+
Comment.create! body: 'test', user_id: 420
|
123
|
+
run_fourthbase 'migrate:redo VERSION=20151202075826'
|
124
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
125
|
+
assert_match %r{version: #{version}}, fourthbase_schema
|
126
|
+
assert_match %r{create_table "comments"}, fourthbase_schema
|
127
|
+
establish_connection
|
128
|
+
assert_nil Comment.first
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_fourthbase_migrate_status
|
132
|
+
run_db :create
|
133
|
+
stream = rails_42_up? ? :stderr : :stdout
|
134
|
+
assert_match %r{migrations table does not exist}, run_fourthbase('migrate:status', stream)
|
135
|
+
run_db :migrate
|
136
|
+
assert_match %r{up.*20151202075826}, run_fourthbase('migrate:status')
|
137
|
+
version = dummy_migration[:version]
|
138
|
+
status = run_fourthbase('migrate:status')
|
139
|
+
assert_match %r{up.*20151202075826}, status
|
140
|
+
assert_match %r{down.*#{version}}, status
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_fourthbase_forward_and_rollback
|
144
|
+
run_db :create
|
145
|
+
run_db :migrate
|
146
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
147
|
+
assert_match %r{version: 20151202075826}, fourthbase_schema
|
148
|
+
refute_match %r{create_table "foos"}, fourthbase_schema
|
149
|
+
version = dummy_migration[:version] # ActiveRecord does not support start index 0.
|
150
|
+
run_fourthbase :forward
|
151
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
152
|
+
assert_match %r{version: #{version}}, fourthbase_schema
|
153
|
+
assert_match %r{create_table "foos"}, fourthbase_schema
|
154
|
+
run_fourthbase :rollback
|
155
|
+
fourthbase_schema = File.read(dummy_fourthbase_schema)
|
156
|
+
assert_match %r{version: 20151202075826}, fourthbase_schema
|
157
|
+
refute_match %r{create_table "foos"}, fourthbase_schema
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_db_test_purge
|
161
|
+
run_db :create
|
162
|
+
assert_dummy_databases
|
163
|
+
run_db 'test:purge'
|
164
|
+
establish_connection
|
165
|
+
assert_no_tables
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_db_test_load_schema
|
169
|
+
run_db :create
|
170
|
+
assert_dummy_databases
|
171
|
+
run_db 'test:purge'
|
172
|
+
run_db :migrate
|
173
|
+
Dir.chdir(dummy_root) { `rake db:test:load_schema` }
|
174
|
+
establish_connection
|
175
|
+
assert_connection_tables ActiveRecord::Base, ['users', 'posts']
|
176
|
+
assert_connection_tables FourthBase::Base, ['comments']
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_abort_if_pending
|
180
|
+
run_db :create
|
181
|
+
run_db :migrate
|
182
|
+
assert_equal "", run_db(:abort_if_pending_migrations, :stderr)
|
183
|
+
version = dummy_migration[:version]
|
184
|
+
capture(:stderr) do
|
185
|
+
stdout = run_db :abort_if_pending_migrations
|
186
|
+
assert_match(/1 pending migration/, stdout)
|
187
|
+
assert_match(/#{version}/, stdout)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_db_test_load_structure
|
192
|
+
run_db :create
|
193
|
+
assert_dummy_databases
|
194
|
+
run_db 'test:purge'
|
195
|
+
Dir.chdir(dummy_root) { `env SCHEMA_FORMAT=sql rake db:migrate` }
|
196
|
+
Dir.chdir(dummy_root) { `rake db:test:load_structure` }
|
197
|
+
establish_connection
|
198
|
+
assert_connection_tables ActiveRecord::Base, ['users', 'posts']
|
199
|
+
assert_connection_tables FourthBase::Base, ['comments']
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_fourthbase_version
|
203
|
+
run_db :create
|
204
|
+
assert_match(/version: 0/, run_fourthbase(:version))
|
205
|
+
run_db :migrate
|
206
|
+
assert_match(/version: 20141214142700/, run_db(:version))
|
207
|
+
assert_match(/version: 20151202075826/, run_fourthbase(:version))
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_fourthbase_db_tasks_disabled
|
211
|
+
refute_dummy_databases
|
212
|
+
run_db :create, :stdout, false
|
213
|
+
assert_dummy_created_but_not_fourthbase
|
214
|
+
end
|
215
|
+
|
216
|
+
private
|
217
|
+
|
218
|
+
def assert_dummy_created_but_not_fourthbase
|
219
|
+
assert_equal 'base.sqlite3', dummy_database_sqlite
|
220
|
+
refute_match(/fourthbase_test/, `mysql -uroot -e "SHOW DATABASES"`)
|
221
|
+
end
|
222
|
+
|
223
|
+
def assert_no_tables
|
224
|
+
if ActiveRecord::Base.connection.respond_to? :data_sources
|
225
|
+
assert_equal [], ActiveRecord::Base.connection.data_sources
|
226
|
+
assert_equal [], FourthBase::Base.connection.data_sources
|
227
|
+
else
|
228
|
+
assert_equal [], ActiveRecord::Base.connection.tables
|
229
|
+
assert_equal [], FourthBase::Base.connection.tables
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
def assert_connection_tables(model, expected_tables)
|
234
|
+
establish_connection
|
235
|
+
|
236
|
+
if ActiveRecord::Base.connection.respond_to? :data_sources
|
237
|
+
tables = model.connection.data_sources
|
238
|
+
else
|
239
|
+
tables = model.connection.tables
|
240
|
+
end
|
241
|
+
|
242
|
+
expected_tables.each do |table|
|
243
|
+
message = "Expected #{model.name} tables #{tables.inspect} to include #{table.inspect}"
|
244
|
+
assert tables.include?(table), message
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
end
|