ridgepole 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml 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