sql_migrations 1.1.0 → 2.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 +4 -4
- data/README.md +57 -49
- data/lib/sql_migrations.rb +28 -4
- data/lib/sql_migrations/config.rb +38 -0
- data/lib/sql_migrations/database.rb +1 -1
- data/lib/sql_migrations/sql_script.rb +2 -2
- data/lib/sql_migrations/tasks/list.rake +1 -1
- data/lib/sql_migrations/tasks/migrate.rake +1 -1
- data/lib/sql_migrations/tasks/seed.rake +1 -1
- data/lib/sql_migrations/tasks/seed_test.rake +1 -1
- data/lib/sql_migrations/version.rb +1 -1
- data/spec/features/migration_order_spec.rb +49 -0
- data/spec/features/sql_scripts_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -1
- metadata +5 -3
- data/lib/sql_migrations/supervisor.rb +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42c3ea2365d623408c9e3f9d5ceb34b46921b900
|
4
|
+
data.tar.gz: 2531176c8a89bdeac22974ecd785610e3ca49a02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da725a80819cd777113d9b186196bfb5f658f6bf852957da9393e07dfe02ded1b34babddab5f1a78d2cc11385fcad8a30cfe990f0f3e33eba216ed3a90c80910
|
7
|
+
data.tar.gz: ee34ca3da429f23d42fd71d5e232583413b75c31a309c9681cc848a534b8ea038d8bdfdf14280e826abac7de99cae549b125509d2d9492c6ed191ce446d37921
|
data/README.md
CHANGED
@@ -22,9 +22,11 @@ For example, if you work on old Zend 1 project, and you want to take benefit fro
|
|
22
22
|
1. First - install Ruby environment, with `rbenv` or `rvm`.
|
23
23
|
2. If your project is not using ruby, create your Gemfile:
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
```ruby
|
26
|
+
source 'https://rubygems.org'
|
27
|
+
gem 'mysql2'
|
28
|
+
gem 'sql_migrations'
|
29
|
+
```
|
28
30
|
|
29
31
|
It is possible to use all database adapters that are supported by `Sequel`.
|
30
32
|
Adapters supported by `Sequel`, by now, are:
|
@@ -36,60 +38,66 @@ For example, if you work on old Zend 1 project, and you want to take benefit fro
|
|
36
38
|
|
37
39
|
If you are using PostgreSQL use
|
38
40
|
|
39
|
-
|
41
|
+
```ruby
|
42
|
+
gem 'pg'
|
43
|
+
```
|
40
44
|
|
41
45
|
3. Run `bundle install`
|
42
46
|
|
43
47
|
4. Create database config file in `db/config/databases.yml`
|
44
48
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
49
|
+
```yaml
|
50
|
+
default:
|
51
|
+
development:
|
52
|
+
adapter: mysql2
|
53
|
+
encoding: utf8
|
54
|
+
database: test_db_dev
|
55
|
+
username: test_user
|
56
|
+
password: test_pass
|
57
|
+
host: 192.168.1.1
|
58
|
+
test:
|
59
|
+
adapter: mysql2
|
60
|
+
encoding: utf8
|
61
|
+
database: test_db_test
|
62
|
+
username: test_user
|
63
|
+
password: test_pass
|
64
|
+
host: 192.168.1.1
|
65
|
+
|
66
|
+
production:
|
67
|
+
adapter: mysql2
|
68
|
+
encoding: utf8
|
69
|
+
database: test_db_prod
|
70
|
+
username: test_user
|
71
|
+
password: test_pass
|
72
|
+
host: 192.168.1.100
|
73
|
+
second_db:
|
74
|
+
development:
|
75
|
+
adapter: mysql2
|
76
|
+
encoding: utf8
|
77
|
+
database: second_db_dev
|
78
|
+
username: test_user
|
79
|
+
password: test_pass
|
80
|
+
host: 127.0.0.1
|
81
|
+
test:
|
82
|
+
adapter: mysql2
|
83
|
+
encoding: utf8
|
84
|
+
database: second_db_test
|
85
|
+
username: test_user
|
86
|
+
password: test_pass
|
87
|
+
host: 127.0.0.1
|
88
|
+
```
|
89
|
+
|
90
|
+
Note that you need to define `default` database configuration.
|
85
91
|
|
86
92
|
4. Migrations/seed/fixtures are executed using rake tasks. So you will need to create `Rakefile`:
|
87
93
|
|
88
|
-
|
89
|
-
|
94
|
+
```ruby
|
95
|
+
require 'bundler'
|
96
|
+
Bundler.require
|
90
97
|
|
91
|
-
|
92
|
-
|
98
|
+
SqlMigrations::Config.load!('db/config/databases.yml')
|
99
|
+
SqlMigrations.load_tasks
|
100
|
+
```
|
93
101
|
|
94
102
|
5. It's ready !
|
95
103
|
|
@@ -176,7 +184,7 @@ For example, if you work on old Zend 1 project, and you want to take benefit fro
|
|
176
184
|
|
177
185
|
## TODO
|
178
186
|
|
179
|
-
1.
|
187
|
+
1. More tests
|
180
188
|
2. Generator for `databases.yml`
|
181
189
|
3. Generator for migrations
|
182
190
|
|
data/lib/sql_migrations.rb
CHANGED
@@ -6,7 +6,7 @@ require 'time'
|
|
6
6
|
|
7
7
|
require 'sql_migrations/version'
|
8
8
|
require 'sql_migrations/database'
|
9
|
-
require 'sql_migrations/
|
9
|
+
require 'sql_migrations/config'
|
10
10
|
require 'sql_migrations/sql_script'
|
11
11
|
require 'sql_migrations/migration'
|
12
12
|
require 'sql_migrations/seed'
|
@@ -14,7 +14,6 @@ require 'sql_migrations/fixture'
|
|
14
14
|
|
15
15
|
module SqlMigrations
|
16
16
|
class << self
|
17
|
-
attr_reader :options
|
18
17
|
|
19
18
|
def load_tasks
|
20
19
|
load "sql_migrations/tasks/migrate.rake"
|
@@ -23,8 +22,33 @@ module SqlMigrations
|
|
23
22
|
load "sql_migrations/tasks/list.rake"
|
24
23
|
end
|
25
24
|
|
26
|
-
def
|
27
|
-
|
25
|
+
def migrate
|
26
|
+
databases { |db| db.execute_migrations }
|
27
|
+
end
|
28
|
+
|
29
|
+
def seed
|
30
|
+
databases { |db| db.seed_database }
|
31
|
+
end
|
32
|
+
|
33
|
+
def seed_test
|
34
|
+
databases { |db| db.seed_with_fixtures }
|
35
|
+
end
|
36
|
+
|
37
|
+
def list_files
|
38
|
+
Config.new.databases.each do |db_config|
|
39
|
+
name = db_config[:name]
|
40
|
+
Migration.find(name).each { |migration| puts migration }
|
41
|
+
Seed.find(name).each { |seed| puts seed }
|
42
|
+
Fixture.find(name).each { |fixture| puts fixture }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
def databases
|
48
|
+
Config.new.databases.each do |db_config|
|
49
|
+
db = Database.new(db_config)
|
50
|
+
yield db
|
51
|
+
end
|
28
52
|
end
|
29
53
|
end
|
30
54
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module SqlMigrations
|
2
|
+
class Config
|
3
|
+
|
4
|
+
class << self
|
5
|
+
attr_reader :options
|
6
|
+
|
7
|
+
def load!(config_file)
|
8
|
+
@options = YAML::load_file(config_file)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@env = (ENV['ENV'] ||= "development").to_sym
|
14
|
+
@options = self.class.options
|
15
|
+
@databases = get_databases_from_config
|
16
|
+
end
|
17
|
+
|
18
|
+
def databases
|
19
|
+
@databases.map do |db|
|
20
|
+
db_options = @options[db.to_s][@env.to_s]
|
21
|
+
unless db_options
|
22
|
+
raise "Configuration for #{db} in environment #{@env} not found !"
|
23
|
+
end
|
24
|
+
db_options.merge!(name: db)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def get_databases_from_config
|
30
|
+
databases = @options.map { |k, v| k.to_sym }
|
31
|
+
unless databases.include?(:default)
|
32
|
+
raise "Default database configuration not found !"
|
33
|
+
end
|
34
|
+
databases
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -16,7 +16,7 @@ module SqlMigrations
|
|
16
16
|
|
17
17
|
def execute(db)
|
18
18
|
@database = db
|
19
|
-
return unless is_new?
|
19
|
+
return false unless is_new?
|
20
20
|
begin
|
21
21
|
@database.db.transaction do
|
22
22
|
@benchmark = Benchmark.measure do
|
@@ -27,7 +27,7 @@ module SqlMigrations
|
|
27
27
|
puts "[-] Error while executing #{@type} #{@name} !"
|
28
28
|
raise
|
29
29
|
else
|
30
|
-
on_success
|
30
|
+
true & on_success
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -0,0 +1,49 @@
|
|
1
|
+
describe 'migrations valid order support engine' do
|
2
|
+
before do
|
3
|
+
$stdout = StringIO.new
|
4
|
+
Dir.mkdir('/migrations')
|
5
|
+
File.open('/migrations/20150305_154010_test_migration.sql', 'w') do |f|
|
6
|
+
f.puts "CREATE TABLE test_table(col_int INTEGER, col_str STRING)"
|
7
|
+
end
|
8
|
+
|
9
|
+
@database = SqlMigrations::Database.new(name: :default, 'adapter' => :sqlite)
|
10
|
+
migration = SqlMigrations::Migration.find([ :default ]).first
|
11
|
+
migration.execute(@database)
|
12
|
+
|
13
|
+
File.open('/migrations/20150305_154011_test2_migration.sql', 'w') do |f|
|
14
|
+
f.puts "CREATE TABLE test_table2(col_int2 INTEGER, col_str2 STRING)"
|
15
|
+
end
|
16
|
+
File.open('/migrations/20150305_154012_test3_migration.sql', 'w') do |f|
|
17
|
+
f.puts "CREATE TABLE test_table3(col_int3 INTEGER, col_str3 STRING)"
|
18
|
+
end
|
19
|
+
@migrations = SqlMigrations::Migration.find([ :default ])
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
it 'should find all migrations' do
|
24
|
+
expect(@migrations.count).to be 3
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should execute only two migrations' do
|
28
|
+
statuses = @migrations.map do |migration|
|
29
|
+
migration.execute(@database)
|
30
|
+
end
|
31
|
+
expect(statuses[0]).to be false
|
32
|
+
expect(statuses[1]).to be true
|
33
|
+
expect(statuses[2]).to be true
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should create all tables' do
|
37
|
+
database = SqlMigrations::Database.new(name: :default, 'adapter' => :sqlite)
|
38
|
+
@migrations.each { |migration| migration.execute(@database) }
|
39
|
+
expect(@sqlite_db.table_exists?(:test_table)).to be true
|
40
|
+
expect(@sqlite_db[:test_table].columns).to include(:col_int)
|
41
|
+
expect(@sqlite_db[:test_table].columns).to include(:col_str)
|
42
|
+
expect(@sqlite_db.table_exists?(:test_table2)).to be true
|
43
|
+
expect(@sqlite_db[:test_table2].columns).to include(:col_int2)
|
44
|
+
expect(@sqlite_db[:test_table2].columns).to include(:col_str2)
|
45
|
+
expect(@sqlite_db.table_exists?(:test_table3)).to be true
|
46
|
+
expect(@sqlite_db[:test_table3].columns).to include(:col_int3)
|
47
|
+
expect(@sqlite_db[:test_table3].columns).to include(:col_str3)
|
48
|
+
end
|
49
|
+
end
|
@@ -15,13 +15,13 @@ describe 'sql scripts' do
|
|
15
15
|
f.puts "INSERT INTO second_test_table(col_int2, col_str2) VALUES(456, 'test_string2')"
|
16
16
|
end
|
17
17
|
File.open('/fixtures/20150305_154010_test_test_seed', 'w') do |f|
|
18
|
-
f.puts "INSERT INTO
|
19
|
-
f.puts "INSERT INTO
|
18
|
+
f.puts "INSERT INTO first_test2_table(col_int1, col_str1) VALUES(2123, '2test_string1')"
|
19
|
+
f.puts "INSERT INTO second_test2_table(col_int2, col_str2) VALUES(2456, '2test_string2')"
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should be found' do
|
24
|
-
expect { SqlMigrations
|
24
|
+
expect { SqlMigrations.list_files }.to \
|
25
25
|
output("Migration first_test_migration for db: default, datetime: 20150305154010\n" +
|
26
26
|
"Migration second_test_migration for db: default, datetime: 20150305154011\n" +
|
27
27
|
"Seed data test_seed, datetime: 20150305154010\n").to_stdout
|
data/spec/spec_helper.rb
CHANGED
@@ -6,7 +6,7 @@ RSpec.configure do |config|
|
|
6
6
|
config.before do
|
7
7
|
@sqlite_db = Sequel.sqlite
|
8
8
|
allow(SqlMigrations::Database).to receive(:connect) { @sqlite_db }
|
9
|
-
allow(SqlMigrations).to receive(:options) { { default
|
9
|
+
allow(SqlMigrations::Config).to receive(:options) { { "default" => { "development" => {}}} }
|
10
10
|
MemFs.activate!
|
11
11
|
end
|
12
12
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sql_migrations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grzegorz Bizon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -109,17 +109,18 @@ files:
|
|
109
109
|
- README.md
|
110
110
|
- Rakefile
|
111
111
|
- lib/sql_migrations.rb
|
112
|
+
- lib/sql_migrations/config.rb
|
112
113
|
- lib/sql_migrations/database.rb
|
113
114
|
- lib/sql_migrations/fixture.rb
|
114
115
|
- lib/sql_migrations/migration.rb
|
115
116
|
- lib/sql_migrations/seed.rb
|
116
117
|
- lib/sql_migrations/sql_script.rb
|
117
|
-
- lib/sql_migrations/supervisor.rb
|
118
118
|
- lib/sql_migrations/tasks/list.rake
|
119
119
|
- lib/sql_migrations/tasks/migrate.rake
|
120
120
|
- lib/sql_migrations/tasks/seed.rake
|
121
121
|
- lib/sql_migrations/tasks/seed_test.rake
|
122
122
|
- lib/sql_migrations/version.rb
|
123
|
+
- spec/features/migration_order_spec.rb
|
123
124
|
- spec/features/migration_spec.rb
|
124
125
|
- spec/features/schema_table_spec.rb
|
125
126
|
- spec/features/sql_scripts_spec.rb
|
@@ -150,6 +151,7 @@ signing_key:
|
|
150
151
|
specification_version: 4
|
151
152
|
summary: Simple standalone migrations you can use with plain SQL
|
152
153
|
test_files:
|
154
|
+
- spec/features/migration_order_spec.rb
|
153
155
|
- spec/features/migration_spec.rb
|
154
156
|
- spec/features/schema_table_spec.rb
|
155
157
|
- spec/features/sql_scripts_spec.rb
|
@@ -1,50 +0,0 @@
|
|
1
|
-
module SqlMigrations
|
2
|
-
class Supervisor
|
3
|
-
|
4
|
-
def initialize
|
5
|
-
@env = (ENV['ENV'] ||= "development").to_sym
|
6
|
-
@options = SqlMigrations.options
|
7
|
-
@databases = get_databases_from_config
|
8
|
-
end
|
9
|
-
|
10
|
-
def migrate
|
11
|
-
databases_run { |db| db.execute_migrations }
|
12
|
-
end
|
13
|
-
|
14
|
-
def seed
|
15
|
-
databases_run { |db| db.seed_database }
|
16
|
-
end
|
17
|
-
|
18
|
-
def seed_test
|
19
|
-
databases_run { |db| db.seed_with_fixtures }
|
20
|
-
end
|
21
|
-
|
22
|
-
def list_files
|
23
|
-
Migration.find(@databases).each { |migration| puts migration }
|
24
|
-
Seed.find(@databases).each { |seed| puts seed }
|
25
|
-
Fixture.find(@databases).each { |fixture| puts fixture }
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
def get_databases_from_config
|
30
|
-
databases = @options.map { |k, v| k.to_sym }
|
31
|
-
unless databases.include?(:default)
|
32
|
-
raise "Default database configuration not found !"
|
33
|
-
end
|
34
|
-
databases
|
35
|
-
end
|
36
|
-
|
37
|
-
def databases_run
|
38
|
-
@databases.each do |db|
|
39
|
-
db_options = @options[db.to_s][@env.to_s]
|
40
|
-
db_options.merge!(name: db)
|
41
|
-
if db_options
|
42
|
-
yield Database.new(db_options)
|
43
|
-
else
|
44
|
-
raise "Configuration for #{db} in environment #{@env} not found !"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
end
|