ridgepole 0.6.4.beta3 → 0.6.4.beta4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f85451f0471e23a2e57b9c3ef3ea2c583d9aa0ed
4
- data.tar.gz: 386a09bc2f304e3ae2d8f6732e58357d5c1dc192
3
+ metadata.gz: 7a2d99018e06553a49ed3899adbb1d47e0ffe5e3
4
+ data.tar.gz: 2e5bf50e046a173df0b970e53ffd5d547fe50df3
5
5
  SHA512:
6
- metadata.gz: 6dd3c94d9e6bcd6ffa6e8bda9b60fa6241ac4c08660123a2c1f14d2fb04c39690f7dd8665fc1b9ca5565fb342e15d0df7d8126e8650b563c23ac133ac753e7b9
7
- data.tar.gz: fa8c06f2e4b859325d3d45676ee20ef7588a9c4c02d9d08fd39a018e36a0458ea39ff5e54d791b0fe206e44c4aa09bb6a6695d2fc93ea6ec6ad9f410b80e7f1c
6
+ metadata.gz: ead176794c52b4e4e2ceeb9cc4a48b771282f06e1bc58a619bbcdcdcff9df68b78c9357977a8154084bf0cd20a9e3bc1c168e9fffaed9fbee9b9aafdcec0cd9f
7
+ data.tar.gz: 315d8fb9a6c8a7bacc54a435491c96ec5d1c156c9918c70c343bc3551ae9d99263aed26aa842d9555d42e4952d0b895004b389df087f80dd98cd50f2174aea18
data/.travis.yml CHANGED
@@ -1,8 +1,13 @@
1
+ sudo: false
1
2
  language: ruby
3
+ cache: bundler
2
4
  rvm:
3
5
  - 2.0.0
4
- - 2.1.5
5
- - 2.2.1
6
+ - 2.1.8
7
+ - 2.2.4
8
+ - 2.3.0
9
+ before_install:
10
+ - gem update bundler
6
11
  script:
7
12
  - bundle install
8
13
  - bundle exec rake
@@ -13,15 +18,5 @@ env:
13
18
  - ENABLE_MYSQL_AWESOME=0 ENABLE_MIGRATION_COMMENTS=1
14
19
  - ENABLE_MYSQL_AWESOME=1 ENABLE_MIGRATION_COMMENTS=1
15
20
  - POSTGRESQL=1
16
- before_install:
17
- - sudo /etc/init.d/postgresql stop
18
- - sudo apt-get update
19
- - sudo apt-get purge postgresql-9.1 postgresql-9.2 postgresql-9.3
20
- - sudo apt-get install language-pack-es postgresql-9.4
21
- - sudo chmod 777 /etc/postgresql/9.4/main/pg_hba.conf
22
- - sudo echo "local all postgres trust" > /etc/postgresql/9.4/main/pg_hba.conf
23
- - sudo echo "local all all trust" >> /etc/postgresql/9.4/main/pg_hba.conf
24
- - sudo echo "host all all 127.0.0.1/32 trust" >> /etc/postgresql/9.4/main/pg_hba.conf
25
- - sudo echo "host all all ::1/128 trust" >> /etc/postgresql/9.4/main/pg_hba.conf
26
- - sudo /etc/init.d/postgresql restart
27
- - psql --version
21
+ addons:
22
+ postgresql: "9.4"
data/README.md CHANGED
@@ -46,6 +46,7 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
46
46
  * Execute sql using external script ([pull#56](https://github.com/winebarrel/ridgepole/pull/56))
47
47
  * Add `--mysql-use-alter` option
48
48
  * Add `--alter-extra` option
49
+ * Add `--dump-with-default-fk-name` option
49
50
 
50
51
  ## Installation
51
52
 
@@ -68,7 +69,7 @@ Usage: ridgepole [options]
68
69
  -E, --env ENVIRONMENT
69
70
  -a, --apply
70
71
  -m, --merge
71
- -f, --file FILE
72
+ -f, --file SCHEMAFILE
72
73
  --dry-run
73
74
  --table-options OPTIONS
74
75
  --alter-extra ALTER_SPEC
@@ -88,12 +89,13 @@ Usage: ridgepole [options]
88
89
  -d, --diff DSL1 DSL2
89
90
  --reverse
90
91
  --with-apply
91
- -o, --output FILE
92
+ -o, --output SCHEMAFILE
92
93
  -t, --tables TABLES
93
94
  --ignore-tables TABLES
94
95
  --enable-mysql-awesome
95
96
  --mysql-use-alter
96
97
  --dump-without-table-options
98
+ --dump-with-default-fk-name
97
99
  --index-removed-drop-column
98
100
  --enable-migration-comments
99
101
  -r, --require LIBS
data/bin/ridgepole CHANGED
@@ -71,7 +71,7 @@ ARGV.options do |opt|
71
71
  opt.on('-E', '--env ENVIRONMENT') {|v| env = v }
72
72
  opt.on('-a', '--apply') { set_mode[:apply] }
73
73
  opt.on('-m', '--merge') { set_mode[:apply]; options[:merge] = true }
74
- opt.on('-f', '--file FILE') {|v| file = v }
74
+ opt.on('-f', '--file SCHEMAFILE') {|v| file = v }
75
75
  opt.on('', '--dry-run') { options[:dry_run] = true }
76
76
  opt.on('', '--table-options OPTIONS') {|v| options[:table_options] = v }
77
77
  opt.on('', '--alter-extra ALTER_SPEC') {|v| options[:alter_extra] = v }
@@ -106,12 +106,13 @@ ARGV.options do |opt|
106
106
  }
107
107
  opt.on('', '--reverse') { options[:reverse] = true }
108
108
  opt.on('', '--with-apply') { diff_with_apply = true }
109
- opt.on('-o', '--output FILE') {|v| output_file = v }
109
+ opt.on('-o', '--output SCHEMAFILE') {|v| output_file = v }
110
110
  opt.on('-t', '--tables TABLES', Array) {|v| options[:tables] = v }
111
111
  opt.on('', '--ignore-tables TABLES', Array) {|v| options[:ignore_tables] = v.map {|i| Regexp.new(i) } }
112
112
  opt.on('', '--enable-mysql-awesome') { options[:enable_mysql_awesome] = true }
113
113
  opt.on('', '--mysql-use-alter') { options[:mysql_use_alter] = true }
114
114
  opt.on('', '--dump-without-table-options') { options[:dump_without_table_options] = true }
115
+ opt.on('', '--dump-with-default-fk-name') { options[:dumb_with_default_fk_name] = true }
115
116
  opt.on('', '--index-removed-drop-column') { options[:index_removed_drop_column] = true }
116
117
  opt.on('', '--enable-migration-comments') { options[:enable_migration_comments] = true }
117
118
  opt.on('-r', '--require LIBS', Array) {|v| v.each {|i| require i } }
@@ -29,6 +29,10 @@ class Ridgepole::Client
29
29
  if @options[:mysql_use_alter]
30
30
  require 'ridgepole/ext/abstract_mysql_adapter'
31
31
  end
32
+
33
+ if @options[:dumb_with_default_fk_name]
34
+ require 'ridgepole/ext/schema_dumper'
35
+ end
32
36
  end
33
37
 
34
38
  def dump(&block)
@@ -88,7 +88,7 @@ class Ridgepole::Diff
88
88
 
89
89
  def scan_options_change(table_name, from, to, table_delta)
90
90
  unless from == to
91
- Ridgepole::Logger.instance.warn("[WARNING] Table `#{table_name}` options cannot be changed")
91
+ Ridgepole::Logger.instance.warn("[WARNING] No difference of schema configuration for table `#{table_name}`. (if you changed some options, please reconfirm your Schemafile)")
92
92
  end
93
93
  end
94
94
 
@@ -0,0 +1,32 @@
1
+ require 'active_record/schema_dumper'
2
+
3
+ class ActiveRecord::SchemaDumper
4
+ def foreign_keys_with_default_name(table, stream)
5
+ if (foreign_keys = @connection.foreign_keys(table)).any?
6
+ add_foreign_key_statements = foreign_keys.map do |foreign_key|
7
+ parts = [
8
+ "add_foreign_key #{remove_prefix_and_suffix(foreign_key.from_table).inspect}",
9
+ remove_prefix_and_suffix(foreign_key.to_table).inspect,
10
+ ]
11
+
12
+ if foreign_key.column != @connection.foreign_key_column_for(foreign_key.to_table)
13
+ parts << "column: #{foreign_key.column.inspect}"
14
+ end
15
+
16
+ if foreign_key.custom_primary_key?
17
+ parts << "primary_key: #{foreign_key.primary_key.inspect}"
18
+ end
19
+
20
+ parts << "name: #{foreign_key.name.inspect}"
21
+
22
+ parts << "on_update: #{foreign_key.on_update.inspect}" if foreign_key.on_update
23
+ parts << "on_delete: #{foreign_key.on_delete.inspect}" if foreign_key.on_delete
24
+
25
+ " #{parts.join(', ')}"
26
+ end
27
+
28
+ stream.puts add_foreign_key_statements.sort.join("\n")
29
+ end
30
+ end
31
+ alias_method_chain :foreign_keys, :default_name
32
+ end
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.6.4.beta3'
2
+ VERSION = '0.6.4.beta4'
3
3
  end
@@ -14,7 +14,7 @@ describe 'ridgepole' do
14
14
  -E, --env ENVIRONMENT
15
15
  -a, --apply
16
16
  -m, --merge
17
- -f, --file FILE
17
+ -f, --file SCHEMAFILE
18
18
  --dry-run
19
19
  --table-options OPTIONS
20
20
  --alter-extra ALTER_SPEC
@@ -34,12 +34,13 @@ describe 'ridgepole' do
34
34
  -d, --diff DSL1 DSL2
35
35
  --reverse
36
36
  --with-apply
37
- -o, --output FILE
37
+ -o, --output SCHEMAFILE
38
38
  -t, --tables TABLES
39
39
  --ignore-tables TABLES
40
40
  --enable-mysql-awesome
41
41
  --mysql-use-alter
42
42
  --dump-without-table-options
43
+ --dump-with-default-fk-name
43
44
  --index-removed-drop-column
44
45
  --enable-migration-comments
45
46
  -r, --require LIBS
@@ -48,7 +48,7 @@ add_foreign_key "child", "parent", name: "child_ibfk_1"
48
48
 
49
49
  before { subject.diff(actual_dsl).migrate }
50
50
 
51
- subject { client(enable_foreigner: true) }
51
+ subject { client }
52
52
 
53
53
  it {
54
54
  delta = subject.diff(expected_dsl)
@@ -23,7 +23,7 @@ describe 'Ridgepole::Client#diff -> migrate' do
23
23
  t.date "to_date", null: false
24
24
  end
25
25
 
26
- add_index "salaries", ["emp_no", "id"], unique: false, name: "emp_no", unique: false, using: :btree
26
+ add_index "salaries", ["emp_no", "id"], name: "emp_no", unique: false, using: :btree
27
27
  RUBY
28
28
  }
29
29
 
@@ -30,7 +30,7 @@ describe 'Ridgepole::Client#diff -> migrate' do
30
30
  subject { client }
31
31
 
32
32
  it {
33
- expect(Ridgepole::Logger.instance).to receive(:warn).with('[WARNING] Table `employees` options cannot be changed')
33
+ expect(Ridgepole::Logger.instance).to receive(:warn).with("[WARNING] No difference of schema configuration for table `employees`. (if you changed some options, please reconfirm your Schemafile)")
34
34
  delta = subject.diff(expected_dsl)
35
35
  expect(delta.differ?).to be_falsey
36
36
  expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
@@ -39,7 +39,7 @@ describe 'Ridgepole::Client#diff -> migrate' do
39
39
  }
40
40
 
41
41
  it {
42
- expect(Ridgepole::Logger.instance).to receive(:warn).with('[WARNING] Table `employees` options cannot be changed')
42
+ expect(Ridgepole::Logger.instance).to receive(:warn).with("[WARNING] No difference of schema configuration for table `employees`. (if you changed some options, please reconfirm your Schemafile)")
43
43
  delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
44
44
  expect(delta.differ?).to be_falsey
45
45
  }
@@ -0,0 +1,62 @@
1
+ unless postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when change fk' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "parent", force: :cascade do |t|
7
+ end
8
+
9
+ create_table "child", force: :cascade do |t|
10
+ t.integer "parent_id"
11
+ end
12
+
13
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
14
+
15
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc", on_delete: :cascade
16
+ RUBY
17
+ }
18
+
19
+ let(:sorted_actual_dsl) {
20
+ <<-RUBY
21
+ create_table "child", force: :cascade do |t|
22
+ t.integer "parent_id", limit: 4
23
+ end
24
+
25
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
26
+
27
+ create_table "parent", force: :cascade do |t|
28
+ end
29
+
30
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc", on_delete: :cascade
31
+ RUBY
32
+ }
33
+
34
+ let(:expected_dsl) {
35
+ <<-RUBY
36
+ create_table "child", force: :cascade do |t|
37
+ t.integer "parent_id", limit: 4
38
+ end
39
+
40
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
41
+
42
+ create_table "parent", force: :cascade do |t|
43
+ end
44
+
45
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
46
+ RUBY
47
+ }
48
+
49
+ before { subject.diff(actual_dsl).migrate }
50
+
51
+ subject { client(dumb_with_default_fk_name: true) }
52
+
53
+ it {
54
+ delta = subject.diff(expected_dsl)
55
+ expect(delta.differ?).to be_truthy
56
+ expect(subject.dump.delete_empty_lines).to eq sorted_actual_dsl.strip_heredoc.strip.delete_empty_lines
57
+ delta.migrate
58
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
59
+ }
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,173 @@
1
+ unless postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when create fk' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "child"#{unsigned_if_enabled}, force: :cascade do |t|
7
+ t.integer "parent_id", limit: 4#{unsigned_if_enabled}
8
+ end
9
+
10
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
11
+
12
+ create_table "parent"#{unsigned_if_enabled}, force: :cascade do |t|
13
+ end
14
+ RUBY
15
+ }
16
+
17
+ let(:expected_dsl) {
18
+ actual_dsl + (<<-RUBY)
19
+
20
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
21
+ RUBY
22
+ }
23
+
24
+ before { subject.diff(actual_dsl).migrate }
25
+ subject { client(dumb_with_default_fk_name: true) }
26
+
27
+ it {
28
+ delta = subject.diff(expected_dsl)
29
+ expect(delta.differ?).to be_truthy
30
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
31
+ delta.migrate
32
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
33
+ }
34
+
35
+ it {
36
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4, dumb_with_default_fk_name: true)
37
+ expect(delta.differ?).to be_truthy
38
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
39
+ remove_foreign_key("child", {:name=>"fk_rails_e74ce85cbc"})
40
+ RUBY
41
+ }
42
+
43
+ it {
44
+ delta = client(bulk_change: true, dumb_with_default_fk_name: true).diff(expected_dsl)
45
+ expect(delta.differ?).to be_truthy
46
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
47
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
48
+ add_foreign_key("child", "parent", {:name=>"fk_rails_e74ce85cbc"})
49
+ RUBY
50
+ delta.migrate
51
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
52
+ }
53
+ end
54
+
55
+ context 'when create fk when create table' do
56
+ let(:dsl) {
57
+ <<-RUBY
58
+ # Define parent before child
59
+ create_table "parent", force: :cascade do |t|
60
+ end
61
+
62
+ create_table "child", force: :cascade do |t|
63
+ t.integer "parent_id"
64
+ end
65
+
66
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
67
+
68
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
69
+ RUBY
70
+ }
71
+
72
+ let(:sorted_dsl) {
73
+ <<-RUBY
74
+
75
+ create_table "child", force: :cascade do |t|
76
+ t.integer "parent_id", limit: 4
77
+ end
78
+
79
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
80
+
81
+ create_table "parent", force: :cascade do |t|
82
+ end
83
+
84
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
85
+ RUBY
86
+ }
87
+
88
+ subject { client(dumb_with_default_fk_name: true) }
89
+
90
+ it {
91
+ delta = subject.diff(dsl)
92
+ expect(delta.differ?).to be_truthy
93
+ expect(subject.dump.strip).to eq ''
94
+ delta.migrate
95
+ expect(subject.dump.delete_empty_lines).to eq sorted_dsl.strip_heredoc.strip.delete_empty_lines
96
+ }
97
+ end
98
+
99
+ context 'already defined' do
100
+ let(:dsl) {
101
+ <<-RUBY
102
+ # Define parent before child
103
+ create_table "parent", force: :cascade do |t|
104
+ end
105
+
106
+ create_table "child", force: :cascade do |t|
107
+ t.integer "parent_id", unsigned: true
108
+ end
109
+
110
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
111
+
112
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
113
+
114
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
115
+ RUBY
116
+ }
117
+
118
+ subject { client(dumb_with_default_fk_name: true) }
119
+
120
+ it {
121
+ expect {
122
+ subject.diff(dsl)
123
+ }.to raise_error('Foreign Key `child(fk_rails_e74ce85cbc)` already defined')
124
+ }
125
+ end
126
+
127
+ context 'no name' do
128
+ let(:dsl) {
129
+ <<-RUBY
130
+ # Define parent before child
131
+ create_table "parent", force: :cascade do |t|
132
+ end
133
+
134
+ create_table "child", force: :cascade do |t|
135
+ t.integer "parent_id", unsigned: true
136
+ end
137
+
138
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
139
+
140
+ add_foreign_key "child", "parent"
141
+ RUBY
142
+ }
143
+
144
+ subject { client(dumb_with_default_fk_name: true) }
145
+
146
+ it {
147
+ expect {
148
+ subject.diff(dsl)
149
+ }.to raise_error('Foreign key name in `child` is undefined')
150
+ }
151
+ end
152
+
153
+ context 'orphan fk' do
154
+ let(:dsl) {
155
+ <<-RUBY
156
+ # Define parent before child
157
+ create_table "parent", force: :cascade do |t|
158
+ end
159
+
160
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
161
+ RUBY
162
+ }
163
+
164
+ subject { client(dumb_with_default_fk_name: true) }
165
+
166
+ it {
167
+ expect {
168
+ subject.diff(dsl)
169
+ }.to raise_error('Table `child` to create the foreign key is not defined: fk_rails_e74ce85cbc')
170
+ }
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,114 @@
1
+ unless postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when drop fk' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "parent", force: :cascade do |t|
7
+ end
8
+
9
+ create_table "child", force: :cascade do |t|
10
+ t.integer "parent_id"
11
+ end
12
+
13
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
14
+
15
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
16
+ RUBY
17
+ }
18
+
19
+ let(:sorted_actual_dsl) {
20
+ expected_dsl + (<<-RUBY)
21
+
22
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
23
+ RUBY
24
+ }
25
+
26
+ let(:expected_dsl) {
27
+ <<-RUBY
28
+ create_table "child", force: :cascade do |t|
29
+ t.integer "parent_id", limit: 4
30
+ end
31
+
32
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
33
+
34
+ create_table "parent", force: :cascade do |t|
35
+ end
36
+ RUBY
37
+ }
38
+
39
+ before { subject.diff(actual_dsl).migrate }
40
+ subject { client(dumb_with_default_fk_name: true) }
41
+
42
+ it {
43
+ delta = subject.diff(expected_dsl)
44
+ expect(delta.differ?).to be_truthy
45
+ expect(subject.dump).to eq sorted_actual_dsl.strip_heredoc.strip
46
+ delta.migrate
47
+ expect(subject.dump.each_line.select {|i| i !~ /\A\Z/ }.join).to eq expected_dsl.strip_heredoc.strip.each_line.select {|i| i !~ /\A\Z/ }.join
48
+ }
49
+
50
+ it {
51
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4, dumb_with_default_fk_name: true)
52
+ expect(delta.differ?).to be_truthy
53
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
54
+ add_foreign_key("child", "parent", {:name=>"fk_rails_e74ce85cbc"})
55
+ RUBY
56
+ }
57
+
58
+ it {
59
+ delta = client(bulk_change: true, dumb_with_default_fk_name: true).diff(expected_dsl)
60
+ expect(delta.differ?).to be_truthy
61
+ expect(subject.dump).to eq sorted_actual_dsl.strip_heredoc.strip
62
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
63
+ remove_foreign_key("child", {:name=>"fk_rails_e74ce85cbc"})
64
+ RUBY
65
+ delta.migrate
66
+ expect(subject.dump.each_line.select {|i| i !~ /\A\Z/ }.join).to eq expected_dsl.strip_heredoc.strip.each_line.select {|i| i !~ /\A\Z/ }.join
67
+ }
68
+ end
69
+
70
+ context 'when drop fk when drop table' do
71
+ let(:dsl) {
72
+ <<-RUBY
73
+ create_table "parent", force: :cascade do |t|
74
+ end
75
+
76
+
77
+ create_table "child", force: :cascade do |t|
78
+ t.integer "parent_id"
79
+ end
80
+
81
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
82
+
83
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
84
+ RUBY
85
+ }
86
+
87
+ let(:sorted_dsl) {
88
+ <<-RUBY
89
+ create_table "child", force: :cascade do |t|
90
+ t.integer "parent_id", limit: 4
91
+ end
92
+
93
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
94
+
95
+ create_table "parent", force: :cascade do |t|
96
+ end
97
+
98
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
99
+ RUBY
100
+ }
101
+
102
+ before { subject.diff(dsl).migrate }
103
+ subject { client(dumb_with_default_fk_name: true) }
104
+
105
+ it {
106
+ delta = subject.diff('')
107
+ expect(delta.differ?).to be_truthy
108
+ expect(subject.dump).to eq sorted_dsl.strip_heredoc.strip
109
+ delta.migrate
110
+ expect(subject.dump.strip).to eq ''
111
+ }
112
+ end
113
+ end
114
+ end
@@ -48,7 +48,7 @@ add_foreign_key "child", "parent", name: "child_ibfk_1"
48
48
 
49
49
  before { subject.diff(actual_dsl).migrate }
50
50
 
51
- subject { client(enable_foreigner: true) }
51
+ subject { client }
52
52
 
53
53
  it {
54
54
  delta = subject.diff(expected_dsl)
@@ -0,0 +1,62 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when change fk' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "parent", force: :cascade do |t|
7
+ end
8
+
9
+ create_table "child", force: :cascade do |t|
10
+ t.integer "parent_id"
11
+ end
12
+
13
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
14
+
15
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc", on_delete: :cascade
16
+ RUBY
17
+ }
18
+
19
+ let(:sorted_actual_dsl) {
20
+ <<-RUBY
21
+ create_table "child", force: :cascade do |t|
22
+ t.integer "parent_id"
23
+ end
24
+
25
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
26
+
27
+ create_table "parent", force: :cascade do |t|
28
+ end
29
+
30
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc", on_delete: :cascade
31
+ RUBY
32
+ }
33
+
34
+ let(:expected_dsl) {
35
+ <<-RUBY
36
+ create_table "child", force: :cascade do |t|
37
+ t.integer "parent_id"
38
+ end
39
+
40
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
41
+
42
+ create_table "parent", force: :cascade do |t|
43
+ end
44
+
45
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
46
+ RUBY
47
+ }
48
+
49
+ before { subject.diff(actual_dsl).migrate }
50
+
51
+ subject { client(dumb_with_default_fk_name: true) }
52
+
53
+ it {
54
+ delta = subject.diff(expected_dsl)
55
+ expect(delta.differ?).to be_truthy
56
+ expect(subject.dump.delete_empty_lines).to eq sorted_actual_dsl.strip_heredoc.strip.delete_empty_lines
57
+ delta.migrate
58
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
59
+ }
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,173 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when create fk' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "child", force: :cascade do |t|
7
+ t.integer "parent_id"
8
+ end
9
+
10
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
11
+
12
+ create_table "parent", force: :cascade do |t|
13
+ end
14
+ RUBY
15
+ }
16
+
17
+ let(:expected_dsl) {
18
+ actual_dsl + (<<-RUBY)
19
+
20
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
21
+ RUBY
22
+ }
23
+
24
+ before { subject.diff(actual_dsl).migrate }
25
+ subject { client(dumb_with_default_fk_name: true) }
26
+
27
+ it {
28
+ delta = subject.diff(expected_dsl)
29
+ expect(delta.differ?).to be_truthy
30
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
31
+ delta.migrate
32
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
33
+ }
34
+
35
+ it {
36
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4, dumb_with_default_fk_name: true)
37
+ expect(delta.differ?).to be_truthy
38
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
39
+ remove_foreign_key("child", {:name=>"fk_rails_e74ce85cbc"})
40
+ RUBY
41
+ }
42
+
43
+ it {
44
+ delta = client(bulk_change: true, dumb_with_default_fk_name: true).diff(expected_dsl)
45
+ expect(delta.differ?).to be_truthy
46
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
47
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
48
+ add_foreign_key("child", "parent", {:name=>"fk_rails_e74ce85cbc"})
49
+ RUBY
50
+ delta.migrate
51
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
52
+ }
53
+ end
54
+
55
+ context 'when create fk when create table' do
56
+ let(:dsl) {
57
+ <<-RUBY
58
+ # Define parent before child
59
+ create_table "parent", force: :cascade do |t|
60
+ end
61
+
62
+ create_table "child", force: :cascade do |t|
63
+ t.integer "parent_id", unsigned: true
64
+ end
65
+
66
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
67
+
68
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
69
+ RUBY
70
+ }
71
+
72
+ let(:sorted_dsl) {
73
+ <<-RUBY
74
+ create_table "child", force: :cascade do |t|
75
+ t.integer "parent_id"
76
+ end
77
+
78
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
79
+
80
+ create_table "parent", force: :cascade do |t|
81
+ end
82
+
83
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
84
+ RUBY
85
+ }
86
+
87
+ before { client.diff('').migrate }
88
+ subject { client(dumb_with_default_fk_name: true) }
89
+
90
+ it {
91
+ delta = subject.diff(dsl)
92
+ expect(delta.differ?).to be_truthy
93
+ expect(subject.dump.strip).to eq ''
94
+ delta.migrate
95
+ expect(subject.dump.delete_empty_lines).to eq sorted_dsl.strip_heredoc.strip.delete_empty_lines
96
+ }
97
+ end
98
+
99
+ context 'already defined' do
100
+ let(:dsl) {
101
+ <<-RUBY
102
+ # Define parent before child
103
+ create_table "parent", force: :cascade do |t|
104
+ end
105
+
106
+ create_table "child", force: :cascade do |t|
107
+ t.integer "parent_id", unsigned: true
108
+ end
109
+
110
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
111
+
112
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
113
+
114
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
115
+ RUBY
116
+ }
117
+
118
+ subject { client(dumb_with_default_fk_name: true) }
119
+
120
+ it {
121
+ expect {
122
+ subject.diff(dsl)
123
+ }.to raise_error('Foreign Key `child(fk_rails_e74ce85cbc)` already defined')
124
+ }
125
+ end
126
+
127
+ context 'no name' do
128
+ let(:dsl) {
129
+ <<-RUBY
130
+ # Define parent before child
131
+ create_table "parent", force: :cascade do |t|
132
+ end
133
+
134
+ create_table "child", force: :cascade do |t|
135
+ t.integer "parent_id", unsigned: true
136
+ end
137
+
138
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
139
+
140
+ add_foreign_key "child", "parent"
141
+ RUBY
142
+ }
143
+
144
+ subject { client(dumb_with_default_fk_name: true) }
145
+
146
+ it {
147
+ expect {
148
+ subject.diff(dsl)
149
+ }.to raise_error('Foreign key name in `child` is undefined')
150
+ }
151
+ end
152
+
153
+ context 'orphan fk' do
154
+ let(:dsl) {
155
+ <<-RUBY
156
+ # Define parent before child
157
+ create_table "parent", force: :cascade do |t|
158
+ end
159
+
160
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
161
+ RUBY
162
+ }
163
+
164
+ subject { client(dumb_with_default_fk_name: true) }
165
+
166
+ it {
167
+ expect {
168
+ subject.diff(dsl)
169
+ }.to raise_error('Table `child` to create the foreign key is not defined: fk_rails_e74ce85cbc')
170
+ }
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,114 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when drop fk' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "parent", force: :cascade do |t|
7
+ end
8
+
9
+ create_table "child", force: :cascade do |t|
10
+ t.integer "parent_id"
11
+ end
12
+
13
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
14
+
15
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
16
+ RUBY
17
+ }
18
+
19
+ let(:sorted_actual_dsl) {
20
+ expected_dsl + (<<-RUBY)
21
+
22
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
23
+ RUBY
24
+ }
25
+
26
+ let(:expected_dsl) {
27
+ <<-RUBY
28
+ create_table "child", force: :cascade do |t|
29
+ t.integer "parent_id"
30
+ end
31
+
32
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
33
+
34
+ create_table "parent", force: :cascade do |t|
35
+ end
36
+ RUBY
37
+ }
38
+
39
+ before { subject.diff(actual_dsl).migrate }
40
+ subject { client(dumb_with_default_fk_name: true) }
41
+
42
+ it {
43
+ delta = subject.diff(expected_dsl)
44
+ expect(delta.differ?).to be_truthy
45
+ expect(subject.dump).to eq sorted_actual_dsl.strip_heredoc.strip
46
+ delta.migrate
47
+ expect(subject.dump.each_line.select {|i| i !~ /\A\Z/ }.join).to eq expected_dsl.strip_heredoc.strip.each_line.select {|i| i !~ /\A\Z/ }.join
48
+ }
49
+
50
+ it {
51
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4, dumb_with_default_fk_name: true)
52
+ expect(delta.differ?).to be_truthy
53
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
54
+ add_foreign_key("child", "parent", {:name=>"fk_rails_e74ce85cbc"})
55
+ RUBY
56
+ }
57
+
58
+ it {
59
+ delta = client(bulk_change: true, dumb_with_default_fk_name: true).diff(expected_dsl)
60
+ expect(delta.differ?).to be_truthy
61
+ expect(subject.dump).to eq sorted_actual_dsl.strip_heredoc.strip
62
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
63
+ remove_foreign_key("child", {:name=>"fk_rails_e74ce85cbc"})
64
+ RUBY
65
+ delta.migrate
66
+ expect(subject.dump.each_line.select {|i| i !~ /\A\Z/ }.join).to eq expected_dsl.strip_heredoc.strip.each_line.select {|i| i !~ /\A\Z/ }.join
67
+ }
68
+ end
69
+
70
+ context 'when drop fk when drop table' do
71
+ let(:dsl) {
72
+ <<-RUBY
73
+ create_table "parent", force: :cascade do |t|
74
+ end
75
+
76
+
77
+ create_table "child", force: :cascade do |t|
78
+ t.integer "parent_id", unsigned: true
79
+ end
80
+
81
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
82
+
83
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
84
+ RUBY
85
+ }
86
+
87
+ let(:sorted_dsl) {
88
+ <<-RUBY
89
+ create_table "child", force: :cascade do |t|
90
+ t.integer "parent_id"
91
+ end
92
+
93
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
94
+
95
+ create_table "parent", force: :cascade do |t|
96
+ end
97
+
98
+ add_foreign_key "child", "parent", name: "fk_rails_e74ce85cbc"
99
+ RUBY
100
+ }
101
+
102
+ before { subject.diff(dsl).migrate }
103
+ subject { client(dumb_with_default_fk_name: true) }
104
+
105
+ it {
106
+ delta = subject.diff('')
107
+ expect(delta.differ?).to be_truthy
108
+ expect(subject.dump).to eq sorted_dsl.strip_heredoc.strip
109
+ delta.migrate
110
+ expect(subject.dump.strip).to eq ''
111
+ }
112
+ end
113
+ end
114
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridgepole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4.beta3
4
+ version: 0.6.4.beta4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-01 00:00:00.000000000 Z
11
+ date: 2016-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -164,6 +164,7 @@ files:
164
164
  - lib/ridgepole/execute_expander.rb
165
165
  - lib/ridgepole/ext/abstract_mysql_adapter.rb
166
166
  - lib/ridgepole/ext/migration_comments.rb
167
+ - lib/ridgepole/ext/schema_dumper.rb
167
168
  - lib/ridgepole/external_sql_executer.rb
168
169
  - lib/ridgepole/logger.rb
169
170
  - lib/ridgepole/migration_ext.rb
@@ -234,6 +235,9 @@ files:
234
235
  - spec/mysql/migrate_/migrate_drop_index_with_alter_spec.rb
235
236
  - spec/mysql/ridgepole_test_database.sql
236
237
  - spec/mysql/ridgepole_test_tables.sql
238
+ - spec/mysql/~default_name_fk/migrate_change_fk_spec.rb
239
+ - spec/mysql/~default_name_fk/migrate_create_fk_spec.rb
240
+ - spec/mysql/~default_name_fk/migrate_drop_fk_spec.rb
237
241
  - spec/postgresql/diff/diff_spec.rb
238
242
  - spec/postgresql/dump/dump_spec.rb
239
243
  - spec/postgresql/fk/migrate_change_fk_spec.rb
@@ -254,6 +258,9 @@ files:
254
258
  - spec/postgresql/migrate/migrate_same_spec.rb
255
259
  - spec/postgresql/ridgepole_test_database.sql
256
260
  - spec/postgresql/ridgepole_test_tables.sql
261
+ - spec/postgresql/~default_name_fk/migrate_change_fk_spec.rb
262
+ - spec/postgresql/~default_name_fk/migrate_create_fk_spec.rb
263
+ - spec/postgresql/~default_name_fk/migrate_drop_fk_spec.rb
257
264
  - spec/spec_helper.rb
258
265
  - spec/string_ext.rb
259
266
  homepage: https://github.com/winebarrel/ridgepole
@@ -276,7 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
276
283
  version: 1.3.1
277
284
  requirements: []
278
285
  rubyforge_project:
279
- rubygems_version: 2.4.5
286
+ rubygems_version: 2.4.5.1
280
287
  signing_key:
281
288
  specification_version: 4
282
289
  summary: Ridgepole is a tool to manage DB schema.
@@ -344,6 +351,9 @@ test_files:
344
351
  - spec/mysql/migrate_/migrate_drop_index_with_alter_spec.rb
345
352
  - spec/mysql/ridgepole_test_database.sql
346
353
  - spec/mysql/ridgepole_test_tables.sql
354
+ - spec/mysql/~default_name_fk/migrate_change_fk_spec.rb
355
+ - spec/mysql/~default_name_fk/migrate_create_fk_spec.rb
356
+ - spec/mysql/~default_name_fk/migrate_drop_fk_spec.rb
347
357
  - spec/postgresql/diff/diff_spec.rb
348
358
  - spec/postgresql/dump/dump_spec.rb
349
359
  - spec/postgresql/fk/migrate_change_fk_spec.rb
@@ -364,5 +374,8 @@ test_files:
364
374
  - spec/postgresql/migrate/migrate_same_spec.rb
365
375
  - spec/postgresql/ridgepole_test_database.sql
366
376
  - spec/postgresql/ridgepole_test_tables.sql
377
+ - spec/postgresql/~default_name_fk/migrate_change_fk_spec.rb
378
+ - spec/postgresql/~default_name_fk/migrate_create_fk_spec.rb
379
+ - spec/postgresql/~default_name_fk/migrate_drop_fk_spec.rb
367
380
  - spec/spec_helper.rb
368
381
  - spec/string_ext.rb