multi-database-9000 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/features/development_migrations.feature +4 -5
- data/features/schema_tasks.feature +110 -0
- data/features/step_definitions/development_migrations_steps.rb +22 -17
- data/features/step_definitions/schema_steps.rb +11 -0
- data/features/step_definitions/sqlite_database_steps.rb +2 -2
- data/lib/multi-database-9000/tasks/multi-database-9000_tasks.rake +8 -0
- data/lib/multi-database-9000/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33e7b9669dcf781d0f6b56a0d2f51726024e66fd
|
4
|
+
data.tar.gz: d7c68fc744690834858eb9c9147fc8d9fcfdcd19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b71aba44cf23dcc5eb977df8ed37e3b39707e1b588194c22a80c51107a0544f0429dcf80743ca69d58dc5ef919896ed5571b8220102deeb0bfa9dca3dcc0a8cb
|
7
|
+
data.tar.gz: f94f1891d8add9af32e25aab7857ea8df2b7ff0fc7631cc5d6802cee6ee6280d0f88ac3ad4aec0a25c0118e0781afb4cdecb7c4397edd52f990224965bd483ac
|
@@ -57,16 +57,15 @@ Feature: Migrations run for all databases in the app
|
|
57
57
|
And the file "../../multi-db-dummy/db/schema.rb" should not exist
|
58
58
|
And the version in the users schema file should be updated
|
59
59
|
|
60
|
-
Scenario: Specifying the database and the environment
|
60
|
+
Scenario: Specifying the database and the Rails environment to migrate to
|
61
61
|
Given I set the environment variables to:
|
62
62
|
| variable | value |
|
63
63
|
| RAILS_ENV | production |
|
64
64
|
And there is a migration for the widgets database in a multi database app
|
65
65
|
When I run `bundle exec rake db:migrate DATABASE=widgets` in a multi database app
|
66
|
-
Then the
|
67
|
-
And the
|
68
|
-
|
69
|
-
|
66
|
+
Then I should see the created 'gadgets' table in the 'widgets' 'production' database
|
67
|
+
And I should see the "doobry", "wotsit" and "thingy" columns in the "gadgets" table in the "widgets" "production" database
|
68
|
+
|
70
69
|
Scenario: User runs rake db:migrate:status in a single database app
|
71
70
|
Given I have created and run a migration with the name "20151010142141_create_users_table.rb", in a single database app
|
72
71
|
And I have created but not run a migration with the name "20151010151000_add_nickname_to_users.rb", in a single database app
|
@@ -0,0 +1,110 @@
|
|
1
|
+
Feature: rake schema tasks should work for all databases in the app
|
2
|
+
|
3
|
+
rake db:schema:load will load all the database schemas for the current environment
|
4
|
+
rake db:schema:load DATABASE=widgets will load the schema for the widgets database
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given empty databases have been created for the app
|
8
|
+
|
9
|
+
Scenario: User loads the schema in a single database app
|
10
|
+
Given a single database app and a schema file with:
|
11
|
+
"""
|
12
|
+
ActiveRecord::Schema.define(version: 20151010145432) do
|
13
|
+
|
14
|
+
create_table "users", force: :cascade do |t|
|
15
|
+
t.string "name"
|
16
|
+
t.integer "age"
|
17
|
+
t.string "email"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
"""
|
22
|
+
When I run `bundle exec rake db:schema:load` in a single database app
|
23
|
+
Then I should see the created users table
|
24
|
+
And I should see the correct columns in the users table
|
25
|
+
|
26
|
+
Scenario: User loads the schema in a multi database app
|
27
|
+
Given a multi database app and a schema file with:
|
28
|
+
"""
|
29
|
+
ActiveRecord::Schema.define(version: 20151010142141) do
|
30
|
+
|
31
|
+
create_table "posts", force: :cascade do |t|
|
32
|
+
t.string "title"
|
33
|
+
t.integer "text"
|
34
|
+
t.string "author"
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
"""
|
39
|
+
And a users_schema file with:
|
40
|
+
"""
|
41
|
+
ActiveRecord::Schema.define(version: 20151010141234) do
|
42
|
+
|
43
|
+
create_table "accounts", force: :cascade do |t|
|
44
|
+
t.string "expense"
|
45
|
+
t.integer "user_id"
|
46
|
+
t.string "total"
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
"""
|
51
|
+
And a widgets_schema file with:
|
52
|
+
"""
|
53
|
+
ActiveRecord::Schema.define(version: 20151010141234) do
|
54
|
+
|
55
|
+
create_table "accounts", force: :cascade do |t|
|
56
|
+
t.string "doobry"
|
57
|
+
t.integer "wotsit"
|
58
|
+
t.string "thingy"
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
"""
|
63
|
+
When I run `bundle exec rake db:schema:load` in the multi database app
|
64
|
+
Then I should see the created 'posts' table in the 'default' database
|
65
|
+
And I should see the created 'accounts' table in the 'users' database
|
66
|
+
And I should see the "title", "text" and "author" columns in the "posts" table in the "default" database
|
67
|
+
And I should see the "expense", "user_id" and "total" columns in the "accounts" table in the "users" database
|
68
|
+
|
69
|
+
Scenario: loading the schema in the production environment
|
70
|
+
Given a multi database app and a schema file with:
|
71
|
+
"""
|
72
|
+
ActiveRecord::Schema.define(version: 20151010142141) do
|
73
|
+
|
74
|
+
create_table "posts", force: :cascade do |t|
|
75
|
+
t.string "title"
|
76
|
+
t.integer "text"
|
77
|
+
t.string "author"
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
"""
|
82
|
+
And a users_schema file with:
|
83
|
+
"""
|
84
|
+
ActiveRecord::Schema.define(version: 20151010141234) do
|
85
|
+
|
86
|
+
create_table "accounts", force: :cascade do |t|
|
87
|
+
t.string "expense"
|
88
|
+
t.integer "user_id"
|
89
|
+
t.string "total"
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
"""
|
94
|
+
And a widgets_schema file with:
|
95
|
+
"""
|
96
|
+
ActiveRecord::Schema.define(version: 20151010141234) do
|
97
|
+
|
98
|
+
create_table "accounts", force: :cascade do |t|
|
99
|
+
t.string "doobry"
|
100
|
+
t.integer "wotsit"
|
101
|
+
t.string "thingy"
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
"""
|
106
|
+
When I run `bundle exec rake db:schema:load RAILS_ENV=production` in the multi database app
|
107
|
+
Then I should see the created 'posts' table in the 'default' 'production' database
|
108
|
+
And I should see the created 'accounts' table in the 'users' 'production' database
|
109
|
+
And I should see the "title", "text" and "author" columns in the "posts" table in the "default" "production" database
|
110
|
+
And I should see the "expense", "user_id" and "total" columns in the "accounts" table in the "users" "production" database
|
@@ -57,22 +57,16 @@ Then(/^I should see the created posts table in the default database$/) do
|
|
57
57
|
table_exists? :database => "development.sqlite3", :table => "posts"
|
58
58
|
end
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
table_exists? :app => "multi-db-dummy", :database => "#{database_file_name}.sqlite3", :table => table
|
60
|
+
# the (?:'([^']*)' )? capture group specifies an optional group
|
61
|
+
# e.g. "I should see the created users table in the default database" will match
|
62
|
+
# e.g. "I should see the created users table in the default production database" will also match
|
63
|
+
# (and "production" will be captured in the third parameter)
|
64
|
+
Then(/^I should see the created '([^']*)' table in the '([^']*)' (?:'([^']*)' )?database$/) do |table, database, environment|
|
65
|
+
table_exists? :app => "multi-db-dummy", :database => "#{database_file_name database, environment}.sqlite3", :table => table
|
67
66
|
end
|
68
67
|
|
69
|
-
Then(/^I should see the "([^"]*)", "([^"]*)" and "([^"]*)" columns in the "([^"]*)" table in the "([^"]*)" database$/) do |column1, column2, column3, table, database|
|
70
|
-
|
71
|
-
database_file_name = "development"
|
72
|
-
else
|
73
|
-
database_file_name = "#{database}_development"
|
74
|
-
end
|
75
|
-
columns_exist? :app => "multi-db-dummy", :database => "#{database_file_name}.sqlite3", :table => table, :columns => [column1, column2, column3]
|
68
|
+
Then(/^I should see the "([^"]*)", "([^"]*)" and "([^"]*)" columns in the "([^"]*)" table in the "([^"]*)" (?:"([^"]*)" )?database$/) do |column1, column2, column3, table, database, environment|
|
69
|
+
columns_exist? :app => "multi-db-dummy", :database => "#{database_file_name database, environment}.sqlite3", :table => table, :columns => [column1, column2, column3]
|
76
70
|
end
|
77
71
|
|
78
72
|
When(/^I run a migration with the timestamp "([^"]*)" in a single database app$/) do |timestamp|
|
@@ -144,6 +138,15 @@ end
|
|
144
138
|
|
145
139
|
# Helpers
|
146
140
|
|
141
|
+
def database_file_name(database, environment)
|
142
|
+
env = environment || "development"
|
143
|
+
if database == "default"
|
144
|
+
return env
|
145
|
+
else
|
146
|
+
return "#{database}_#{env}"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
147
150
|
def write_multi_db_migration_for(database, migration_name)
|
148
151
|
migration_database = database == "default" ? "migrate" : "#{database}_migrate"
|
149
152
|
migration_class = migration_name.match(/\d+_(\w+).rb/).captures.first.split('_').map(&:capitalize).join
|
@@ -160,10 +163,12 @@ def write_multi_db_migration_for(database, migration_name)
|
|
160
163
|
end
|
161
164
|
|
162
165
|
def run_rake_db_create
|
163
|
-
|
164
|
-
|
166
|
+
["rake db:create", "rake db:create RAILS_ENV=production"].each do |command|
|
167
|
+
cmd = unescape_text(command)
|
168
|
+
cmd = extract_text(cmd) if !aruba.config.keep_ansi || aruba.config.remove_ansi_escape_sequences
|
165
169
|
|
166
|
-
|
170
|
+
run_simple(cmd, false)
|
171
|
+
end
|
167
172
|
end
|
168
173
|
|
169
174
|
def write_single_db_migration
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Given(/^a single database app and a schema file with:$/) do |schema_content|
|
2
|
+
write_file "../../single-db-dummy/db/schema.rb", schema_content
|
3
|
+
end
|
4
|
+
|
5
|
+
Given(/^a multi database app and a schema file with:$/) do |schema_content|
|
6
|
+
write_file "../../multi-db-dummy/db/schema.rb", schema_content
|
7
|
+
end
|
8
|
+
|
9
|
+
Given(/^a (\w+) file with:$/) do |schema_name, schema_content|
|
10
|
+
write_file "../../multi-db-dummy/db/#{schema_name}.rb", schema_content
|
11
|
+
end
|
@@ -3,12 +3,12 @@ Given(/^no databases have been created$/) do
|
|
3
3
|
clear_db_dir
|
4
4
|
end
|
5
5
|
|
6
|
-
Given(/^I run `([^`]*)` in a single database app$/) do |command|
|
6
|
+
Given(/^I run `([^`]*)` in (?:a|the) single database app$/) do |command|
|
7
7
|
run_task_in_single_db_app(command)
|
8
8
|
end
|
9
9
|
|
10
10
|
|
11
|
-
Given(/^I run `([^`]*)` in a multi database app$/) do |command|
|
11
|
+
Given(/^I run `([^`]*)` in (?:a|the) multi database app$/) do |command|
|
12
12
|
run_task_in_multi_db_app(command)
|
13
13
|
end
|
14
14
|
|
@@ -40,6 +40,7 @@ end
|
|
40
40
|
Rake::Task['db:create'].clear
|
41
41
|
Rake::Task['db:migrate'].clear
|
42
42
|
Rake::Task['db:schema:dump'].clear
|
43
|
+
Rake::Task['db:schema:load'].clear
|
43
44
|
Rake::Task['db:migrate:status'].clear
|
44
45
|
|
45
46
|
Rake::Task["db:test:load_schema"].enhance do
|
@@ -138,5 +139,12 @@ db_namespace = namespace :db do
|
|
138
139
|
end
|
139
140
|
db_namespace['schema:dump'].reenable
|
140
141
|
end
|
142
|
+
|
143
|
+
desc 'Load a schema.rb file into the database'
|
144
|
+
task :load => [:environment, :load_config] do
|
145
|
+
database_connections(:database => ENV["DATABASE"], :rails_envs => ENV["RAILS_ENV"] || "development").each do |connection_key, connection|
|
146
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema_for connection, :ruby, "db/#{schema_file_name(connection_key)}"
|
147
|
+
end
|
148
|
+
end
|
141
149
|
end
|
142
150
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multi-database-9000
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Weston
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-11-
|
13
|
+
date: 2015-11-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -140,9 +140,11 @@ files:
|
|
140
140
|
- features/development_migrations.feature
|
141
141
|
- features/production_migrations.feature
|
142
142
|
- features/running_generators.feature
|
143
|
+
- features/schema_tasks.feature
|
143
144
|
- features/step_definitions/development_migrations_steps.rb
|
144
145
|
- features/step_definitions/production_migration_steps.rb
|
145
146
|
- features/step_definitions/running_generators_steps.rb
|
147
|
+
- features/step_definitions/schema_steps.rb
|
146
148
|
- features/step_definitions/sqlite_database_steps.rb
|
147
149
|
- features/step_definitions/test_migration_steps.rb
|
148
150
|
- features/support/env.rb
|
@@ -291,9 +293,11 @@ test_files:
|
|
291
293
|
- features/development_migrations.feature
|
292
294
|
- features/production_migrations.feature
|
293
295
|
- features/running_generators.feature
|
296
|
+
- features/schema_tasks.feature
|
294
297
|
- features/step_definitions/development_migrations_steps.rb
|
295
298
|
- features/step_definitions/production_migration_steps.rb
|
296
299
|
- features/step_definitions/running_generators_steps.rb
|
300
|
+
- features/step_definitions/schema_steps.rb
|
297
301
|
- features/step_definitions/sqlite_database_steps.rb
|
298
302
|
- features/step_definitions/test_migration_steps.rb
|
299
303
|
- features/support/env.rb
|