secondbase 0.6.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,49 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ForcedTest < SecondBase::TestCase
|
4
|
+
|
5
|
+
setup do
|
6
|
+
run_db :create
|
7
|
+
run_db :migrate
|
8
|
+
establish_connection
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_shared_pool
|
12
|
+
assert_equal SecondBase::Base.connection_pool.object_id,
|
13
|
+
CommentForced.connection_pool.object_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_shared_connection
|
17
|
+
assert_equal SecondBase::Base.connection.raw_connection.object_id,
|
18
|
+
CommentForced.connection.raw_connection.object_id
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_shared_new_connection_in_a_different_thread
|
22
|
+
current_base_connection_id = SecondBase::Base.connection.raw_connection.object_id
|
23
|
+
new_base_connection_id, new_forced_connection_id = Thread.new {
|
24
|
+
[ SecondBase::Base.connection.raw_connection.object_id,
|
25
|
+
CommentForced.connection.raw_connection.object_id ]
|
26
|
+
}.value
|
27
|
+
refute_equal new_base_connection_id, current_base_connection_id
|
28
|
+
assert_equal new_base_connection_id, new_forced_connection_id
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_shared_connected_query
|
32
|
+
assert SecondBase::Base.connected?
|
33
|
+
assert CommentForced.connected?
|
34
|
+
CommentForced.clear_all_connections!
|
35
|
+
refute SecondBase::Base.connected?
|
36
|
+
refute CommentForced.connected?
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_can_remove_connection_properly
|
40
|
+
base_connection = SecondBase::Base.connection
|
41
|
+
forced_connection = CommentForced.connection
|
42
|
+
assert base_connection.active?
|
43
|
+
assert forced_connection.active?
|
44
|
+
CommentForced.remove_connection
|
45
|
+
refute base_connection.active?
|
46
|
+
refute forced_connection.active?
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class GeneratorTest < SecondBase::TestCase
|
4
|
+
|
5
|
+
teardown { generated_migration_delete }
|
6
|
+
|
7
|
+
def test_initialization_via_help
|
8
|
+
output = Dir.chdir(dummy_root) { `rails g -h` }
|
9
|
+
assert_match /second_base\:migration/, output
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_description_uses_rails_base
|
13
|
+
output = Dir.chdir(dummy_root) { `rails g second_base:migration -h` }
|
14
|
+
assert_match %r{db/migrate/20080514090912_add_ssl_flag\.rb}, output
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_migration
|
18
|
+
output = Dir.chdir(dummy_root) { `rails g second_base:migration CreateFavorites post_id:integer count:integer` }
|
19
|
+
assert_match %r{create.*db/secondbase/migrate/.*create_favorites\.rb}, output
|
20
|
+
migration = generated_migration_data
|
21
|
+
assert_match %r{create_table :favorites}, migration
|
22
|
+
assert_match %r{t.integer :post_id}, migration
|
23
|
+
assert_match %r{t.integer :count}, migration
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def generated_migration
|
30
|
+
Dir["#{dummy_db}/secondbase/migrate/*favorites.{rb}"].first
|
31
|
+
end
|
32
|
+
|
33
|
+
def generated_migration_data
|
34
|
+
generated_migration ? File.read(generated_migration) : ''
|
35
|
+
end
|
36
|
+
|
37
|
+
def generated_migration_delete
|
38
|
+
FileUtils.rm_rf(generated_migration) if generated_migration
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class OnBaseTest < SecondBase::TestCase
|
4
|
+
|
5
|
+
setup do
|
6
|
+
run_db :create
|
7
|
+
run_db :migrate
|
8
|
+
establish_connection
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_on_base
|
12
|
+
refute SecondBase.is_on_base
|
13
|
+
SecondBase.on_base do
|
14
|
+
assert SecondBase.is_on_base
|
15
|
+
assert_equal SecondBase::Base.connection.class, ActiveRecord::Base.connection.class
|
16
|
+
assert_equal SecondBase::Railtie.fullpath('migrate'), ActiveRecord::Tasks::DatabaseTasks.migrations_paths
|
17
|
+
assert_equal SecondBase::Railtie.fullpath, ActiveRecord::Tasks::DatabaseTasks.db_dir
|
18
|
+
end
|
19
|
+
refute SecondBase.is_on_base
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_on_base_nested
|
23
|
+
refute SecondBase.is_on_base
|
24
|
+
SecondBase.on_base do
|
25
|
+
assert SecondBase.is_on_base
|
26
|
+
SecondBase.on_base do
|
27
|
+
assert SecondBase.is_on_base
|
28
|
+
end
|
29
|
+
assert SecondBase.is_on_base
|
30
|
+
end
|
31
|
+
refute SecondBase.is_on_base
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RailtieTest < SecondBase::TestCase
|
4
|
+
|
5
|
+
def test_config
|
6
|
+
expected_path = 'db/secondbase'
|
7
|
+
assert_equal expected_path, railtie_inst.config.second_base.path
|
8
|
+
assert_equal expected_path, railtie_klass.config.second_base.path
|
9
|
+
expected_config_key = 'secondbase'
|
10
|
+
assert_equal expected_config_key, railtie_inst.config.second_base.config_key
|
11
|
+
assert_equal expected_config_key, railtie_klass.config.second_base.config_key
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_fullpath
|
15
|
+
expected = dummy_db.join('secondbase').to_s
|
16
|
+
assert_equal expected, railtie_inst.fullpath
|
17
|
+
assert_equal expected, railtie_klass.fullpath
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def railtie_inst
|
24
|
+
dummy_app.railties.grep(railtie_klass).first
|
25
|
+
end
|
26
|
+
|
27
|
+
def railtie_klass
|
28
|
+
SecondBase::Railtie
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
ENV['RAILS_ENV'] ||= 'test'
|
2
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __FILE__)
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'rails/all'
|
5
|
+
Bundler.require(:default, Rails.env)
|
6
|
+
|
7
|
+
module Dummy
|
8
|
+
class Application < ::Rails::Application
|
9
|
+
|
10
|
+
# Basic Engine
|
11
|
+
config.root = File.join __FILE__, '..'
|
12
|
+
config.cache_store = :memory_store
|
13
|
+
config.assets.enabled = false
|
14
|
+
config.secret_token = '012345678901234567890123456789'
|
15
|
+
config.active_support.test_order = :random
|
16
|
+
|
17
|
+
# Mimic Test Environment Config.
|
18
|
+
config.consider_all_requests_local = true
|
19
|
+
config.action_controller.perform_caching = false
|
20
|
+
config.action_dispatch.show_exceptions = false
|
21
|
+
config.action_controller.allow_forgery_protection = false
|
22
|
+
config.action_mailer.delivery_method = :test
|
23
|
+
config.active_support.deprecation = :stderr
|
24
|
+
config.allow_concurrency = true
|
25
|
+
config.cache_classes = true
|
26
|
+
config.dependency_loading = true
|
27
|
+
config.preload_frameworks = true
|
28
|
+
config.eager_load = true
|
29
|
+
config.secret_key_base = '012345678901234567890123456789'
|
30
|
+
|
31
|
+
# Keep pending test:prepare via pending migrations from running.
|
32
|
+
config.active_record.maintain_test_schema = false if ActiveRecord::Base.respond_to?(:maintain_test_schema)
|
33
|
+
|
34
|
+
config.active_record.schema_format = ENV['SCHEMA_FORMAT'] ? :sql : :ruby
|
35
|
+
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
Dummy::Application.initialize!
|
File without changes
|
File without changes
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
ENV['RAILS_ENV'] ||= 'test'
|
2
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
3
|
+
require 'bundler/setup'
|
4
|
+
Bundler.require :default, :development
|
5
|
+
require 'second_base'
|
6
|
+
require 'active_support/test_case'
|
7
|
+
require 'active_support/testing/autorun'
|
8
|
+
require 'dummy_app/init'
|
9
|
+
require 'rails/test_help'
|
10
|
+
Dir['test/test_helpers/*.{rb}'].each { |f| require_relative "../#{f}" }
|
11
|
+
|
12
|
+
ActiveSupport.test_order = :random if ActiveSupport.respond_to?(:test_order)
|
13
|
+
|
14
|
+
module SecondBase
|
15
|
+
class TestCase < ActiveSupport::TestCase
|
16
|
+
|
17
|
+
self.use_transactional_fixtures = false
|
18
|
+
|
19
|
+
include RailsVersionHelpers,
|
20
|
+
DummyAppHelpers,
|
21
|
+
StreamHelpers
|
22
|
+
|
23
|
+
setup :delete_dummy_files
|
24
|
+
teardown :delete_dummy_files
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def establish_connection
|
29
|
+
ActiveRecord::Base.establish_connection
|
30
|
+
ActiveRecord::Base.connection
|
31
|
+
SecondBase::Base.establish_connection(SecondBase.config)
|
32
|
+
SecondBase::Base.connection
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module SecondBase
|
2
|
+
module DummyAppHelpers
|
3
|
+
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def dummy_app
|
9
|
+
::Dummy::Application
|
10
|
+
end
|
11
|
+
|
12
|
+
def dummy_root
|
13
|
+
dummy_app.root
|
14
|
+
end
|
15
|
+
|
16
|
+
def dummy_config
|
17
|
+
dummy_app.config
|
18
|
+
end
|
19
|
+
|
20
|
+
def dummy_tmp
|
21
|
+
dummy_app.root.join 'tmp'
|
22
|
+
end
|
23
|
+
|
24
|
+
def dummy_db
|
25
|
+
dummy_app.root.join 'db'
|
26
|
+
end
|
27
|
+
|
28
|
+
def dummy_schema
|
29
|
+
dummy_db.join 'schema.rb'
|
30
|
+
end
|
31
|
+
|
32
|
+
def dummy_secondbase_schema
|
33
|
+
dummy_db.join('secondbase', 'schema.rb')
|
34
|
+
end
|
35
|
+
|
36
|
+
def dummy_database_sqlite
|
37
|
+
Dir.chdir(dummy_db){ Dir['*.sqlite3'] }.first
|
38
|
+
end
|
39
|
+
|
40
|
+
def dummy_migration
|
41
|
+
@dummy_migration ||= begin
|
42
|
+
vers = Time.now.utc.strftime '%Y%m%d%H%M%S'
|
43
|
+
file = dummy_root.join 'db', 'secondbase', 'migrate', "#{vers}_create_foos.rb"
|
44
|
+
migr = %|class CreateFoos < ActiveRecord::Migration ; def change ; create_table(:foos) ; end ; end|
|
45
|
+
File.open(file,'w') { |f| f.write(migr) }
|
46
|
+
{version: vers, file: file}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def delete_dummy_files
|
51
|
+
FileUtils.rm_rf dummy_schema
|
52
|
+
FileUtils.rm_rf dummy_secondbase_schema
|
53
|
+
Dir.chdir(dummy_db) { Dir['**/structure.sql'].each { |structure| FileUtils.rm_rf(structure) } }
|
54
|
+
Dir.chdir(dummy_db) { FileUtils.rm_rf(dummy_database_sqlite) } if dummy_database_sqlite
|
55
|
+
FileUtils.rm_rf(dummy_migration[:file]) if @dummy_migration
|
56
|
+
`mysql -uroot -e "DROP DATABASE IF EXISTS secondbase_test"`
|
57
|
+
end
|
58
|
+
|
59
|
+
# Runners
|
60
|
+
|
61
|
+
def run_cmd
|
62
|
+
'rake'
|
63
|
+
end
|
64
|
+
|
65
|
+
def run_db(args, stream=:stdout)
|
66
|
+
capture(stream) do
|
67
|
+
Dir.chdir(dummy_root) { Kernel.system "#{run_cmd} db:#{args}" }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def run_secondbase(args, stream=:stdout)
|
72
|
+
capture(stream) do
|
73
|
+
Dir.chdir(dummy_root) { Kernel.system "#{run_cmd} db:second_base:#{args}" }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Assertions
|
78
|
+
|
79
|
+
def assert_dummy_databases
|
80
|
+
assert_equal 'base.sqlite3', dummy_database_sqlite
|
81
|
+
assert_match /secondbase_test/, `mysql -uroot -e "SHOW DATABASES"`
|
82
|
+
end
|
83
|
+
|
84
|
+
def refute_dummy_databases
|
85
|
+
assert_nil dummy_database_sqlite
|
86
|
+
refute_match /secondbase_test/, `mysql -uroot -e "SHOW DATABASES"`
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|