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.
- 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
|