ridgepole 0.2.1 → 0.2.2

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: 2e09733c0324e6f1e7aac45b4b27b1dbf8492114
4
- data.tar.gz: ee817aee1eabf4f66821585b4e114daad6b1a41b
3
+ metadata.gz: f5d54e938bc4e2bf95598645ed4a431726393ec0
4
+ data.tar.gz: 4a51aeaa8a9f1b9786c77ec09607b7be67227c81
5
5
  SHA512:
6
- metadata.gz: 12cb083697c48bcd3b799f6686a32f91bdd62852d69fa235e9afabc790bf1b10e72b13357debd2a8d6b04d38fdaa1c850b407c04a7f622d75d3f282a747059a3
7
- data.tar.gz: be9c09c97c28b2ee4614230c37e81cb63f5323e1f9f50d68ab0e3d6f2806df15287432ebe4e05d458f8a0a40047e6116ca17029716d26f73ac66cdf9e21943cd
6
+ metadata.gz: 93a822f7d5188da00068bad5b309b76adac1e6ee8992550eeccff464672c54ac77f88fadd0817404f7b44115662bbaecb5fa782d6dceb41c03c15a522c1ee52a
7
+ data.tar.gz: 8073144c850abfff1970664fc861d241f7676cfc98e9e26afb0e5d6be0d8aac2b6ce42517ac4827bcf8b6b2d6bebad8fb13f79b511deef5539e4e615974e78a6
data/README.md CHANGED
@@ -25,10 +25,101 @@ Or install it yourself as:
25
25
  ## Usage
26
26
 
27
27
  ```sh
28
- ridgepole --export -o Schemafile
29
- vi Schemafile
30
- ridgepole --apply --dry-run
31
- ridgepole --apply
28
+ $ git init
29
+ Initialized empty Git repository in ...
30
+
31
+ $ cat config.yml
32
+ adapter: mysql2
33
+ encoding: utf8
34
+ database: blog
35
+ username: root
36
+
37
+ $ ridgepole -c config.yml --export -o Schemafile # or `ridgepole -c '{adapter: mysql2, database: blog}' ...`
38
+ Export Schema to `Schemafile`
39
+
40
+ $ cat Schemafile
41
+ create_table "articles", force: true do |t|
42
+ t.string "title"
43
+ t.text "text"
44
+ t.datetime "created_at"
45
+ t.datetime "updated_at"
46
+ end
47
+
48
+ $ git add .
49
+ $ git commit -m 'first commit' -a
50
+ [master (root-commit) a6c2d31] first commit
51
+ 2 files changed, 10 insertions(+)
52
+ create mode 100644 Schemafile
53
+ create mode 100644 config.yml
54
+
55
+ $ vi Schemafile
56
+ $ git diff
57
+ diff --git a/Schemafile b/Schemafile
58
+ index f5848b9..c266fed 100644
59
+ --- a/Schemafile
60
+ +++ b/Schemafile
61
+ @@ -1,6 +1,7 @@
62
+ create_table "articles", force: true do |t|
63
+ t.string "title"
64
+ t.text "text"
65
+ + t.text "author"
66
+ t.datetime "created_at"
67
+ t.datetime "updated_at"
68
+ end
69
+
70
+ $ ridgepole -c config.yml --apply --dry-run
71
+ Apply `Schemafile` (dry-run)
72
+ add_column("articles", "author", :text, {:after=>"text"})
73
+
74
+ $ ridgepole -c config.yml --apply
75
+ Apply `Schemafile`
76
+ -- add_column("articles", "author", :text, {:after=>"text"})
77
+ -> 0.0202s
78
+ ```
79
+
80
+ ## Diff
81
+ ```sh
82
+ $ ridgepole --diff file1.schema file2.schema
83
+ add_column("articles", "author", :text, {:after=>"title"})
84
+ rename_column("articles", "text", "desc")
85
+
86
+ # You can apply to the database the difference:
87
+ # $ ridgepole -c config.yml --diff file1.schema file2.schema --with-apply
88
+ ```
89
+
90
+ You can also compare databases and files.
91
+
92
+ ```sh
93
+ $ ridgepole --diff config.yml file1.schema
94
+ remove_column("articles", "author")
95
+ ```
96
+
97
+ ### Reverse diff
98
+ ```sh
99
+ $ cat file1.schema
100
+ create_table "articles", force: true do |t|
101
+ t.string "title"
102
+ t.text "text"
103
+ t.datetime "created_at"
104
+ t.datetime "updated_at"
105
+ end
106
+
107
+ $ cat file2.schema
108
+ create_table "articles", force: true do |t|
109
+ t.string "title"
110
+ t.text "desc", rename_from: "text"
111
+ t.text "author"
112
+ t.datetime "created_at"
113
+ t.datetime "updated_at"
114
+ end
115
+
116
+ $ ridgepole --diff file1.schema file2.schema
117
+ add_column("articles", "author", :text, {:after=>"title"})
118
+ rename_column("articles", "text", "desc")
119
+
120
+ $ ridgepole --diff file1.schema file2.schema --reverse
121
+ rename_column("articles", "desc", "text")
122
+ remove_column("articles", "author")
32
123
  ```
33
124
 
34
125
  ## Demo
data/bin/ridgepole CHANGED
@@ -17,6 +17,9 @@ mode = nil
17
17
  file = DEFAULT_FILENAME
18
18
  output_file = '-'
19
19
  split = false
20
+ diff_files = nil
21
+ diff_with_apply = false
22
+ exit_code = 0
20
23
 
21
24
  options = {
22
25
  :dry_run => false,
@@ -38,6 +41,20 @@ ARGV.options do |opt|
38
41
  opt.on('-e', '--export') { set_mode[:export] }
39
42
  opt.on('', '--split') {|v| split = true }
40
43
  opt.on('', '--split-with-dir') {|v| split = :with_dir }
44
+ opt.on('-d', '--diff DSL1 DSL2') {|diff_arg1|
45
+ set_mode[:diff]
46
+ diff_arg2 = ARGV.first
47
+
48
+ if [diff_arg1, diff_arg2].any? {|i| i.nil? or i =~ /\A-/ }
49
+ puts opt.help
50
+ exit 1
51
+ end
52
+
53
+ ARGV.shift
54
+ diff_files = [diff_arg1, diff_arg2]
55
+ }
56
+ opt.on('', '--reverse') { options[:reverse] = true }
57
+ opt.on('', '--with-apply') { diff_with_apply = true }
41
58
  opt.on('-o', '--output FILE') {|v| output_file = v }
42
59
  opt.on('-t', '--tables TABLES', Array) {|v| options[:tables] = v }
43
60
  opt.on('', '--ignore-tables TABLES', Array) {|v| options[:ignore_tables] = v.map {|i| Regexp.new(i) } }
@@ -47,7 +64,7 @@ ARGV.options do |opt|
47
64
  opt.on('' , '--debug') { options[:debug] = true }
48
65
  opt.parse!
49
66
 
50
- unless config and mode
67
+ if not mode or ([:apply, :export].include?(mode) and not config) or (options[:with_apply] and not config)
51
68
  puts opt.help
52
69
  exit 1
53
70
  end
@@ -61,9 +78,11 @@ begin
61
78
  logger = Ridgepole::Logger.instance
62
79
  logger.set_debug(options[:debug])
63
80
 
64
- config = open(config) {|f| f.read } if File.exist?(config)
65
- config = YAML.load(config)
66
- client = Ridgepole::Client.new(config, options)
81
+ if config
82
+ config = File.read(config) if File.exist?(config)
83
+ config = YAML.load(config)
84
+ client = Ridgepole::Client.new(config, options)
85
+ end
67
86
 
68
87
  case mode
69
88
  when :export
@@ -115,7 +134,7 @@ begin
115
134
  msg << ' (dry-run)' if options[:dry_run]
116
135
  logger.info(msg)
117
136
 
118
- dsl = open(file) {|f| f.read }
137
+ dsl = File.read(file)
119
138
  delta = client.diff(dsl, :path => file)
120
139
 
121
140
  if options[:dry_run]
@@ -128,6 +147,30 @@ begin
128
147
  unless delta.differ?
129
148
  logger.info('No change')
130
149
  end
150
+ when :diff
151
+ diff_files = diff_files.map do |file|
152
+ if File.exist?(file)
153
+ file_ext = File.extname(file)
154
+ %w(.yml .yaml).include?(file_ext) ? YAML.load_file(file) : File.read(file)
155
+ else
156
+ YAML.load(file)
157
+ end
158
+ end
159
+
160
+ delta = Ridgepole::Client.diff(*diff_files, options)
161
+
162
+ if diff_with_apply
163
+ logger.verbose_info('# Update schema')
164
+
165
+ if delta.differ?
166
+ delta.migrate
167
+ else
168
+ logger.info('No change')
169
+ end
170
+ elsif delta.differ?
171
+ puts delta.script
172
+ exit_code = 1
173
+ end
131
174
  end
132
175
  rescue => e
133
176
  if options[:debug]
@@ -137,3 +180,5 @@ rescue => e
137
180
  exit 1
138
181
  end
139
182
  end
183
+
184
+ exit exit_code
@@ -28,4 +28,32 @@ class Ridgepole::Client
28
28
  logger.verbose_info('# Compare definitions')
29
29
  @diff.diff(current_definition, expected_definition)
30
30
  end
31
+
32
+ class << self
33
+ def diff(dsl_or_config1, dsl_or_config2, options = {})
34
+ logger = Ridgepole::Logger.instance
35
+
36
+ logger.verbose_info('# Parse DSL1')
37
+ definition1 = load_definition(dsl_or_config1)
38
+ logger.verbose_info('# Parse DSL2')
39
+ definition2 = load_definition(dsl_or_config2)
40
+
41
+ logger.verbose_info('# Compare definitions')
42
+ diff = Ridgepole::Diff.new(options)
43
+ diff.diff(definition1, definition2)
44
+ end
45
+
46
+ def dump(conn_spec, options = {}, &block)
47
+ client = self.new(conn_spec, options)
48
+ client.dump(&block)
49
+ end
50
+
51
+ private
52
+
53
+ def load_definition(dsl_or_config, options = {})
54
+ dsl_or_config = dump(dsl_or_config, options) if dsl_or_config.kind_of?(Hash)
55
+ parser = Ridgepole::DSLParser.new(options)
56
+ parser.parse(dsl_or_config)
57
+ end
58
+ end # of class methods
31
59
  end
@@ -6,6 +6,11 @@ class Ridgepole::Diff
6
6
  def diff(from, to)
7
7
  from = (from || {}).dup
8
8
  to = (to || {}).dup
9
+
10
+ if @options[:reverse]
11
+ from, to = to, from
12
+ end
13
+
9
14
  delta = {}
10
15
 
11
16
  to.dup.each do |table_name, to_attrs|
@@ -23,6 +28,24 @@ class Ridgepole::Diff
23
28
  end
24
29
  end
25
30
 
31
+
32
+ # for reverse option
33
+ from.dup.each do |table_name, from_attrs|
34
+ if (to_table_name = (from_attrs[:options] || {}).delete(:rename_from))
35
+ unless to.has_key?(to_table_name)
36
+ raise "Table `#{from_table_name}` not found"
37
+ end
38
+
39
+ # XXX: Correct?
40
+ next unless target?(to_table_name)
41
+
42
+ delta[:rename] ||= {}
43
+ delta[:rename][to_table_name] = table_name
44
+ from.delete(table_name)
45
+ to.delete(to_table_name)
46
+ end
47
+ end
48
+
26
49
  to.each do |table_name, to_attrs|
27
50
  next unless target?(table_name)
28
51
 
@@ -87,6 +110,20 @@ class Ridgepole::Diff
87
110
  end
88
111
  end
89
112
 
113
+ # for reverse option
114
+ from.dup.each do |column_name, from_attrs|
115
+ if (to_column_name = (from_attrs[:options] || {}).delete(:rename_from))
116
+ unless to.has_key?(to_column_name)
117
+ raise "Column `#{to_column_name}` not found"
118
+ end
119
+
120
+ definition_delta[:rename] ||= {}
121
+ definition_delta[:rename][to_column_name] = column_name
122
+ from.delete(column_name)
123
+ to.delete(to_column_name)
124
+ end
125
+ end
126
+
90
127
  priv_column_name = nil
91
128
 
92
129
  to.each do |column_name, to_attrs|
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
File without changes
@@ -0,0 +1,154 @@
1
+ describe 'Ridgepole::Client.diff' do
2
+ context 'when change column' do
3
+ let(:actual_dsl) {
4
+ <<-RUBY
5
+ create_table "clubs", force: true do |t|
6
+ t.string "name", default: "", null: false
7
+ end
8
+
9
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
10
+
11
+ create_table "departments", primary_key: "dept_no", force: true do |t|
12
+ t.string "dept_name", limit: 40, null: false
13
+ end
14
+
15
+ add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
16
+
17
+ create_table "dept_emp", id: false, force: true do |t|
18
+ t.integer "emp_no", null: false
19
+ t.string "dept_no", limit: 4, null: false
20
+ t.date "from_date", null: false
21
+ t.date "to_date", null: false
22
+ end
23
+
24
+ add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
25
+ add_index "dept_emp", ["emp_no"], name: "emp_no", using: :btree
26
+
27
+ create_table "dept_manager", id: false, force: true do |t|
28
+ t.string "dept_no", limit: 4, null: false
29
+ t.integer "emp_no", null: false
30
+ t.date "from_date", null: false
31
+ t.date "to_date", null: false
32
+ end
33
+
34
+ add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
35
+ add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
36
+
37
+ create_table "employee_clubs", force: true do |t|
38
+ t.integer "emp_no", unsigned: true, null: false
39
+ t.integer "club_id", unsigned: true, null: false
40
+ end
41
+
42
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
43
+
44
+ create_table "employees", primary_key: "emp_no", force: true do |t|
45
+ t.date "birth_date", null: false
46
+ t.string "first_name", limit: 14, null: false
47
+ t.string "last_name", limit: 16, null: false
48
+ t.string "gender", limit: 1, null: false
49
+ t.date "hire_date", null: false
50
+ end
51
+
52
+ create_table "salaries", id: false, force: true do |t|
53
+ t.integer "emp_no", null: false
54
+ t.integer "salary", null: false
55
+ t.date "from_date", null: false
56
+ t.date "to_date", null: false
57
+ end
58
+
59
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
60
+
61
+ create_table "titles", id: false, force: true do |t|
62
+ t.integer "emp_no", null: false
63
+ t.string "title", limit: 50, null: false
64
+ t.date "from_date", null: false
65
+ t.date "to_date"
66
+ end
67
+
68
+ add_index "titles", ["emp_no"], name: "emp_no", using: :btree
69
+ RUBY
70
+ }
71
+
72
+ let(:expected_dsl) {
73
+ <<-RUBY
74
+ create_table "clubs", force: true do |t|
75
+ t.string "name", default: "", null: false
76
+ end
77
+
78
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
79
+
80
+ create_table "departments", primary_key: "dept_no", force: true do |t|
81
+ t.string "dept_name", limit: 40, null: false
82
+ end
83
+
84
+ add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
85
+
86
+ create_table "dept_emp", id: false, force: true do |t|
87
+ t.integer "emp_no", null: false
88
+ t.string "dept_no", limit: 4, null: false
89
+ t.date "from_date", null: false
90
+ t.date "to_date", null: false
91
+ end
92
+
93
+ add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
94
+ add_index "dept_emp", ["emp_no"], name: "emp_no", using: :btree
95
+
96
+ create_table "dept_manager", id: false, force: true do |t|
97
+ t.string "dept_no", limit: 4, null: false
98
+ t.integer "emp_no", null: false
99
+ t.date "from_date", null: false
100
+ t.date "to_date", null: false
101
+ end
102
+
103
+ add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
104
+ add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
105
+
106
+ create_table "employee_clubs", force: true do |t|
107
+ t.integer "emp_no", unsigned: true, null: false
108
+ t.integer "club_id", unsigned: false, null: true
109
+ end
110
+
111
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
112
+
113
+ create_table "employees", primary_key: "emp_no", force: true do |t|
114
+ t.date "birth_date", null: false
115
+ t.string "first_name", limit: 14, null: false
116
+ t.string "last_name", limit: 20, default: "XXX", null: false
117
+ t.string "gender", limit: 2, null: false
118
+ t.date "hire_date", null: false
119
+ end
120
+
121
+ create_table "salaries", id: false, force: true do |t|
122
+ t.integer "emp_no", null: false
123
+ t.integer "salary", null: false
124
+ t.date "from_date", null: false
125
+ t.date "to_date", null: false
126
+ end
127
+
128
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
129
+
130
+ create_table "titles", id: false, force: true do |t|
131
+ t.integer "emp_no", null: false
132
+ t.string "title", limit: 50, null: false
133
+ t.date "from_date", null: false
134
+ t.date "to_date"
135
+ end
136
+
137
+ add_index "titles", ["emp_no"], name: "emp_no", using: :btree
138
+ RUBY
139
+ }
140
+
141
+ subject { Ridgepole::Client }
142
+
143
+ it {
144
+ delta = subject.diff(actual_dsl, expected_dsl)
145
+ expect(delta.differ?).to be_true
146
+ expect(delta.script).to eq (<<-RUBY).undent.strip
147
+ change_column("employee_clubs", "club_id", :integer, {:unsigned=>false, :null=>true})
148
+
149
+ change_column("employees", "last_name", :string, {:limit=>20, :default=>"XXX", :null=>false, :unsigned=>false})
150
+ change_column("employees", "gender", :string, {:limit=>2, :null=>false, :unsigned=>false})
151
+ RUBY
152
+ }
153
+ end
154
+ end
@@ -1,7 +1,10 @@
1
- describe 'Ridgepole::Client#diff -> migrate' do
2
- context 'when drop table' do
3
- let(:dsl) {
4
- <<-RUBY
1
+ describe 'Ridgepole::Client.dump' do
2
+ context 'when there is a tables' do
3
+ before { restore_tables }
4
+ subject { Ridgepole::Client }
5
+
6
+ it {
7
+ expect(subject.dump(conn_spec)).to eq (<<-RUBY).undent.strip
5
8
  create_table "clubs", force: true do |t|
6
9
  t.string "name", default: "", null: false
7
10
  end
@@ -68,24 +71,5 @@ describe 'Ridgepole::Client#diff -> migrate' do
68
71
  add_index "titles", ["emp_no"], name: "emp_no", using: :btree
69
72
  RUBY
70
73
  }
71
-
72
- let(:actual_dsl) { dsl }
73
-
74
- let(:expected_dsl) {
75
- dsl.delete_create_table('clubs')
76
- .delete_create_table('employee_clubs')
77
- .delete_create_table('employees')
78
- }
79
-
80
- before { subject.diff(actual_dsl).migrate }
81
- subject { client }
82
-
83
- it {
84
- delta = subject.diff(expected_dsl)
85
- expect(delta.differ?).to be_true
86
- expect(subject.dump).to eq actual_dsl.undent.strip
87
- delta.migrate
88
- expect(subject.dump).to eq expected_dsl.undent.strip
89
- }
90
74
  end
91
75
  end
@@ -151,5 +151,16 @@ describe 'Ridgepole::Client#diff -> migrate' do
151
151
  delta.migrate
152
152
  expect(subject.dump).to eq expected_dsl.undent.strip
153
153
  }
154
+
155
+ it {
156
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
157
+ expect(delta.differ?).to be_true
158
+ expect(delta.script).to eq (<<-RUBY).undent.strip
159
+ remove_column("employee_clubs", "any_col")
160
+
161
+ remove_column("employees", "age")
162
+ remove_column("employees", "updated_at")
163
+ RUBY
164
+ }
154
165
  end
155
166
  end
@@ -148,5 +148,16 @@ describe 'Ridgepole::Client#diff -> migrate' do
148
148
  delta.migrate
149
149
  expect(subject.dump).to eq expected_dsl.undent.strip.gsub(/(\s*,\s*unsigned: false)?\s*,\s*null: true/, '')
150
150
  }
151
+
152
+ it {
153
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
154
+ expect(delta.differ?).to be_true
155
+ expect(delta.script).to eq (<<-RUBY).undent.strip
156
+ change_column("employee_clubs", "club_id", :integer, {:unsigned=>true, :null=>false})
157
+
158
+ change_column("employees", "last_name", :string, {:limit=>16, :null=>false, :unsigned=>false})
159
+ change_column("employees", "gender", :string, {:limit=>1, :null=>false, :unsigned=>false})
160
+ RUBY
161
+ }
151
162
  end
152
163
  end
@@ -36,5 +36,11 @@ describe 'Ridgepole::Client#diff -> migrate' do
36
36
  delta.migrate
37
37
  expect(subject.dump).to eq actual_dsl.undent.strip
38
38
  }
39
+
40
+ it {
41
+ expect(Ridgepole::Logger.instance).to receive(:warn).with('[WARNING] Table `employees` options cannot be changed')
42
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
43
+ expect(delta.differ?).to be_false
44
+ }
39
45
  end
40
46
  end
@@ -87,5 +87,17 @@ describe 'Ridgepole::Client#diff -> migrate' do
87
87
  delta.migrate
88
88
  expect(subject.dump.delete_empty_lines).to eq expected_dsl.undent.strip.delete_empty_lines
89
89
  }
90
+
91
+ it {
92
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
93
+ expect(delta.differ?).to be_true
94
+ expect(delta.script).to eq (<<-RUBY).undent.strip
95
+ remove_index("clubs", {:name=>"idx_name"})
96
+
97
+ remove_index("employee_clubs", {:name=>"idx_emp_no_club_id"})
98
+
99
+ remove_index("titles", {:name=>"emp_no"})
100
+ RUBY
101
+ }
90
102
  end
91
103
  end
@@ -87,5 +87,17 @@ describe 'Ridgepole::Client#diff -> migrate' do
87
87
  delta.migrate
88
88
  expect(subject.dump.delete_empty_lines).to eq expected_dsl.undent.strip.delete_empty_lines
89
89
  }
90
+
91
+ it {
92
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
93
+ expect(delta.differ?).to be_true
94
+ expect(delta.script).to eq (<<-RUBY).undent.strip
95
+ drop_table("clubs")
96
+
97
+ drop_table("employee_clubs")
98
+
99
+ drop_table("employees")
100
+ RUBY
101
+ }
90
102
  end
91
103
  end
@@ -141,5 +141,21 @@ describe 'Ridgepole::Client#diff -> migrate' do
141
141
  delta.migrate
142
142
  expect(subject.dump).to eq expected_dsl.undent.strip
143
143
  }
144
+
145
+ it {
146
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
147
+ expect(delta.differ?).to be_true
148
+ expect(delta.script).to eq (<<-RUBY).undent.strip
149
+ add_column("dept_emp", "from_date", :date, {:null=>false, :after=>"dept_no"})
150
+ add_column("dept_emp", "to_date", :date, {:null=>false, :after=>"from_date"})
151
+
152
+ add_column("dept_manager", "from_date", :date, {:null=>false, :after=>"emp_no"})
153
+ add_column("dept_manager", "to_date", :date, {:null=>false, :after=>"from_date"})
154
+
155
+ add_column("employees", "last_name", :string, {:limit=>16, :null=>false, :after=>"first_name"})
156
+ add_column("employees", "gender", :string, {:limit=>1, :null=>false, :after=>"last_name"})
157
+ add_column("employees", "hire_date", :date, {:null=>false, :after=>"gender"})
158
+ RUBY
159
+ }
144
160
  end
145
161
  end
@@ -85,7 +85,19 @@ describe 'Ridgepole::Client#diff -> migrate' do
85
85
  expect(delta.differ?).to be_true
86
86
  expect(subject.dump).to eq actual_dsl.undent.strip
87
87
  delta.migrate
88
- expect(subject.dump).to eq expected_dsl.undent.strip
88
+ expect(subject.dump.each_line.select {|i| i !~ /\A\Z/ }.join).to eq expected_dsl.undent.strip.each_line.select {|i| i !~ /\A\Z/ }.join
89
+ }
90
+
91
+ it {
92
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
93
+ expect(delta.differ?).to be_true
94
+ expect(delta.script).to eq (<<-RUBY).undent.strip
95
+ add_index("clubs", ["name"], {:name=>"idx_name", :unique=>true, :using=>:btree})
96
+
97
+ add_index("employee_clubs", ["emp_no", "club_id"], {:name=>"idx_emp_no_club_id", :using=>:btree})
98
+
99
+ add_index("titles", ["emp_no"], {:name=>"emp_no", :using=>:btree})
100
+ RUBY
89
101
  }
90
102
  end
91
103
  end
@@ -0,0 +1,116 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'when drop table' do
3
+ let(:dsl) {
4
+ <<-RUBY
5
+ create_table "clubs", force: true do |t|
6
+ t.string "name", default: "", null: false
7
+ end
8
+
9
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
10
+
11
+ create_table "departments", primary_key: "dept_no", force: true do |t|
12
+ t.string "dept_name", limit: 40, null: false
13
+ end
14
+
15
+ add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
16
+
17
+ create_table "dept_emp", id: false, force: true do |t|
18
+ t.integer "emp_no", null: false
19
+ t.string "dept_no", limit: 4, null: false
20
+ t.date "from_date", null: false
21
+ t.date "to_date", null: false
22
+ end
23
+
24
+ add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
25
+ add_index "dept_emp", ["emp_no"], name: "emp_no", using: :btree
26
+
27
+ create_table "dept_manager", id: false, force: true do |t|
28
+ t.string "dept_no", limit: 4, null: false
29
+ t.integer "emp_no", null: false
30
+ t.date "from_date", null: false
31
+ t.date "to_date", null: false
32
+ end
33
+
34
+ add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
35
+ add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
36
+
37
+ create_table "employee_clubs", force: true do |t|
38
+ t.integer "emp_no", unsigned: true, null: false
39
+ t.integer "club_id", unsigned: true, null: false
40
+ end
41
+
42
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
43
+
44
+ create_table "employees", primary_key: "emp_no", force: true do |t|
45
+ t.date "birth_date", null: false
46
+ t.string "first_name", limit: 14, null: false
47
+ t.string "last_name", limit: 16, null: false
48
+ t.string "gender", limit: 1, null: false
49
+ t.date "hire_date", null: false
50
+ end
51
+
52
+ create_table "salaries", id: false, force: true do |t|
53
+ t.integer "emp_no", null: false
54
+ t.integer "salary", null: false
55
+ t.date "from_date", null: false
56
+ t.date "to_date", null: false
57
+ end
58
+
59
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
60
+
61
+ create_table "titles", id: false, force: true do |t|
62
+ t.integer "emp_no", null: false
63
+ t.string "title", limit: 50, null: false
64
+ t.date "from_date", null: false
65
+ t.date "to_date"
66
+ end
67
+
68
+ add_index "titles", ["emp_no"], name: "emp_no", using: :btree
69
+ RUBY
70
+ }
71
+
72
+ let(:actual_dsl) { dsl }
73
+
74
+ let(:expected_dsl) {
75
+ dsl.delete_create_table('clubs')
76
+ .delete_create_table('employee_clubs')
77
+ .delete_create_table('employees')
78
+ }
79
+
80
+ before { subject.diff(actual_dsl).migrate }
81
+ subject { client }
82
+
83
+ it {
84
+ delta = subject.diff(expected_dsl)
85
+ expect(delta.differ?).to be_true
86
+ expect(subject.dump).to eq actual_dsl.undent.strip
87
+ delta.migrate
88
+ expect(subject.dump.each_line.select {|i| i !~ /\A\Z/ }.join).to eq expected_dsl.undent.strip.each_line.select {|i| i !~ /\A\Z/ }.join
89
+ }
90
+
91
+ it {
92
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
93
+ expect(delta.differ?).to be_true
94
+ expect(delta.script).to eq (<<-RUBY).undent.strip
95
+ create_table("clubs", {}) do |t|
96
+ t.string("name", {:default=>"", :null=>false})
97
+ end
98
+ add_index("clubs", ["name"], {:name=>"idx_name", :unique=>true, :using=>:btree})
99
+
100
+ create_table("employee_clubs", {}) do |t|
101
+ t.integer("emp_no", {:unsigned=>true, :null=>false})
102
+ t.integer("club_id", {:unsigned=>true, :null=>false})
103
+ end
104
+ add_index("employee_clubs", ["emp_no", "club_id"], {:name=>"idx_emp_no_club_id", :using=>:btree})
105
+
106
+ create_table("employees", {:primary_key=>"emp_no"}) do |t|
107
+ t.date("birth_date", {:null=>false})
108
+ t.string("first_name", {:limit=>14, :null=>false})
109
+ t.string("last_name", {:limit=>16, :null=>false})
110
+ t.string("gender", {:limit=>1, :null=>false})
111
+ t.date("hire_date", {:null=>false})
112
+ end
113
+ RUBY
114
+ }
115
+ end
116
+ end
@@ -79,5 +79,27 @@ describe 'Ridgepole::Client#diff -> migrate' do
79
79
  delta.migrate
80
80
  expect(subject.dump).to eq expected_dsl.undent.strip
81
81
  }
82
+
83
+ it {
84
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
85
+ expect(delta.differ?).to be_true
86
+ expect(delta.script).to eq (<<-RUBY).undent.strip
87
+ drop_table("clubs")
88
+
89
+ drop_table("departments")
90
+
91
+ drop_table("dept_emp")
92
+
93
+ drop_table("dept_manager")
94
+
95
+ drop_table("employee_clubs")
96
+
97
+ drop_table("employees")
98
+
99
+ drop_table("salaries")
100
+
101
+ drop_table("titles")
102
+ RUBY
103
+ }
82
104
  end
83
105
  end
@@ -153,5 +153,10 @@ describe 'Ridgepole::Client#diff -> migrate' do
153
153
  # `clubs` table is not deleted
154
154
  expect(subject.dump).to eq expected_dsl.undent.strip
155
155
  }
156
+
157
+ it {
158
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, merge: true, reverse: true)
159
+ expect(delta.differ?).to be_false
160
+ }
156
161
  end
157
162
  end
@@ -148,6 +148,18 @@ describe 'Ridgepole::Client#diff -> migrate' do
148
148
  delta.migrate
149
149
  expect(subject.dump).to eq expected_dsl.undent.strip.gsub(/\s*,\s*rename_from:.*$/, '')
150
150
  }
151
+
152
+ it {
153
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
154
+ expect(delta.differ?).to be_true
155
+ expect(delta.script).to eq (<<-RUBY).undent.strip
156
+ rename_column("dept_emp", "from_date2", "from_date")
157
+
158
+ rename_column("dept_manager", "to_date2", "to_date")
159
+
160
+ rename_column("employees", "gender2", "gender")
161
+ RUBY
162
+ }
151
163
  end
152
164
 
153
165
  context 'when rename column (not found)' do
@@ -148,6 +148,14 @@ describe 'Ridgepole::Client#diff -> migrate' do
148
148
  delta.migrate
149
149
  expect(subject.dump).to eq expected_dsl.undent.strip.gsub(/, rename_from: 'employees'/, '')
150
150
  }
151
+
152
+ it {
153
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
154
+ expect(delta.differ?).to be_true
155
+ expect(delta.script).to eq (<<-RUBY).undent.strip
156
+ rename_table("employees2", "employees")
157
+ RUBY
158
+ }
151
159
  end
152
160
 
153
161
  context 'when rename table (not found)' do
@@ -0,0 +1,155 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'when with ignore tables option (same)' do
3
+ let(:current_schema) {
4
+ <<-RUBY
5
+ create_table "employees", primary_key: "emp_no", force: true do |t|
6
+ t.date "birth_date", null: false
7
+ t.string "first_name", limit: 14, null: false
8
+ t.string "last_name", limit: 16, null: false
9
+ t.string "gender", limit: 1, null: false
10
+ t.date "hire_date", null: false
11
+ end
12
+
13
+ create_table "salaries", id: false, force: true do |t|
14
+ t.integer "emp_no", null: false
15
+ t.integer "salary", null: false
16
+ t.date "from_date", null: false
17
+ t.date "to_date", null: false
18
+ end
19
+
20
+ add_index "salaries", ["salary"], name: "emp_no", using: :btree
21
+ RUBY
22
+ }
23
+
24
+ let(:dsl) {
25
+ <<-RUBY
26
+ create_table "employees", primary_key: "emp_no", force: true do |t|
27
+ t.date "birth_date", null: false
28
+ t.string "first_name", limit: 14, null: false
29
+ t.string "last_name", limit: 16, null: false
30
+ t.string "gender", limit: 1, null: false
31
+ t.date "hire_date", null: false
32
+ end
33
+
34
+ create_table "salaries", id: false, force: true do |t|
35
+ t.integer "emp_no", null: false
36
+ t.integer "salary", null: false
37
+ t.date "from_date", null: false
38
+ t.date "to_date", null: false
39
+ end
40
+
41
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
42
+ RUBY
43
+ }
44
+
45
+ let(:expected_dsl) {
46
+ <<-RUBY
47
+ create_table "employees", primary_key: "emp_no", force: true do |t|
48
+ t.date "birth_date", null: false
49
+ t.string "first_name", limit: 14, null: false
50
+ t.string "last_name", limit: 16, null: false
51
+ t.string "gender", limit: 1, null: false
52
+ t.date "hire_date", null: false
53
+ end
54
+ RUBY
55
+ }
56
+
57
+ before { subject.diff(current_schema).migrate }
58
+ subject { client(ignore_tables: [/^salaries$/] ) }
59
+
60
+ it {
61
+ delta = subject.diff(dsl)
62
+ expect(delta.differ?).to be_false
63
+ expect(subject.dump).to eq expected_dsl.undent.strip
64
+ delta.migrate
65
+ expect(subject.dump).to eq expected_dsl.undent.strip
66
+ }
67
+ end
68
+
69
+ context 'when with ignore tables option (differ)' do
70
+ let(:current_schema) {
71
+ <<-RUBY
72
+ create_table "employees", primary_key: "emp_no", force: true do |t|
73
+ t.date "birth_date", null: false
74
+ t.string "first_name", limit: 14, null: false
75
+ t.string "last_name", limit: 16, null: false
76
+ t.string "gender", limit: 1, null: false
77
+ t.date "hire_date", null: false
78
+ end
79
+
80
+ create_table "salaries", id: false, force: true do |t|
81
+ t.integer "emp_no", null: false
82
+ t.integer "salary", null: false
83
+ t.date "from_date", null: false
84
+ t.date "to_date", null: false
85
+ end
86
+
87
+ add_index "salaries", ["salary"], name: "emp_no", using: :btree
88
+ RUBY
89
+ }
90
+
91
+ let(:dsl) {
92
+ <<-RUBY
93
+ create_table "employees", primary_key: "emp_no", force: true do |t|
94
+ t.date "birth_date", null: false
95
+ t.string "first_name", limit: 15, null: false
96
+ t.string "last_name", limit: 16, null: false
97
+ t.string "gender", limit: 1, null: false
98
+ t.date "hire_date", null: false
99
+ end
100
+
101
+ create_table "salaries", id: false, force: true do |t|
102
+ t.integer "emp_no", null: false
103
+ t.integer "salary", null: false
104
+ t.date "from_date", null: false
105
+ t.date "to_date", null: false
106
+ end
107
+
108
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
109
+ RUBY
110
+ }
111
+
112
+ let(:before_dsl) {
113
+ <<-RUBY
114
+ create_table "employees", primary_key: "emp_no", force: true do |t|
115
+ t.date "birth_date", null: false
116
+ t.string "first_name", limit: 14, null: false
117
+ t.string "last_name", limit: 16, null: false
118
+ t.string "gender", limit: 1, null: false
119
+ t.date "hire_date", null: false
120
+ end
121
+ RUBY
122
+ }
123
+
124
+ let(:after_dsl) {
125
+ <<-RUBY
126
+ create_table "employees", primary_key: "emp_no", force: true do |t|
127
+ t.date "birth_date", null: false
128
+ t.string "first_name", limit: 15, null: false
129
+ t.string "last_name", limit: 16, null: false
130
+ t.string "gender", limit: 1, null: false
131
+ t.date "hire_date", null: false
132
+ end
133
+ RUBY
134
+ }
135
+
136
+ before { subject.diff(current_schema).migrate }
137
+ subject { client(ignore_tables: [/^salaries$/] ) }
138
+
139
+ it {
140
+ delta = subject.diff(dsl)
141
+ expect(delta.differ?).to be_true
142
+ expect(subject.dump).to eq before_dsl.undent.strip
143
+ delta.migrate
144
+ expect(subject.dump).to eq after_dsl.undent.strip
145
+ }
146
+
147
+ it {
148
+ delta = Ridgepole::Client.diff(current_schema, dsl, ignore_tables: [/^salaries$/], reverse: true)
149
+ expect(delta.differ?).to be_true
150
+ expect(delta.script).to eq (<<-RUBY).undent.strip
151
+ change_column("employees", "first_name", :string, {:limit=>14, :null=>false, :unsigned=>false})
152
+ RUBY
153
+ }
154
+ end
155
+ end
@@ -0,0 +1,155 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'when with tables option (same)' do
3
+ let(:current_schema) {
4
+ <<-RUBY
5
+ create_table "employees", primary_key: "emp_no", force: true do |t|
6
+ t.date "birth_date", null: false
7
+ t.string "first_name", limit: 14, null: false
8
+ t.string "last_name", limit: 16, null: false
9
+ t.string "gender", limit: 1, null: false
10
+ t.date "hire_date", null: false
11
+ end
12
+
13
+ create_table "salaries", id: false, force: true do |t|
14
+ t.integer "emp_no", null: false
15
+ t.integer "salary", null: false
16
+ t.date "from_date", null: false
17
+ t.date "to_date", null: false
18
+ end
19
+
20
+ add_index "salaries", ["salary"], name: "emp_no", using: :btree
21
+ RUBY
22
+ }
23
+
24
+ let(:dsl) {
25
+ <<-RUBY
26
+ create_table "employees", primary_key: "emp_no", force: true do |t|
27
+ t.date "birth_date", null: false
28
+ t.string "first_name", limit: 14, null: false
29
+ t.string "last_name", limit: 16, null: false
30
+ t.string "gender", limit: 1, null: false
31
+ t.date "hire_date", null: false
32
+ end
33
+
34
+ create_table "salaries", id: false, force: true do |t|
35
+ t.integer "emp_no", null: false
36
+ t.integer "salary", null: false
37
+ t.date "from_date", null: false
38
+ t.date "to_date", null: false
39
+ end
40
+
41
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
42
+ RUBY
43
+ }
44
+
45
+ let(:expected_dsl) {
46
+ <<-RUBY
47
+ create_table "employees", primary_key: "emp_no", force: true do |t|
48
+ t.date "birth_date", null: false
49
+ t.string "first_name", limit: 14, null: false
50
+ t.string "last_name", limit: 16, null: false
51
+ t.string "gender", limit: 1, null: false
52
+ t.date "hire_date", null: false
53
+ end
54
+ RUBY
55
+ }
56
+
57
+ before { subject.diff(current_schema).migrate }
58
+ subject { client(tables: ['employees'] ) }
59
+
60
+ it {
61
+ delta = subject.diff(dsl)
62
+ expect(delta.differ?).to be_false
63
+ expect(subject.dump).to eq expected_dsl.undent.strip
64
+ delta.migrate
65
+ expect(subject.dump).to eq expected_dsl.undent.strip
66
+ }
67
+ end
68
+
69
+ context 'when with tables option (differ)' do
70
+ let(:current_schema) {
71
+ <<-RUBY
72
+ create_table "employees", primary_key: "emp_no", force: true do |t|
73
+ t.date "birth_date", null: false
74
+ t.string "first_name", limit: 14, null: false
75
+ t.string "last_name", limit: 16, null: false
76
+ t.string "gender", limit: 1, null: false
77
+ t.date "hire_date", null: false
78
+ end
79
+
80
+ create_table "salaries", id: false, force: true do |t|
81
+ t.integer "emp_no", null: false
82
+ t.integer "salary", null: false
83
+ t.date "from_date", null: false
84
+ t.date "to_date", null: false
85
+ end
86
+
87
+ add_index "salaries", ["salary"], name: "emp_no", using: :btree
88
+ RUBY
89
+ }
90
+
91
+ let(:dsl) {
92
+ <<-RUBY
93
+ create_table "employees", primary_key: "emp_no", force: true do |t|
94
+ t.date "birth_date", null: false
95
+ t.string "first_name", limit: 15, null: false
96
+ t.string "last_name", limit: 16, null: false
97
+ t.string "gender", limit: 1, null: false
98
+ t.date "hire_date", null: false
99
+ end
100
+
101
+ create_table "salaries", id: false, force: true do |t|
102
+ t.integer "emp_no", null: false
103
+ t.integer "salary", null: false
104
+ t.date "from_date", null: false
105
+ t.date "to_date", null: false
106
+ end
107
+
108
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
109
+ RUBY
110
+ }
111
+
112
+ let(:before_dsl) {
113
+ <<-RUBY
114
+ create_table "employees", primary_key: "emp_no", force: true do |t|
115
+ t.date "birth_date", null: false
116
+ t.string "first_name", limit: 14, null: false
117
+ t.string "last_name", limit: 16, null: false
118
+ t.string "gender", limit: 1, null: false
119
+ t.date "hire_date", null: false
120
+ end
121
+ RUBY
122
+ }
123
+
124
+ let(:after_dsl) {
125
+ <<-RUBY
126
+ create_table "employees", primary_key: "emp_no", force: true do |t|
127
+ t.date "birth_date", null: false
128
+ t.string "first_name", limit: 15, null: false
129
+ t.string "last_name", limit: 16, null: false
130
+ t.string "gender", limit: 1, null: false
131
+ t.date "hire_date", null: false
132
+ end
133
+ RUBY
134
+ }
135
+
136
+ before { subject.diff(current_schema).migrate }
137
+ subject { client(tables: ['employees']) }
138
+
139
+ it {
140
+ delta = subject.diff(dsl)
141
+ expect(delta.differ?).to be_true
142
+ expect(subject.dump).to eq before_dsl.undent.strip
143
+ delta.migrate
144
+ expect(subject.dump).to eq after_dsl.undent.strip
145
+ }
146
+
147
+ it {
148
+ delta = Ridgepole::Client.diff(current_schema, dsl, tables: ['employees'], reverse: true)
149
+ expect(delta.differ?).to be_true
150
+ expect(delta.script).to eq (<<-RUBY).undent.strip
151
+ change_column("employees", "first_name", :string, {:limit=>14, :null=>false, :unsigned=>false})
152
+ RUBY
153
+ }
154
+ end
155
+ end
data/spec/spec_helper.rb CHANGED
@@ -22,13 +22,17 @@ def restore_tables
22
22
  end
23
23
 
24
24
  def client(options = {}, config = {})
25
- config = {
26
- adapter: 'mysql2',
27
- database: 'ridgepole_test',
28
- }.merge(config)
25
+ config = conn_spec(config)
29
26
 
30
27
  options = {
31
28
  }.merge(options)
32
29
 
33
30
  Ridgepole::Client.new(config, options)
34
- end
31
+ end
32
+
33
+ def conn_spec(config = {})
34
+ {
35
+ adapter: 'mysql2',
36
+ database: 'ridgepole_test',
37
+ }.merge(config)
38
+ 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.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-01 00:00:00.000000000 Z
11
+ date: 2014-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -122,7 +122,9 @@ files:
122
122
  - lib/ridgepole/string_ext.rb
123
123
  - lib/ridgepole/version.rb
124
124
  - ridgepole.gemspec
125
- - spec/dump/dump_disable_unsigned_spec.rb
125
+ - spec/0_diff/dump_disable_unsigned_spec.rb
126
+ - spec/diff/diff_spec.rb
127
+ - spec/dump/dump_class_method_spec.rb
126
128
  - spec/dump/dump_some_tables_spec.rb
127
129
  - spec/dump/dump_spec.rb
128
130
  - spec/migrate/migrate_add_column_spec.rb
@@ -131,8 +133,8 @@ files:
131
133
  - spec/migrate/migrate_create_index_spec.rb
132
134
  - spec/migrate/migrate_create_table_spec.rb
133
135
  - spec/migrate/migrate_drop_column_spec.rb
134
- - spec/migrate/migrate_drop_index.rb
135
- - spec/migrate/migrate_drop_table.rb
136
+ - spec/migrate/migrate_drop_index_spec.rb
137
+ - spec/migrate/migrate_drop_table_spec.rb
136
138
  - spec/migrate/migrate_duplicate_index_spec.rb
137
139
  - spec/migrate/migrate_duplicate_table_spec.rb
138
140
  - spec/migrate/migrate_empty_spec.rb
@@ -142,6 +144,8 @@ files:
142
144
  - spec/migrate/migrate_same_default_null_spec.rb
143
145
  - spec/migrate/migrate_same_default_unsigned_spec.rb
144
146
  - spec/migrate/migrate_same_spec.rb
147
+ - spec/migrate/migrate_with_ignore_tables_spec.rb
148
+ - spec/migrate/migrate_with_tables_spec.rb
145
149
  - spec/ridgepole_test_database.sql
146
150
  - spec/ridgepole_test_tables.sql
147
151
  - spec/spec_helper.rb
@@ -171,7 +175,9 @@ signing_key:
171
175
  specification_version: 4
172
176
  summary: Ridgepole is a tool to DB schema.
173
177
  test_files:
174
- - spec/dump/dump_disable_unsigned_spec.rb
178
+ - spec/0_diff/dump_disable_unsigned_spec.rb
179
+ - spec/diff/diff_spec.rb
180
+ - spec/dump/dump_class_method_spec.rb
175
181
  - spec/dump/dump_some_tables_spec.rb
176
182
  - spec/dump/dump_spec.rb
177
183
  - spec/migrate/migrate_add_column_spec.rb
@@ -180,8 +186,8 @@ test_files:
180
186
  - spec/migrate/migrate_create_index_spec.rb
181
187
  - spec/migrate/migrate_create_table_spec.rb
182
188
  - spec/migrate/migrate_drop_column_spec.rb
183
- - spec/migrate/migrate_drop_index.rb
184
- - spec/migrate/migrate_drop_table.rb
189
+ - spec/migrate/migrate_drop_index_spec.rb
190
+ - spec/migrate/migrate_drop_table_spec.rb
185
191
  - spec/migrate/migrate_duplicate_index_spec.rb
186
192
  - spec/migrate/migrate_duplicate_table_spec.rb
187
193
  - spec/migrate/migrate_empty_spec.rb
@@ -191,6 +197,8 @@ test_files:
191
197
  - spec/migrate/migrate_same_default_null_spec.rb
192
198
  - spec/migrate/migrate_same_default_unsigned_spec.rb
193
199
  - spec/migrate/migrate_same_spec.rb
200
+ - spec/migrate/migrate_with_ignore_tables_spec.rb
201
+ - spec/migrate/migrate_with_tables_spec.rb
194
202
  - spec/ridgepole_test_database.sql
195
203
  - spec/ridgepole_test_tables.sql
196
204
  - spec/spec_helper.rb