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.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +16 -0
  4. data/.yardopts +1 -0
  5. data/Appraisals +12 -0
  6. data/CHANGELOG.md +18 -6
  7. data/Gemfile +3 -12
  8. data/Guardfile +16 -0
  9. data/LICENSE.txt +2 -1
  10. data/README.md +144 -0
  11. data/Rakefile +18 -41
  12. data/VERSION +1 -1
  13. data/gemfiles/rails40.gemfile +8 -0
  14. data/gemfiles/rails41.gemfile +8 -0
  15. data/gemfiles/rails42.gemfile +8 -0
  16. data/lib/rails/second_base/generators/migration_generator.rb +25 -0
  17. data/lib/second_base.rb +20 -0
  18. data/lib/second_base/base.rb +8 -0
  19. data/lib/second_base/databases.rake +127 -0
  20. data/lib/second_base/forced.rb +21 -0
  21. data/lib/second_base/on_base.rb +36 -0
  22. data/lib/second_base/railtie.rb +40 -0
  23. data/lib/second_base/test_help.rb +11 -0
  24. data/lib/second_base/version.rb +3 -0
  25. data/lib/secondbase.rb +1 -46
  26. data/secondbase.gemspec +25 -75
  27. data/test/cases/dbtask_test.rb +225 -0
  28. data/test/cases/forced_test.rb +49 -0
  29. data/test/cases/generator_test.rb +41 -0
  30. data/test/cases/on_base_test.rb +35 -0
  31. data/test/cases/railtie_test.rb +31 -0
  32. data/test/dummy_app/Rakefile +2 -0
  33. data/test/dummy_app/app/controllers/application_controller.rb +7 -0
  34. data/test/dummy_app/app/helpers/application_helper.rb +3 -0
  35. data/test/dummy_app/app/models/comment.rb +6 -0
  36. data/test/dummy_app/app/models/comment_forced.rb +6 -0
  37. data/test/dummy_app/app/models/post.rb +7 -0
  38. data/test/dummy_app/app/models/user.rb +6 -0
  39. data/test/dummy_app/bin/rails +5 -0
  40. data/test/dummy_app/config/database.yml +14 -0
  41. data/test/dummy_app/config/routes.rb +3 -0
  42. data/test/dummy_app/db/migrate/20141209165002_create_users.rb +11 -0
  43. data/test/dummy_app/db/migrate/20141214142700_create_posts.rb +12 -0
  44. data/test/dummy_app/db/secondbase/migrate/20151202075826_create_comments.rb +11 -0
  45. data/test/dummy_app/init.rb +40 -0
  46. data/test/dummy_app/log/.keep +0 -0
  47. data/test/dummy_app/tmp/.keep +0 -0
  48. data/test/test_helper.rb +36 -0
  49. data/test/test_helpers/dummy_app_helpers.rb +90 -0
  50. data/test/test_helpers/rails_version_helpers.rb +29 -0
  51. data/test/test_helpers/stream_helpers.rb +40 -0
  52. metadata +220 -139
  53. data/.document +0 -5
  54. data/Gemfile.lock +0 -38
  55. data/README.rdoc +0 -143
  56. data/lib/generators/secondbase/USAGE +0 -19
  57. data/lib/generators/secondbase/migration_generator.rb +0 -36
  58. data/lib/generators/secondbase/templates/migration.rb +0 -13
  59. data/lib/secondbase/active_record/associations/has_and_belongs_to_many_association.rb +0 -66
  60. data/lib/secondbase/active_record/base.rb +0 -13
  61. data/lib/secondbase/active_record/fixtures.rb +0 -66
  62. data/lib/secondbase/active_record/patches.rb +0 -13
  63. data/lib/secondbase/active_record/test_fixtures.rb +0 -32
  64. data/lib/secondbase/model.rb +0 -11
  65. data/lib/secondbase/railtie.rb +0 -10
  66. data/lib/secondbase/rake_method_chain.rb +0 -22
  67. data/lib/secondbase/tasks.rb +0 -219
  68. data/rails_generators/secondbase/USAGE +0 -29
  69. data/rails_generators/secondbase/secondbase_migration_generator.rb +0 -20
  70. data/rails_generators/secondbase/templates/migration.rb +0 -15
  71. data/test/helper.rb +0 -18
  72. 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
@@ -0,0 +1,11 @@
1
+ if defined?(ActiveRecord::Base)
2
+
3
+ # Support test schema sync for Rails 4.2.x and up.
4
+ if ActiveRecord::Migration.respond_to? :maintain_test_schema!
5
+ SecondBase.on_base do
6
+ ActiveRecord::Migration.maintain_test_schema!
7
+ end
8
+ end
9
+
10
+
11
+ end
@@ -0,0 +1,3 @@
1
+ module SecondBase
2
+ VERSION = File.read(File.expand_path("../../../VERSION", __FILE__)).chomp
3
+ end
data/lib/secondbase.rb CHANGED
@@ -1,46 +1 @@
1
- require 'active_record'
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
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
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 = %q{secondbase}
8
- s.version = "0.6.0"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["karledurante"]
12
- s.date = %q{2012-08-31}
13
- s.description = %q{Secondbase provides support to Rails to create a homogeneous environment for a dual database project. Using the rake tasks already familiar to you, this gem enables Rails to work with two primary databases, instead of just one.}
14
- s.email = %q{kdurante@customink.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE.txt",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- "CHANGELOG.md",
22
- "Gemfile",
23
- "Gemfile.lock",
24
- "LICENSE.txt",
25
- "README.rdoc",
26
- "Rakefile",
27
- "VERSION",
28
- "lib/generators/secondbase/USAGE",
29
- "lib/generators/secondbase/migration_generator.rb",
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