ridgepole 0.1.9 → 0.2.0

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: 988e497c3cb8157b97776d601a5f474c3bba8bc2
4
- data.tar.gz: 55e21555cd9fe613434c51534585a412c2bd54ef
3
+ metadata.gz: 8b78450efbe8c650197b9515c90abced3f6a6575
4
+ data.tar.gz: 4e78c9e6a877414d75d58735ad8ebd2c0b2d090f
5
5
  SHA512:
6
- metadata.gz: 7c593d58d748470b551729a6d17cd83b727cce3a12c106fd56f6a705dc2f94ff24ddc31488f8f10681d21525124da2ffb66ae794f3fed7269199ba9f1c5384cb
7
- data.tar.gz: 1ccbed73bacbbd1ff57cdbbf871f57ae540704ecafce402b0b95bc616b02c455a95a1ecb6cc07f0ab1c7142353764ce003cc69a6ff5bcad8aae2e6692b5c7b7d
6
+ metadata.gz: 8be2793d3f8bc2f8083c5c50805dc180cec3e0ce451203d74f678f601aa2f24c5225d0fe0b81d142ba87bf40d879f9c54cbe7547c2af14612ec9ea4d451a3459
7
+ data.tar.gz: f8e0160bb8ade13201edf404c30278705ec9d8fad1b2d3cbd6390b8739db82b6754ef6eda4ca281da7a6196b847d931299961f1a2b972754f736c8b1ec1f36b4
data/README.md CHANGED
@@ -34,3 +34,9 @@ ridgepole --apply
34
34
  ## Demo
35
35
 
36
36
  * [asciinema.org/a/9349](https://asciinema.org/a/9349)
37
+
38
+ ## Example project
39
+
40
+ * https://github.com/winebarrel/ridgepole-example
41
+ * https://github.com/winebarrel/ridgepole-example/pull/1
42
+ * https://github.com/winebarrel/ridgepole-example/pull/2
@@ -61,7 +61,7 @@ class Ridgepole::Diff
61
61
  end
62
62
 
63
63
  def scan_options_change(from, to, table_delta)
64
- # XXX: Warn differences of options
64
+ Ridgepole::Logger.instance.warn('[WARNING] Table options cannot be changed')
65
65
  end
66
66
 
67
67
  def scan_definition_change(from, to, table_delta)
@@ -51,20 +51,28 @@ class Ridgepole::DSLParser
51
51
  end
52
52
 
53
53
  def create_table(table_name, options = {})
54
- # XXX: Add exist check
55
54
  table_definition = TableDefinition.new
56
55
  yield(table_definition)
57
56
  @__definition[table_name] ||= {}
57
+
58
+ if @__definition[table_name][:definition]
59
+ raise "Table `#{table_name}` already defined"
60
+ end
61
+
58
62
  @__definition[table_name][:definition] = table_definition.__definition
59
63
  options.delete(:force)
60
64
  @__definition[table_name][:options] = options
61
65
  end
62
66
 
63
67
  def add_index(table_name, column_name, options = {})
64
- # XXX: Add exist check
65
68
  @__definition[table_name] ||= {}
66
69
  @__definition[table_name][:indices] ||= {}
67
70
  idx = options[:name] || column_name
71
+
72
+ if @__definition[table_name][:indices][idx]
73
+ raise "Index `#{table_name}(#{idx})` already defined"
74
+ end
75
+
68
76
  @__definition[table_name][:indices][idx] = {
69
77
  :column_name => column_name,
70
78
  :options => options,
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.1.9'
2
+ VERSION = '0.2.0'
3
3
  end
data/ridgepole.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ['sugawara@cookpad.com']
11
11
  spec.summary = %q{Ridgepole is a tool to DB schema.}
12
12
  spec.description = %q{Ridgepole is a tool to DB schema. It defines DB schema using Rails DSL, and updates DB schema according to DSL.}
13
- spec.homepage = 'https://bitbucket.org/winebarrel/ridgepole'
13
+ spec.homepage = 'https://github.com/winebarrel/ridgepole'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -0,0 +1,40 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'when change column' do
3
+ let(:actual_dsl) {
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
+ RUBY
14
+ }
15
+
16
+ let(:expected_dsl) {
17
+ <<-RUBY
18
+ create_table "employees", primary_key: "emp_no2", force: true do |t|
19
+ t.date "birth_date", null: false
20
+ t.string "first_name", limit: 14, null: false
21
+ t.string "last_name", limit: 16, null: false
22
+ t.string "gender", limit: 1, null: false
23
+ t.date "hire_date", null: false
24
+ end
25
+ RUBY
26
+ }
27
+
28
+ before { subject.diff(actual_dsl).migrate }
29
+ subject { client }
30
+
31
+ it {
32
+ expect(Ridgepole::Logger.instance).to receive(:warn).with('[WARNING] Table options cannot be changed')
33
+ delta = subject.diff(expected_dsl)
34
+ expect(delta.differ?).to be_false
35
+ expect(subject.dump).to eq actual_dsl.undent.strip
36
+ delta.migrate
37
+ expect(subject.dump).to eq actual_dsl.undent.strip
38
+ }
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'when index already defined' do
3
+ let(:dsl) {
4
+ <<-RUBY
5
+ create_table "salaries", id: false, force: true do |t|
6
+ t.integer "emp_no", null: false
7
+ t.integer "salary", null: false
8
+ t.date "from_date", null: false
9
+ t.date "to_date", null: false
10
+ end
11
+
12
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
13
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
14
+ RUBY
15
+ }
16
+
17
+ subject { client }
18
+
19
+ it {
20
+ expect {
21
+ subject.diff(dsl)
22
+ }.to raise_error('Index `salaries(emp_no)` already defined')
23
+ }
24
+ end
25
+ end
@@ -0,0 +1,35 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'when table already defined' do
3
+ let(:dsl) {
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
+ t.integer "age", unsigned: true, null: false
12
+ t.date "updated_at"
13
+ end
14
+
15
+ create_table "employees", primary_key: "emp_no", force: true do |t|
16
+ t.date "birth_date", null: false
17
+ t.string "first_name", limit: 14, null: false
18
+ t.string "last_name", limit: 16, null: false
19
+ t.string "gender", limit: 1, null: false
20
+ t.date "hire_date", null: false
21
+ t.integer "age", unsigned: true, null: false
22
+ t.date "updated_at"
23
+ end
24
+ RUBY
25
+ }
26
+
27
+ subject { client }
28
+
29
+ it {
30
+ expect {
31
+ subject.diff(dsl)
32
+ }.to raise_error('Table `employees` already defined')
33
+ }
34
+ end
35
+ 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.1.9
4
+ version: 0.2.0
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-06-29 00:00:00.000000000 Z
11
+ date: 2014-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -127,11 +127,14 @@ files:
127
127
  - spec/dump/dump_spec.rb
128
128
  - spec/migrate/migrate_add_column_spec.rb
129
129
  - spec/migrate/migrate_change_column_spec.rb
130
+ - spec/migrate/migrate_change_table_option_spec.rb
130
131
  - spec/migrate/migrate_create_index_spec.rb
131
132
  - spec/migrate/migrate_create_table_spec.rb
132
133
  - spec/migrate/migrate_drop_column_spec.rb
133
134
  - spec/migrate/migrate_drop_index.rb
134
135
  - spec/migrate/migrate_drop_table.rb
136
+ - spec/migrate/migrate_duplicate_index_spec.rb
137
+ - spec/migrate/migrate_duplicate_table_spec.rb
135
138
  - spec/migrate/migrate_empty_spec.rb
136
139
  - spec/migrate/migrate_merge_mode_spec.rb
137
140
  - spec/migrate/migrate_rename_column_spec.rb
@@ -143,7 +146,7 @@ files:
143
146
  - spec/ridgepole_test_tables.sql
144
147
  - spec/spec_helper.rb
145
148
  - spec/string_ext.rb
146
- homepage: https://bitbucket.org/winebarrel/ridgepole
149
+ homepage: https://github.com/winebarrel/ridgepole
147
150
  licenses:
148
151
  - MIT
149
152
  metadata: {}
@@ -173,11 +176,14 @@ test_files:
173
176
  - spec/dump/dump_spec.rb
174
177
  - spec/migrate/migrate_add_column_spec.rb
175
178
  - spec/migrate/migrate_change_column_spec.rb
179
+ - spec/migrate/migrate_change_table_option_spec.rb
176
180
  - spec/migrate/migrate_create_index_spec.rb
177
181
  - spec/migrate/migrate_create_table_spec.rb
178
182
  - spec/migrate/migrate_drop_column_spec.rb
179
183
  - spec/migrate/migrate_drop_index.rb
180
184
  - spec/migrate/migrate_drop_table.rb
185
+ - spec/migrate/migrate_duplicate_index_spec.rb
186
+ - spec/migrate/migrate_duplicate_table_spec.rb
181
187
  - spec/migrate/migrate_empty_spec.rb
182
188
  - spec/migrate/migrate_merge_mode_spec.rb
183
189
  - spec/migrate/migrate_rename_column_spec.rb