multi-database-9000 0.1.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 +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +59 -0
- data/Rakefile +2 -0
- data/features/creating_databases.feature +75 -0
- data/features/development_migrations.feature +94 -0
- data/features/production_migrations.feature +32 -0
- data/features/step_definitions/development_migrations_steps.rb +244 -0
- data/features/step_definitions/production_migration_steps.rb +28 -0
- data/features/step_definitions/sqlite_database_steps.rb +41 -0
- data/features/step_definitions/test_migration_steps.rb +84 -0
- data/features/support/env.rb +2 -0
- data/features/test_app.feature +6 -0
- data/features/test_migrations.feature +24 -0
- data/lib/multi-database-9000/multi-database-9000.rb +12 -0
- data/lib/multi-database-9000/tasks/multi-database-9000_tasks.rake +143 -0
- data/lib/multi-database-9000/version.rb +3 -0
- data/lib/multi-database-9000.rb +10 -0
- data/multi-database-9000.gemspec +29 -0
- data/multi-db-dummy/Gemfile +15 -0
- data/multi-db-dummy/Gemfile.lock +115 -0
- data/multi-db-dummy/README.rdoc +28 -0
- data/multi-db-dummy/Rakefile +6 -0
- data/multi-db-dummy/app/assets/images/.keep +0 -0
- data/multi-db-dummy/app/assets/stylesheets/application.css +15 -0
- data/multi-db-dummy/app/controllers/application_controller.rb +5 -0
- data/multi-db-dummy/app/controllers/concerns/.keep +0 -0
- data/multi-db-dummy/app/helpers/application_helper.rb +2 -0
- data/multi-db-dummy/app/mailers/.keep +0 -0
- data/multi-db-dummy/app/models/.keep +0 -0
- data/multi-db-dummy/app/models/concerns/.keep +0 -0
- data/multi-db-dummy/app/models/gadget.rb +3 -0
- data/multi-db-dummy/app/views/layouts/application.html.erb +13 -0
- data/multi-db-dummy/bin/bundle +3 -0
- data/multi-db-dummy/bin/rails +4 -0
- data/multi-db-dummy/bin/rake +4 -0
- data/multi-db-dummy/bin/setup +29 -0
- data/multi-db-dummy/config/application.rb +35 -0
- data/multi-db-dummy/config/boot.rb +3 -0
- data/multi-db-dummy/config/database.yml +49 -0
- data/multi-db-dummy/config/environment.rb +5 -0
- data/multi-db-dummy/config/environments/development.rb +28 -0
- data/multi-db-dummy/config/environments/production.rb +67 -0
- data/multi-db-dummy/config/environments/test.rb +42 -0
- data/multi-db-dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/multi-db-dummy/config/initializers/cookies_serializer.rb +3 -0
- data/multi-db-dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/multi-db-dummy/config/initializers/inflections.rb +16 -0
- data/multi-db-dummy/config/initializers/mime_types.rb +4 -0
- data/multi-db-dummy/config/initializers/session_store.rb +3 -0
- data/multi-db-dummy/config/initializers/wrap_parameters.rb +14 -0
- data/multi-db-dummy/config/locales/en.yml +23 -0
- data/multi-db-dummy/config/routes.rb +56 -0
- data/multi-db-dummy/config/secrets.yml +22 -0
- data/multi-db-dummy/config.ru +4 -0
- data/multi-db-dummy/lib/assets/.keep +0 -0
- data/multi-db-dummy/lib/tasks/.keep +0 -0
- data/multi-db-dummy/log/.keep +0 -0
- data/multi-db-dummy/public/404.html +67 -0
- data/multi-db-dummy/public/422.html +67 -0
- data/multi-db-dummy/public/500.html +66 -0
- data/multi-db-dummy/public/favicon.ico +0 -0
- data/multi-db-dummy/public/robots.txt +5 -0
- data/multi-db-dummy/test/controllers/.keep +0 -0
- data/multi-db-dummy/test/fixtures/.keep +0 -0
- data/multi-db-dummy/test/helpers/.keep +0 -0
- data/multi-db-dummy/test/integration/.keep +0 -0
- data/multi-db-dummy/test/mailers/.keep +0 -0
- data/multi-db-dummy/test/models/.keep +0 -0
- data/multi-db-dummy/test/models/gadget_test.rb +8 -0
- data/multi-db-dummy/test/test_helper.rb +12 -0
- data/multi-db-dummy/vendor/assets/stylesheets/.keep +0 -0
- data/single-db-dummy/Gemfile +16 -0
- data/single-db-dummy/Gemfile.lock +115 -0
- data/single-db-dummy/README.rdoc +28 -0
- data/single-db-dummy/Rakefile +6 -0
- data/single-db-dummy/app/assets/images/.keep +0 -0
- data/single-db-dummy/app/assets/stylesheets/application.css +15 -0
- data/single-db-dummy/app/controllers/application_controller.rb +5 -0
- data/single-db-dummy/app/controllers/concerns/.keep +0 -0
- data/single-db-dummy/app/helpers/application_helper.rb +2 -0
- data/single-db-dummy/app/mailers/.keep +0 -0
- data/single-db-dummy/app/models/.keep +0 -0
- data/single-db-dummy/app/models/concerns/.keep +0 -0
- data/single-db-dummy/app/models/user.rb +3 -0
- data/single-db-dummy/app/views/layouts/application.html.erb +13 -0
- data/single-db-dummy/bin/bundle +3 -0
- data/single-db-dummy/bin/rails +4 -0
- data/single-db-dummy/bin/rake +4 -0
- data/single-db-dummy/bin/setup +29 -0
- data/single-db-dummy/config/application.rb +35 -0
- data/single-db-dummy/config/boot.rb +3 -0
- data/single-db-dummy/config/database.yml +25 -0
- data/single-db-dummy/config/environment.rb +5 -0
- data/single-db-dummy/config/environments/development.rb +28 -0
- data/single-db-dummy/config/environments/production.rb +67 -0
- data/single-db-dummy/config/environments/test.rb +42 -0
- data/single-db-dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/single-db-dummy/config/initializers/cookies_serializer.rb +3 -0
- data/single-db-dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/single-db-dummy/config/initializers/inflections.rb +16 -0
- data/single-db-dummy/config/initializers/mime_types.rb +4 -0
- data/single-db-dummy/config/initializers/session_store.rb +3 -0
- data/single-db-dummy/config/initializers/wrap_parameters.rb +14 -0
- data/single-db-dummy/config/locales/en.yml +23 -0
- data/single-db-dummy/config/routes.rb +56 -0
- data/single-db-dummy/config/secrets.yml +22 -0
- data/single-db-dummy/config.ru +4 -0
- data/single-db-dummy/lib/assets/.keep +0 -0
- data/single-db-dummy/lib/tasks/.keep +0 -0
- data/single-db-dummy/log/.keep +0 -0
- data/single-db-dummy/public/404.html +67 -0
- data/single-db-dummy/public/422.html +67 -0
- data/single-db-dummy/public/500.html +66 -0
- data/single-db-dummy/public/favicon.ico +0 -0
- data/single-db-dummy/public/robots.txt +5 -0
- data/single-db-dummy/test/controllers/.keep +0 -0
- data/single-db-dummy/test/fixtures/.keep +0 -0
- data/single-db-dummy/test/helpers/.keep +0 -0
- data/single-db-dummy/test/integration/.keep +0 -0
- data/single-db-dummy/test/mailers/.keep +0 -0
- data/single-db-dummy/test/models/.keep +0 -0
- data/single-db-dummy/test/models/user_test.rb +8 -0
- data/single-db-dummy/test/test_helper.rb +10 -0
- data/single-db-dummy/vendor/assets/stylesheets/.keep +0 -0
- metadata +295 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
Given(/^A development database with a "([^"]*)" table with columns "([^"]*)", "([^"]*)" and "([^"]*)"$/) do |table, column1, column2, column3|
|
|
2
|
+
write_single_db_migration
|
|
3
|
+
run_task_in_single_db_app "bundle exec rake db:migrate"
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
When(/^I run a model test$/) do
|
|
7
|
+
test_file = <<-TEST_FILE_END
|
|
8
|
+
require 'test_helper'
|
|
9
|
+
|
|
10
|
+
class UserTest < ActiveSupport::TestCase
|
|
11
|
+
test "should save" do
|
|
12
|
+
user = User.new
|
|
13
|
+
assert user.save
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
TEST_FILE_END
|
|
17
|
+
|
|
18
|
+
write_file "../../single-db-dummy/test/models/user_test.rb", test_file
|
|
19
|
+
|
|
20
|
+
run_task_in_single_db_app "bundle exec rake test"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
Then(/^I should see the created users table in the default test database$/) do
|
|
24
|
+
table_exists? :app => "single-db-dummy", :database => "test.sqlite3", :table => "users"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Then(/^I should see the correct columns in the users table in the default test database$/) do
|
|
28
|
+
columns_exist? app: "single-db-dummy", :database => "test.sqlite3", :table => "users", :columns => ["name", "email", "age"]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
Given(/^A "([^"]*)" development database with a "([^"]*)" table with columns "([^"]*)", "([^"]*)" and "([^"]*)"$/) do |database, table, column1, column2, column3|
|
|
32
|
+
write_migration_for_default_db
|
|
33
|
+
write_migration_for_users_db
|
|
34
|
+
write_migration_for_widgets_db
|
|
35
|
+
run_task_in_multi_db_app "bundle exec rake db:migrate"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
When(/^I run a model test in the multi\-database app$/) do
|
|
39
|
+
test_file = <<-TEST_FILE_END
|
|
40
|
+
require 'test_helper'
|
|
41
|
+
|
|
42
|
+
class GadgetTest < ActiveSupport::TestCase
|
|
43
|
+
test "should save" do
|
|
44
|
+
gadget = Gadget.new
|
|
45
|
+
assert gadget.save
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
TEST_FILE_END
|
|
49
|
+
|
|
50
|
+
write_file "../../multi-db-dummy/test/models/gadget_test.rb", test_file
|
|
51
|
+
|
|
52
|
+
run_task_in_multi_db_app "bundle exec rake test"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
Then(/^I should see the created "([^"]*)" table in the "([^"]*)" test database$/) do |table, database|
|
|
56
|
+
if database == "default"
|
|
57
|
+
database_file = "test"
|
|
58
|
+
else
|
|
59
|
+
database_file = "#{database}_test"
|
|
60
|
+
end
|
|
61
|
+
table_exists? :app => "multi-db-dummy", :database => "#{database_file}.sqlite3", :table => table
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# helpers
|
|
66
|
+
|
|
67
|
+
def table_exists?(app:, database:, table:)
|
|
68
|
+
SQLite3::Database.new( "#{app}/db/#{database}" ) do |db|
|
|
69
|
+
table_query = db.execute( "SELECT name FROM sqlite_master WHERE type='table' AND name='#{table}'" )
|
|
70
|
+
expect(table_query[0][0]).to eq table
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def columns_exist?(app:, database:, table:, columns:)
|
|
75
|
+
SQLite3::Database.new( "#{app}/db/#{database}" ) do |db|
|
|
76
|
+
users_columns = db.execute( "PRAGMA table_info(#{table})" )
|
|
77
|
+
column_names = users_columns.map do |column|
|
|
78
|
+
column[1]
|
|
79
|
+
end
|
|
80
|
+
columns.each do |test_column|
|
|
81
|
+
expect(column_names).to include test_column
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Feature: Running migrations and test preparation for all database in the app
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given empty databases have been created for the app
|
|
5
|
+
|
|
6
|
+
Scenario: Test database is correctly set up in a single-database app
|
|
7
|
+
Given A development database with a "users" table with columns "name", "age" and "email"
|
|
8
|
+
When I run a model test
|
|
9
|
+
Then I should see the created users table in the default test database
|
|
10
|
+
And I should see the correct columns in the users table in the default test database
|
|
11
|
+
|
|
12
|
+
Scenario: Test database is correctly set up in a multi-database app
|
|
13
|
+
Given A "default" development database with a "posts" table with columns "title", "text" and "author"
|
|
14
|
+
And A "users" development database with a "accounts" table with columns "user_id", "expenses" and "total"
|
|
15
|
+
And A "widgets" development database with a "gadgets" table with columns "doobry", "wotsit" and "thingy"
|
|
16
|
+
When I run a model test in the multi-database app
|
|
17
|
+
Then I should see the created "posts" table in the "default" test database
|
|
18
|
+
Then I should see the created "accounts" table in the "users" test database
|
|
19
|
+
Then I should see the created "gadgets" table in the "widgets" test database
|
|
20
|
+
And I should see the "title", "text" and "author" columns in the "posts" table in the "default" database
|
|
21
|
+
And I should see the "expense", "user_id" and "total" columns in the "accounts" table in the "users" database
|
|
22
|
+
And I should see the "doobry", "wotsit" and "thingy" columns in the "gadgets" table in the "widgets" database
|
|
23
|
+
|
|
24
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module MultiDatabase9000
|
|
2
|
+
def self.maintain_all_test_schemas! # :nodoc:
|
|
3
|
+
# Roundrip to Rake to allow plugins to hook into database initialization.
|
|
4
|
+
FileUtils.cd Rails.root do
|
|
5
|
+
current_config = ActiveRecord::Base.connection_config
|
|
6
|
+
ActiveRecord::Base.clear_all_connections!
|
|
7
|
+
system("bin/rake db:test:prepare")
|
|
8
|
+
# Establish a new connection, the old database may be gone (db:test:prepare uses purge)
|
|
9
|
+
ActiveRecord::Base.establish_connection(current_config)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
require 'pry'
|
|
2
|
+
|
|
3
|
+
def database_connections(database: nil, rails_envs: nil)
|
|
4
|
+
connections = connections_for_environment(rails_envs)
|
|
5
|
+
if database.present?
|
|
6
|
+
connections.keep_if {|key, _| key.match Regexp.new(database)}
|
|
7
|
+
end
|
|
8
|
+
return connections
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def connections_for_environment(rails_envs)
|
|
12
|
+
rails_envs = Array(rails_envs)
|
|
13
|
+
matcher = ->(key, value){rails_envs.any?{|env| key.match Regexp.new(env)}}
|
|
14
|
+
return ActiveRecord::Base.configurations.keep_if &matcher
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def database_name(connection_key)
|
|
18
|
+
if connection_key.match /\w+_\w+/
|
|
19
|
+
return connection_key.split('_').first
|
|
20
|
+
else
|
|
21
|
+
return "default"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def migration_directory(connection_key)
|
|
26
|
+
if ['test','development','staging','cucumber','production'].include? connection_key
|
|
27
|
+
return "db/migrate/"
|
|
28
|
+
else
|
|
29
|
+
return "db/#{database_name(connection_key)}_migrate/"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def schema_file_name(connection_key)
|
|
34
|
+
if ['test','development','staging','cucumber','production'].include? connection_key
|
|
35
|
+
return "schema.rb"
|
|
36
|
+
else
|
|
37
|
+
return "#{database_name(connection_key)}_schema.rb"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
Rake::Task['db:create'].clear
|
|
42
|
+
Rake::Task['db:migrate'].clear
|
|
43
|
+
Rake::Task['db:schema:dump'].clear
|
|
44
|
+
Rake::Task['db:migrate:status'].clear
|
|
45
|
+
|
|
46
|
+
Rake::Task["db:test:load_schema"].enhance do
|
|
47
|
+
begin
|
|
48
|
+
should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
|
|
49
|
+
connections_for_environment("test").each do |connection_key, connection|
|
|
50
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema_for connection, :ruby, "db/#{schema_file_name(connection_key)}"
|
|
51
|
+
end
|
|
52
|
+
ensure
|
|
53
|
+
if should_reconnect
|
|
54
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[ActiveRecord::Tasks::DatabaseTasks.env])
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
Rake::Task["db:test:purge"].enhance do
|
|
60
|
+
connections_for_environment("test").values.each do |connection|
|
|
61
|
+
ActiveRecord::Tasks::DatabaseTasks.purge connection
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
db_namespace = namespace :db do
|
|
66
|
+
desc "Creates all databases from config/database.yml, or the database specified by DATABASE for the current RAILS_ENV"
|
|
67
|
+
task :create => [:load_config] do
|
|
68
|
+
if ENV["RAILS_ENV"] == "development" || ENV["RAILS_ENV"].nil?
|
|
69
|
+
rails_envs = ["development", "test"]
|
|
70
|
+
else
|
|
71
|
+
rails_envs = ENV["RAILS_ENV"]
|
|
72
|
+
end
|
|
73
|
+
database_connections(:database => ENV["DATABASE"], :rails_envs => rails_envs).values.each do |database_connection|
|
|
74
|
+
ActiveRecord::Tasks::DatabaseTasks.create database_connection
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
task :migrate => :environment do
|
|
79
|
+
rails_env = ENV["RAILS_ENV"] || "development"
|
|
80
|
+
database_connections(:database => ENV["DATABASE"], :rails_envs => rails_env).keys.each do |connection_key|
|
|
81
|
+
ActiveRecord::Base.establish_connection(connection_key)
|
|
82
|
+
ActiveRecord::Migrator.migrate(migration_directory(connection_key) , ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
|
83
|
+
end
|
|
84
|
+
db_namespace['_dump'].invoke
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
namespace :migrate do
|
|
88
|
+
desc 'Display status of migrations'
|
|
89
|
+
task :status => [:environment] do
|
|
90
|
+
migrations_list = []
|
|
91
|
+
|
|
92
|
+
database_connections(:database => ENV["DATABASE"], :rails_envs => "development" || ENV["RAILS_ENV"]).keys.each do |connection_key|
|
|
93
|
+
ActiveRecord::Base.establish_connection(connection_key)
|
|
94
|
+
|
|
95
|
+
abort 'Schema migrations table does not exist yet.' unless ActiveRecord::SchemaMigration.table_exists?
|
|
96
|
+
|
|
97
|
+
db_list = ActiveRecord::SchemaMigration.normalized_versions
|
|
98
|
+
|
|
99
|
+
file_list =
|
|
100
|
+
Dir.foreach(migration_directory(connection_key)).grep(/^(\d{3,})_(.+)\.rb$/) do
|
|
101
|
+
version = ActiveRecord::SchemaMigration.normalize_migration_number($1)
|
|
102
|
+
status = db_list.delete(version) ? 'up' : 'down'
|
|
103
|
+
[status, version, database_name(connection_key), $2.humanize]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
db_list.map! do |version|
|
|
107
|
+
['up', version, database_name(connection_key), '********** NO FILE **********']
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
migrations_list += db_list + file_list
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# output
|
|
114
|
+
puts "#{'Status'.center(8)} #{'Migration ID'.ljust(14)} #{'Database'.ljust(14)} Migration Name"
|
|
115
|
+
puts "-" * 50
|
|
116
|
+
(migrations_list).sort_by { |_, version, _, _| version }.each do |status, version, database, name|
|
|
117
|
+
puts "#{status.center(8)} #{version.ljust(14)} #{database.ljust(14)} #{name}"
|
|
118
|
+
end
|
|
119
|
+
puts
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
namespace :schema do
|
|
124
|
+
desc 'Create a db/schema.rb file for each database, that is portable against any DB supported by AR'
|
|
125
|
+
task :dump => [:environment] do
|
|
126
|
+
require 'active_record/schema_dumper'
|
|
127
|
+
|
|
128
|
+
if ENV["RAILS_ENV"] == "development" || ENV["RAILS_ENV"].nil?
|
|
129
|
+
rails_envs = ["development", "test"]
|
|
130
|
+
else
|
|
131
|
+
rails_envs = ENV["RAILS_ENV"]
|
|
132
|
+
end
|
|
133
|
+
database_connections(:database => ENV["DATABASE"], :rails_envs => rails_envs).keys.each do |connection_key|
|
|
134
|
+
ActiveRecord::Base.establish_connection(connection_key)
|
|
135
|
+
filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, schema_file_name(connection_key))
|
|
136
|
+
File.open(filename, "w:utf-8") do |file|
|
|
137
|
+
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
db_namespace['schema:dump'].reenable
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'multi-database-9000/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "multi-database-9000"
|
|
8
|
+
spec.version = MultiDatabase9000::VERSION
|
|
9
|
+
spec.authors = ["Mark Weston", "Stefania Cardenas", "Colin Frankish"]
|
|
10
|
+
spec.email = ["mark@markweston.me.uk"]
|
|
11
|
+
spec.summary = %q{Enables Rails apps with multiple databases to handle migrations and rake tasks transparently}
|
|
12
|
+
spec.description = %q{See README.md for details}
|
|
13
|
+
spec.homepage = ""
|
|
14
|
+
spec.license = "MIT"
|
|
15
|
+
|
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
spec.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
|
23
|
+
spec.add_development_dependency "rspec", ">= 3.0"
|
|
24
|
+
spec.add_development_dependency "cucumber"
|
|
25
|
+
spec.add_development_dependency "aruba"
|
|
26
|
+
spec.add_development_dependency "sqlite3"
|
|
27
|
+
spec.add_development_dependency "pry"
|
|
28
|
+
spec.add_runtime_dependency "rails", ">= 4.0"
|
|
29
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
|
|
5
|
+
gem 'rails', '4.2.4'
|
|
6
|
+
# Use sqlite3 as the database for Active Record
|
|
7
|
+
gem 'sqlite3'
|
|
8
|
+
|
|
9
|
+
gem 'multi-database-9000', :path => ".."
|
|
10
|
+
|
|
11
|
+
group :development, :test do
|
|
12
|
+
gem 'pry'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: ..
|
|
3
|
+
specs:
|
|
4
|
+
multi-database-9000 (0.0.1)
|
|
5
|
+
rails (>= 4.0)
|
|
6
|
+
|
|
7
|
+
GEM
|
|
8
|
+
remote: https://rubygems.org/
|
|
9
|
+
specs:
|
|
10
|
+
actionmailer (4.2.4)
|
|
11
|
+
actionpack (= 4.2.4)
|
|
12
|
+
actionview (= 4.2.4)
|
|
13
|
+
activejob (= 4.2.4)
|
|
14
|
+
mail (~> 2.5, >= 2.5.4)
|
|
15
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
16
|
+
actionpack (4.2.4)
|
|
17
|
+
actionview (= 4.2.4)
|
|
18
|
+
activesupport (= 4.2.4)
|
|
19
|
+
rack (~> 1.6)
|
|
20
|
+
rack-test (~> 0.6.2)
|
|
21
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
22
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
|
23
|
+
actionview (4.2.4)
|
|
24
|
+
activesupport (= 4.2.4)
|
|
25
|
+
builder (~> 3.1)
|
|
26
|
+
erubis (~> 2.7.0)
|
|
27
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
28
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
|
29
|
+
activejob (4.2.4)
|
|
30
|
+
activesupport (= 4.2.4)
|
|
31
|
+
globalid (>= 0.3.0)
|
|
32
|
+
activemodel (4.2.4)
|
|
33
|
+
activesupport (= 4.2.4)
|
|
34
|
+
builder (~> 3.1)
|
|
35
|
+
activerecord (4.2.4)
|
|
36
|
+
activemodel (= 4.2.4)
|
|
37
|
+
activesupport (= 4.2.4)
|
|
38
|
+
arel (~> 6.0)
|
|
39
|
+
activesupport (4.2.4)
|
|
40
|
+
i18n (~> 0.7)
|
|
41
|
+
json (~> 1.7, >= 1.7.7)
|
|
42
|
+
minitest (~> 5.1)
|
|
43
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
|
44
|
+
tzinfo (~> 1.1)
|
|
45
|
+
arel (6.0.3)
|
|
46
|
+
builder (3.2.2)
|
|
47
|
+
coderay (1.1.0)
|
|
48
|
+
erubis (2.7.0)
|
|
49
|
+
globalid (0.3.6)
|
|
50
|
+
activesupport (>= 4.1.0)
|
|
51
|
+
i18n (0.7.0)
|
|
52
|
+
json (1.8.3)
|
|
53
|
+
loofah (2.0.3)
|
|
54
|
+
nokogiri (>= 1.5.9)
|
|
55
|
+
mail (2.6.3)
|
|
56
|
+
mime-types (>= 1.16, < 3)
|
|
57
|
+
method_source (0.8.2)
|
|
58
|
+
mime-types (2.6.2)
|
|
59
|
+
mini_portile (0.6.2)
|
|
60
|
+
minitest (5.8.1)
|
|
61
|
+
nokogiri (1.6.6.2)
|
|
62
|
+
mini_portile (~> 0.6.0)
|
|
63
|
+
pry (0.10.1)
|
|
64
|
+
coderay (~> 1.1.0)
|
|
65
|
+
method_source (~> 0.8.1)
|
|
66
|
+
slop (~> 3.4)
|
|
67
|
+
rack (1.6.4)
|
|
68
|
+
rack-test (0.6.3)
|
|
69
|
+
rack (>= 1.0)
|
|
70
|
+
rails (4.2.4)
|
|
71
|
+
actionmailer (= 4.2.4)
|
|
72
|
+
actionpack (= 4.2.4)
|
|
73
|
+
actionview (= 4.2.4)
|
|
74
|
+
activejob (= 4.2.4)
|
|
75
|
+
activemodel (= 4.2.4)
|
|
76
|
+
activerecord (= 4.2.4)
|
|
77
|
+
activesupport (= 4.2.4)
|
|
78
|
+
bundler (>= 1.3.0, < 2.0)
|
|
79
|
+
railties (= 4.2.4)
|
|
80
|
+
sprockets-rails
|
|
81
|
+
rails-deprecated_sanitizer (1.0.3)
|
|
82
|
+
activesupport (>= 4.2.0.alpha)
|
|
83
|
+
rails-dom-testing (1.0.7)
|
|
84
|
+
activesupport (>= 4.2.0.beta, < 5.0)
|
|
85
|
+
nokogiri (~> 1.6.0)
|
|
86
|
+
rails-deprecated_sanitizer (>= 1.0.1)
|
|
87
|
+
rails-html-sanitizer (1.0.2)
|
|
88
|
+
loofah (~> 2.0)
|
|
89
|
+
railties (4.2.4)
|
|
90
|
+
actionpack (= 4.2.4)
|
|
91
|
+
activesupport (= 4.2.4)
|
|
92
|
+
rake (>= 0.8.7)
|
|
93
|
+
thor (>= 0.18.1, < 2.0)
|
|
94
|
+
rake (10.4.2)
|
|
95
|
+
slop (3.6.0)
|
|
96
|
+
sprockets (3.3.5)
|
|
97
|
+
rack (> 1, < 3)
|
|
98
|
+
sprockets-rails (2.3.3)
|
|
99
|
+
actionpack (>= 3.0)
|
|
100
|
+
activesupport (>= 3.0)
|
|
101
|
+
sprockets (>= 2.8, < 4.0)
|
|
102
|
+
sqlite3 (1.3.10)
|
|
103
|
+
thor (0.19.1)
|
|
104
|
+
thread_safe (0.3.5)
|
|
105
|
+
tzinfo (1.2.2)
|
|
106
|
+
thread_safe (~> 0.1)
|
|
107
|
+
|
|
108
|
+
PLATFORMS
|
|
109
|
+
ruby
|
|
110
|
+
|
|
111
|
+
DEPENDENCIES
|
|
112
|
+
multi-database-9000!
|
|
113
|
+
pry
|
|
114
|
+
rails (= 4.2.4)
|
|
115
|
+
sqlite3
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
== README
|
|
2
|
+
|
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
|
4
|
+
application up and running.
|
|
5
|
+
|
|
6
|
+
Things you may want to cover:
|
|
7
|
+
|
|
8
|
+
* Ruby version
|
|
9
|
+
|
|
10
|
+
* System dependencies
|
|
11
|
+
|
|
12
|
+
* Configuration
|
|
13
|
+
|
|
14
|
+
* Database creation
|
|
15
|
+
|
|
16
|
+
* Database initialization
|
|
17
|
+
|
|
18
|
+
* How to run the test suite
|
|
19
|
+
|
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
|
21
|
+
|
|
22
|
+
* Deployment instructions
|
|
23
|
+
|
|
24
|
+
* ...
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
Please feel free to use a different markup language if you do not plan to run
|
|
28
|
+
<tt>rake doc:app</tt>.
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
|
3
|
+
* listed below.
|
|
4
|
+
*
|
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
|
7
|
+
*
|
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any styles
|
|
10
|
+
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
|
11
|
+
* file per style scope.
|
|
12
|
+
*
|
|
13
|
+
*= require_tree .
|
|
14
|
+
*= require_self
|
|
15
|
+
*/
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'pathname'
|
|
3
|
+
|
|
4
|
+
# path to your application root.
|
|
5
|
+
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
|
|
6
|
+
|
|
7
|
+
Dir.chdir APP_ROOT do
|
|
8
|
+
# This script is a starting point to setup your application.
|
|
9
|
+
# Add necessary setup steps to this file:
|
|
10
|
+
|
|
11
|
+
puts "== Installing dependencies =="
|
|
12
|
+
system "gem install bundler --conservative"
|
|
13
|
+
system "bundle check || bundle install"
|
|
14
|
+
|
|
15
|
+
# puts "\n== Copying sample files =="
|
|
16
|
+
# unless File.exist?("config/database.yml")
|
|
17
|
+
# system "cp config/database.yml.sample config/database.yml"
|
|
18
|
+
# end
|
|
19
|
+
|
|
20
|
+
puts "\n== Preparing database =="
|
|
21
|
+
system "bin/rake db:setup"
|
|
22
|
+
|
|
23
|
+
puts "\n== Removing old logs and tempfiles =="
|
|
24
|
+
system "rm -f log/*"
|
|
25
|
+
system "rm -rf tmp/cache"
|
|
26
|
+
|
|
27
|
+
puts "\n== Restarting application server =="
|
|
28
|
+
system "touch tmp/restart.txt"
|
|
29
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
|
2
|
+
|
|
3
|
+
require "rails"
|
|
4
|
+
# Pick the frameworks you want:
|
|
5
|
+
require "active_model/railtie"
|
|
6
|
+
require "active_job/railtie"
|
|
7
|
+
require "active_record/railtie"
|
|
8
|
+
require "action_controller/railtie"
|
|
9
|
+
require "action_mailer/railtie"
|
|
10
|
+
require "action_view/railtie"
|
|
11
|
+
# require "sprockets/railtie"
|
|
12
|
+
require "rails/test_unit/railtie"
|
|
13
|
+
|
|
14
|
+
# Require the gems listed in Gemfile, including any gems
|
|
15
|
+
# you've limited to :test, :development, or :production.
|
|
16
|
+
Bundler.require(*Rails.groups)
|
|
17
|
+
|
|
18
|
+
module MultiDbDummy
|
|
19
|
+
class Application < Rails::Application
|
|
20
|
+
# Settings in config/environments/* take precedence over those specified here.
|
|
21
|
+
# Application configuration should go into files in config/initializers
|
|
22
|
+
# -- all .rb files in that directory are automatically loaded.
|
|
23
|
+
|
|
24
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
|
25
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
|
26
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
|
27
|
+
|
|
28
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
|
29
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
|
30
|
+
# config.i18n.default_locale = :de
|
|
31
|
+
|
|
32
|
+
# Do not swallow errors in after_commit/after_rollback callbacks.
|
|
33
|
+
config.active_record.raise_in_transactional_callbacks = true
|
|
34
|
+
end
|
|
35
|
+
end
|