ridgepole 0.4.2 → 0.4.3

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: a09898d122a3138706ad9e835a0e0941a56749be
4
- data.tar.gz: e0bd6aa6ba825488ef7e53fcd68db3267dcde79a
3
+ metadata.gz: 03b066ad5d7807bd60303e0433ee67703aff903e
4
+ data.tar.gz: fc2f852d90be9b0c24acf521d0fc5c62dea4f9c0
5
5
  SHA512:
6
- metadata.gz: ecf91300412d185e49794b4a894180d70747783b88a641856d3af20e35b668aa24201c4a5188cbeb68e2f1c83177dccf19eddafb66a4ad61f807e5f688ac569c
7
- data.tar.gz: 9f83de31e8549e7956b79b0c3033208354a4e823901384406ca171295f33a5ea98f8c9f4f224af917a4854ae395d05a6112d81b00aac3267b88ac6266f41bfff
6
+ metadata.gz: 72e7998e9e154814fae664cfa94be66b33750919729c810c126e3fea9659599f9cf68c13071661ca1d047a4e66030c14f829b77444f78ec06fd8ba4d4090b750
7
+ data.tar.gz: 40f62f7da32cf5c8a22c53a71a1725e87728f571021e10286acb5f959f0f4a970a5a7133d82d7226f81e2196c4f7a2f73653fc88b74a7eabbb4df5246a40c59b
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ridgepole
2
2
 
3
- Ridgepole is a tool to DB schema.
3
+ Ridgepole is a tool to manage DB schema.
4
4
 
5
5
  It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.html#types-of-schema-dumps), and updates DB schema according to DSL.
6
6
  (like Chef/Puppet)
@@ -177,7 +177,21 @@ class Ridgepole::Diff
177
177
  indices_delta = {}
178
178
 
179
179
  to.each do |index_name, to_attrs|
180
- if (from_attrs = from.delete(index_name))
180
+ if index_name.kind_of?(Array)
181
+ from_index_name, from_attrs = from.find {|name, attrs| attrs[:column_name] == index_name }
182
+
183
+ if from_attrs
184
+ from.delete(from_index_name)
185
+ from_attrs[:options].delete(:name)
186
+ end
187
+ else
188
+ from_attrs = from.delete(index_name)
189
+ end
190
+
191
+ if from_attrs
192
+ normalize_index_options!(from_attrs[:options])
193
+ normalize_index_options!(to_attrs[:options])
194
+
181
195
  if from_attrs != to_attrs
182
196
  indices_delta[:add] ||= {}
183
197
  indices_delta[:add][index_name] = to_attrs
@@ -222,8 +236,14 @@ class Ridgepole::Diff
222
236
  def normalize_column_options!(opts)
223
237
  opts[:null] = true unless opts.has_key?(:null)
224
238
 
239
+ # XXX: MySQL only?
225
240
  unless @options[:disable_mysql_unsigned]
226
241
  opts[:unsigned] = false unless opts.has_key?(:unsigned)
227
242
  end
228
243
  end
244
+
245
+ def normalize_index_options!(opts)
246
+ # XXX: MySQL only?
247
+ opts[:using] = :btree unless opts.has_key?(:using)
248
+ end
229
249
  end
@@ -39,7 +39,7 @@ class Ridgepole::DSLParser
39
39
  end
40
40
 
41
41
  def timestamps(*args)
42
- options = { :null => false }.merge(args.extract_options!)
42
+ options = {:null => false}.merge(args.extract_options!)
43
43
  column(:created_at, :datetime, options.dup)
44
44
  column(:updated_at, :datetime, options.dup)
45
45
  end
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.4.2'
2
+ VERSION = '0.4.3'
3
3
  end
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Ridgepole::VERSION
9
9
  spec.authors = ['Genki Sugawara']
10
10
  spec.email = ['sugawara@cookpad.com']
11
- spec.summary = %q{Ridgepole is a tool to DB schema.}
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.}
11
+ spec.summary = %q{Ridgepole is a tool to manage DB schema.}
12
+ spec.description = %q{Ridgepole is a tool to manage DB schema. It defines DB schema using Rails DSL, and updates DB schema according to DSL.}
13
13
  spec.homepage = 'https://github.com/winebarrel/ridgepole'
14
14
  spec.license = 'MIT'
15
15
 
@@ -0,0 +1,125 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'when change index without using (no change)' do
3
+ let(:actual_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
+ RUBY
14
+ }
15
+
16
+ let(:expected_dsl) {
17
+ <<-RUBY
18
+ create_table "salaries", id: false, force: true do |t|
19
+ t.integer "emp_no", null: false
20
+ t.integer "salary", null: false
21
+ t.date "from_date", null: false
22
+ t.date "to_date", null: false
23
+ end
24
+
25
+ add_index "salaries", ["emp_no"], name: "emp_no"
26
+ RUBY
27
+ }
28
+
29
+ before { subject.diff(actual_dsl).migrate }
30
+ subject { client }
31
+
32
+ it {
33
+ delta = subject.diff(expected_dsl)
34
+ expect(delta.differ?).to be_falsey
35
+ }
36
+ end
37
+
38
+ context 'when change index without name (no change)' do
39
+ let(:actual_dsl) {
40
+ <<-RUBY
41
+ create_table "salaries", id: false, force: true do |t|
42
+ t.integer "emp_no", null: false
43
+ t.integer "salary", null: false
44
+ t.date "from_date", null: false
45
+ t.date "to_date", null: false
46
+ end
47
+
48
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
49
+ RUBY
50
+ }
51
+
52
+ let(:expected_dsl) {
53
+ <<-RUBY
54
+ create_table "salaries", id: false, force: true do |t|
55
+ t.integer "emp_no", null: false
56
+ t.integer "salary", null: false
57
+ t.date "from_date", null: false
58
+ t.date "to_date", null: false
59
+ end
60
+
61
+ add_index "salaries", ["emp_no"], using: :btree
62
+ RUBY
63
+ }
64
+
65
+ before { subject.diff(actual_dsl).migrate }
66
+ subject { client }
67
+
68
+ it {
69
+ delta = subject.diff(expected_dsl)
70
+ expect(delta.differ?).to be_falsey
71
+ }
72
+ end
73
+
74
+ context 'when change index without name (change)' do
75
+ let(:actual_dsl) {
76
+ <<-RUBY
77
+ create_table "salaries", id: false, force: true do |t|
78
+ t.integer "emp_no", null: false
79
+ t.integer "salary", null: false
80
+ t.date "from_date", null: false
81
+ t.date "to_date", null: false
82
+ end
83
+
84
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
85
+ RUBY
86
+ }
87
+
88
+ let(:dsl) {
89
+ <<-RUBY
90
+ create_table "salaries", id: false, force: true do |t|
91
+ t.integer "emp_no", null: false
92
+ t.integer "salary", null: false
93
+ t.date "from_date", null: false
94
+ t.date "to_date", null: false
95
+ end
96
+
97
+ add_index "salaries", ["salary"], using: :btree
98
+ RUBY
99
+ }
100
+
101
+ let(:expected_dsl) {
102
+ <<-RUBY
103
+ create_table "salaries", id: false, force: true do |t|
104
+ t.integer "emp_no", null: false
105
+ t.integer "salary", null: false
106
+ t.date "from_date", null: false
107
+ t.date "to_date", null: false
108
+ end
109
+
110
+ add_index "salaries", ["salary"], name: "index_salaries_on_salary", using: :btree
111
+ RUBY
112
+ }
113
+
114
+ before { subject.diff(actual_dsl).migrate }
115
+ subject { client }
116
+
117
+ it {
118
+ delta = subject.diff(dsl)
119
+ expect(delta.differ?).to be_truthy
120
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
121
+ delta.migrate
122
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
123
+ }
124
+ end
125
+ 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.4.2
4
+ version: 0.4.3
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-08-28 00:00:00.000000000 Z
11
+ date: 2014-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -94,8 +94,8 @@ dependencies:
94
94
  - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: Ridgepole is a tool to DB schema. It defines DB schema using Rails DSL,
98
- and updates DB schema according to DSL.
97
+ description: Ridgepole is a tool to manage DB schema. It defines DB schema using Rails
98
+ DSL, and updates DB schema according to DSL.
99
99
  email:
100
100
  - sugawara@cookpad.com
101
101
  executables:
@@ -135,6 +135,7 @@ files:
135
135
  - spec/migrate/migrate_change_column3_spec.rb
136
136
  - spec/migrate/migrate_change_column_spec.rb
137
137
  - spec/migrate/migrate_change_index2_spec.rb
138
+ - spec/migrate/migrate_change_index3_spec.rb
138
139
  - spec/migrate/migrate_change_index_spec.rb
139
140
  - spec/migrate/migrate_change_table_option_spec.rb
140
141
  - spec/migrate/migrate_create_index_spec.rb
@@ -188,7 +189,7 @@ rubyforge_project:
188
189
  rubygems_version: 2.4.1
189
190
  signing_key:
190
191
  specification_version: 4
191
- summary: Ridgepole is a tool to DB schema.
192
+ summary: Ridgepole is a tool to manage DB schema.
192
193
  test_files:
193
194
  - spec/0_diff/dump_disable_unsigned_spec.rb
194
195
  - spec/diff/diff_spec.rb
@@ -202,6 +203,7 @@ test_files:
202
203
  - spec/migrate/migrate_change_column3_spec.rb
203
204
  - spec/migrate/migrate_change_column_spec.rb
204
205
  - spec/migrate/migrate_change_index2_spec.rb
206
+ - spec/migrate/migrate_change_index3_spec.rb
205
207
  - spec/migrate/migrate_change_index_spec.rb
206
208
  - spec/migrate/migrate_change_table_option_spec.rb
207
209
  - spec/migrate/migrate_create_index_spec.rb