ridgepole 0.6.4.beta3 → 0.6.4.beta4

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