fourthbase 2.1.2
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 +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
|