secondbase 0.6.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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