ridgepole 0.9.0.rc1 → 0.9.4

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
  SHA256:
3
- metadata.gz: 10f8b6443da2ed263c957eb68325c4fa6d96ff3e5b0b8b0c32970c39a70e7fdb
4
- data.tar.gz: f46637323aee71ad24e87c0fed171ecdf96903a0f43bb20aea270db5e454b609
3
+ metadata.gz: 4b1fa89270221dcad6cdfa188a879de277c0ed1ea8672d2d9456b3057fe70ac1
4
+ data.tar.gz: 1d30c79ae7adf620347c70f769a12e0cb01e38fdf799cf6cbe67f952ab014d9c
5
5
  SHA512:
6
- metadata.gz: dbf4ef4b329627688da0d8ae61e3190ab3773c4b6b9e3d46b55b481db5ece42fcba73395f2f2b4980430930479fea27ce039c51892e981b2cf7e55276e36dbac
7
- data.tar.gz: 9d4dd03ace90b791ffd33924204cb785491569a859227db9bd0e18f186e27b716f325663249625bba378608a0e3c3fadedbeb306e9cf03634af19adf010db491
6
+ metadata.gz: 853d1138335b2c697c7f84d1beceae743badacc2891fd05bb8d9349c7b8c10d763516d5d2c6e63d88a7f60d0c0f887270baa03738cc3496409bca6609990097c
7
+ data.tar.gz: f4b38e66c8a5295bdc7241a407b5a2c848a3558d6421a1cbe12520f5cd85aff08154783d353f0fc2d7ce4798f620e31e5b59fc31f2225ec4d52fefc33e8dec14
@@ -29,49 +29,36 @@ jobs:
29
29
  gemfile: gemfiles/activerecord_6.0.gemfile
30
30
  - ruby: 2.4
31
31
  gemfile: gemfiles/activerecord_6.1.gemfile
32
-
32
+ env:
33
+ BUNDLE_GEMFILE: ${{ matrix.gemfile }}
33
34
  steps:
34
35
  - uses: actions/checkout@v2
35
- - uses: actions/setup-ruby@v1
36
+ - uses: ruby/setup-ruby@v1
36
37
  with:
37
38
  ruby-version: ${{ matrix.ruby }}
38
- - uses: actions/cache@v2
39
- with:
40
- path: gemfiles/vendor/bundle
41
- key: ${{ runner.os }}-gems-${{ matrix.ruby }}-${{ matrix.gemfile }}-${{ hashFiles('ridgepole.gemspec', '**/Gemfile', '${{ matrix.gemfile }}') }}
42
- restore-keys: |
43
- ${{ runner.os }}-gems-${{ matrix.ruby }}-${{ matrix.gemfile }}-
44
-
39
+ bundler-cache: true
45
40
  - name: Setup dependencies
46
41
  run: |
47
42
  for i in {1..60}; do docker-compose up -d && break; sleep 1; done
48
-
49
- gem install bundler
50
- bundle config path vendor/bundle
51
- bundle install --jobs 4 --retry 3
52
-
53
43
  # Wait until database servers start
54
- function mysql_ping { mysqladmin -u root -h 127.0.0.1 -P 13316 -ppassword ping; }
55
- function mysql57_ping { mysqladmin -u root -h 127.0.0.1 -P 13317 -ppassword ping; }
44
+ function mysql_ping { mysqladmin -u root -h 127.0.0.1 -P 13316 ping --ssl-mode=DISABLED; }
45
+ function mysql57_ping { mysqladmin -u root -h 127.0.0.1 -P 13317 ping --ssl-mode=DISABLED; }
56
46
  function pg_ping { PGPASSWORD=password pg_isready -U postgres -h 127.0.0.1 -p 15442; }
57
47
  for i in {1..60}; do mysql_ping && break; sleep 1; done
58
48
  for i in {1..60}; do mysql57_ping && break; sleep 1; done
59
49
  for i in {1..60}; do pg_ping && break; sleep 1; done
60
50
  env:
61
- BUNDLE_GEMFILE: ${{ matrix.gemfile }}
62
-
51
+ MYSQL_PWD: password
63
52
  - name: Run tests
64
53
  run: ${{ matrix.env }} bundle exec rake
65
54
  env:
66
55
  BUNDLE_GEMFILE: ${{ matrix.gemfile }}
67
-
68
56
  - name: Coveralls Parallel
69
57
  uses: coverallsapp/github-action@v1.1.2
70
58
  with:
71
59
  github-token: ${{ secrets.GITHUB_TOKEN }}
72
60
  flag-name: run-${{ matrix.ruby }}-${{ matrix.env }}-${{ matrix.gemfile }}
73
61
  parallel: true
74
-
75
62
  finish:
76
63
  needs: build
77
64
  runs-on: ubuntu-latest
data/.rubocop.yml CHANGED
@@ -1,12 +1,13 @@
1
1
  AllCops:
2
2
  Exclude:
3
- - 'gemfiles/**/*'
4
- - 'omnibus-ridgepole/**/*'
3
+ - "gemfiles/**/*"
4
+ - "omnibus-ridgepole/**/*"
5
+ - "vendor/bundle/**/*"
5
6
  TargetRubyVersion: 2.4
6
7
  NewCops: enable
7
8
  Bundler/OrderedGems:
8
9
  Include:
9
- - 'Appraisals'
10
+ - "Appraisals"
10
11
  Layout/HeredocIndentation:
11
12
  Enabled: false
12
13
  Metrics/AbcSize:
@@ -33,7 +34,7 @@ Style/GuardClause:
33
34
  Enabled: false
34
35
  Style/MixinUsage:
35
36
  Exclude:
36
- - 'spec/**/*'
37
+ - "spec/**/*"
37
38
  Style/TrailingCommaInHashLiteral:
38
39
  EnforcedStyleForMultiline: consistent_comma
39
40
  Layout/ClosingHeredocIndentation:
data/README.md CHANGED
@@ -6,7 +6,6 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
6
6
  (like Chef/Puppet)
7
7
 
8
8
  [![Gem Version](https://badge.fury.io/rb/ridgepole.svg)](http://badge.fury.io/rb/ridgepole)
9
- [![Unstable Version](https://img.shields.io/badge/unstable-0.9.0.beta-brightgreen.svg?longCache=true&style=flat)](https://rubygems.org/gems/ridgepole/versions/0.9.0.beta)
10
9
  [![Build Status](https://github.com/winebarrel/ridgepole/workflows/test/badge.svg?branch=0.9)](https://github.com/winebarrel/ridgepole/actions)
11
10
  [![Coverage Status](https://coveralls.io/repos/github/winebarrel/ridgepole/badge.svg?branch=0.9)](https://coveralls.io/github/winebarrel/ridgepole?branch=0.9)
12
11
 
@@ -128,12 +127,22 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
128
127
  * Support t.reference() foreign_key option ([pull#316](https://github.com/winebarrel/ridgepole/pull/316))
129
128
  * `>= 0.8.12`
130
129
  * Pluralize column specified by `references` ([pull#317](https://github.com/winebarrel/ridgepole/pull/317))
130
+ * `>= 0.8.13`
131
+ * Support `serial` and `bigserial` column types ([pull#321](https://github.com/winebarrel/ridgepole/pull/321))
131
132
  * `>= 0.9.0`
132
- * Remove `--mysql-alter-index` option ([pull#330](https://github.com/winebarrel/ridgepole/pull/330))
133
+ * Remove `--mysql-use-alter` option ([pull#330](https://github.com/winebarrel/ridgepole/pull/330))
133
134
  * Add `--table-hash-options` option ([pull#331](https://github.com/winebarrel/ridgepole/pull/331))
134
135
  * Support Rails 6.1 ([pull#323](https://github.com/winebarrel/ridgepole/pull/323))
135
136
  * Disable Rails 5.0 support ([pull#335](https://github.com/winebarrel/ridgepole/pull/335))
136
137
  * Fix PK AUTO_INCREMENT change bug ([pull#334](https://github.com/winebarrel/ridgepole/pull/334))
138
+ * `>= 0.9.1`
139
+ * Support `t.foreign_key` ([pull#348](https://github.com/winebarrel/ridgepole/pull/348))
140
+ * `>= 0.9.2`
141
+ * Support `t.column index option` ([pull#353](https://github.com/winebarrel/ridgepole/pull/353))
142
+ * `>= 0.9.3`
143
+ * Fix `limit` option for `t.integer` ([pull#354](https://github.com/winebarrel/ridgepole/pull/354))
144
+ * `>= 0.9.4`
145
+ * Fix `--alter-extra` option for unique index ([pull#356](https://github.com/winebarrel/ridgepole/pull/356))
137
146
  </details>
138
147
 
139
148
  **Notice**
@@ -295,8 +304,8 @@ create_table "parent", force: :cascade do |t|
295
304
  end
296
305
 
297
306
  create_table "child", id: false, force: :cascade do |t|
298
- t.integer "id"
299
- t.integer "parent_id"
307
+ t.bigint "id"
308
+ t.bigint "parent_id"
300
309
  end
301
310
 
302
311
  add_index "child", ["parent_id"], name: "par_ind", using: :btree
@@ -348,7 +357,7 @@ add_index "books", ["author_id"], name: "idx_author_id", using: :btree
348
357
 
349
358
  execute("ALTER TABLE books ADD CONSTRAINT fk_author FOREIGN KEY (author_id) REFERENCES authors (id)") do |c|
350
359
  # Execute SQL only if there is no foreign key
351
- c.raw_connection.query(<<-SQL).each.length.zero?
360
+ c.raw_connection.query(<<-SQL).each.size.zero?
352
361
  SELECT 1 FROM information_schema.key_column_usage
353
362
  WHERE TABLE_SCHEMA = 'bookshelf'
354
363
  AND CONSTRAINT_NAME = 'fk_author' LIMIT 1
@@ -399,9 +399,13 @@ module Ridgepole
399
399
  if Ridgepole::ConnectionAdapters.mysql?
400
400
  opts[:unsigned] = false unless opts.key?(:unsigned)
401
401
 
402
- if (attrs[:type] == :integer) && (opts[:limit] == Ridgepole::DefaultsLimit.default_limit(:bigint, @options))
403
- attrs[:type] = :bigint
404
- opts.delete(:limit)
402
+ if attrs[:type] == :integer && opts[:limit]
403
+ min = Ridgepole::DefaultsLimit.default_limit(:integer, @options)
404
+ max = Ridgepole::DefaultsLimit.default_limit(:bigint, @options)
405
+ if min < opts[:limit] && opts[:limit] <= max
406
+ attrs[:type] = :bigint
407
+ opts.delete(:limit)
408
+ end
405
409
  end
406
410
 
407
411
  if opts[:size] && (attrs[:type] == :text || attrs[:type] == :blob || attrs[:type] == :binary)
@@ -13,11 +13,14 @@ module Ridgepole
13
13
 
14
14
  def column(name, type, options = {})
15
15
  name = name.to_s
16
+ index_options = options.key?(:index) ? options.delete(:index) : false
16
17
 
17
18
  @__definition[name] = {
18
19
  type: type,
19
20
  options: options,
20
21
  }
22
+
23
+ index(name, index_options.is_a?(Hash) ? index_options : {}) if index_options
21
24
  end
22
25
 
23
26
  DEFAULT_PRIMARY_KEY_TYPE = :bigint
@@ -120,6 +123,10 @@ module Ridgepole
120
123
  @base.add_index(@table_name, name, options)
121
124
  end
122
125
 
126
+ def foreign_key(name, options = {})
127
+ @base.add_foreign_key(@table_name, name, options)
128
+ end
129
+
123
130
  def timestamps(*args)
124
131
  options = { null: false }.merge(args.extract_options!)
125
132
  column(:created_at, :datetime, options)
@@ -50,7 +50,7 @@ module Ridgepole
50
50
  case sql
51
51
  when /\AALTER\b/i
52
52
  sql += ',' + Ridgepole::ExecuteExpander.alter_extra
53
- when /\A(CREATE|DROP)\s+INDEX\b/i
53
+ when /\A(CREATE|DROP)\s+((ONLINE|OFFLINE)\s+)?((UNIQUE|FULLTEXT|SPATIAL)\s+)?INDEX\b/i
54
54
  # https://dev.mysql.com/doc/refman/5.6/en/create-index.html
55
55
  # https://dev.mysql.com/doc/refman/5.6/en/drop-index.html
56
56
  sql += ' ' + Ridgepole::ExecuteExpander.alter_extra.tr(',', ' ')
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ridgepole
4
- VERSION = '0.9.0.rc1'
4
+ VERSION = '0.9.4'
5
5
  end
data/ridgepole.gemspec CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency 'rspec', '>= 3.0.0'
36
36
  spec.add_development_dependency 'rspec-match_fuzzy', '>= 0.1.3'
37
37
  spec.add_development_dependency 'rspec-match_ruby', '>= 0.1.3'
38
- spec.add_development_dependency 'rubocop', '>= 1.7.0'
38
+ spec.add_development_dependency 'rubocop', '1.9.1'
39
39
  spec.add_development_dependency 'rubocop-rake', '>= 0.5.1'
40
40
  spec.add_development_dependency 'rubocop-rspec', '>= 2.1.0'
41
41
  spec.add_development_dependency 'simplecov'
@@ -57,6 +57,74 @@ describe 'Ridgepole::Client#diff -> migrate' do
57
57
  }
58
58
  end
59
59
 
60
+ context 'when change fk using `t.foreign_key`' do
61
+ let(:actual_dsl) do
62
+ erbh(<<-ERB)
63
+ create_table "parent", id: :integer, force: :cascade do |t|
64
+ end
65
+
66
+ create_table "child", force: :cascade do |t|
67
+ t.integer "parent_id"
68
+ t.index ["parent_id"], name: "par_id"
69
+ t.foreign_key "parent", name: "child_ibfk_1", on_delete: :cascade
70
+ end
71
+ ERB
72
+ end
73
+
74
+ let(:sorted_actual_dsl) do
75
+ erbh(<<-ERB)
76
+ create_table "child", force: :cascade do |t|
77
+ t.integer "parent_id"
78
+ t.index ["parent_id"], name: "par_id"
79
+ end
80
+
81
+ create_table "parent", id: :integer, force: :cascade do |t|
82
+ end
83
+
84
+ add_foreign_key "child", "parent", name: "child_ibfk_1", on_delete: :cascade
85
+ ERB
86
+ end
87
+
88
+ let(:expected_dsl) do
89
+ erbh(<<-ERB)
90
+ create_table "child", force: :cascade do |t|
91
+ t.integer "parent_id"
92
+ t.index ["parent_id"], name: "par_id"
93
+ end
94
+
95
+ create_table "parent", id: :integer, force: :cascade do |t|
96
+ end
97
+
98
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
99
+ ERB
100
+ end
101
+
102
+ let(:expected_dsl_using_t_foreign_key) do
103
+ erbh(<<-ERB)
104
+ create_table "child", force: :cascade do |t|
105
+ t.integer "parent_id"
106
+ t.index ["parent_id"], name: "par_id"
107
+ t.foreign_key "parent", name: "child_ibfk_1"
108
+ end
109
+
110
+ create_table "parent", id: :integer, force: :cascade do |t|
111
+ end
112
+ ERB
113
+ end
114
+
115
+ before { subject.diff(actual_dsl).migrate }
116
+
117
+ subject { client }
118
+
119
+ it {
120
+ delta = subject.diff(expected_dsl_using_t_foreign_key)
121
+ expect(delta.differ?).to be_truthy
122
+ expect(subject.dump).to match_fuzzy sorted_actual_dsl
123
+ delta.migrate
124
+ expect(subject.dump).to match_ruby expected_dsl
125
+ }
126
+ end
127
+
60
128
  context 'when change fk without name' do
61
129
  let(:actual_dsl) do
62
130
  erbh(<<-ERB)
@@ -43,6 +43,61 @@ describe 'Ridgepole::Client#diff -> migrate' do
43
43
  }
44
44
  end
45
45
 
46
+ context 'when create fk using `t.foreign_key`' do
47
+ let(:actual_dsl) do
48
+ erbh(<<-ERB)
49
+ create_table "child", force: :cascade do |t|
50
+ t.integer "parent_id"
51
+ t.index ["parent_id"], name: "par_id"
52
+ end
53
+
54
+ create_table "parent", id: :integer, force: :cascade do |t|
55
+ end
56
+ ERB
57
+ end
58
+
59
+ let(:expected_dsl) do
60
+ erbh(actual_dsl + <<-ERB)
61
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
62
+ ERB
63
+ end
64
+
65
+ let(:expected_dsl_using_t_foreign_key) do
66
+ erbh(<<-ERB)
67
+ create_table "child", force: :cascade do |t|
68
+ t.integer "parent_id"
69
+ t.index ["parent_id"], name: "par_id"
70
+ t.foreign_key "parent", name: "child_ibfk_1"
71
+ end
72
+
73
+ create_table "parent", id: :integer, force: :cascade do |t|
74
+ end
75
+ ERB
76
+ end
77
+
78
+ before { subject.diff(actual_dsl).migrate }
79
+ subject { client }
80
+
81
+ it {
82
+ delta = subject.diff(expected_dsl_using_t_foreign_key)
83
+ expect(delta.differ?).to be_truthy
84
+ expect(subject.dump).to match_ruby actual_dsl
85
+ delta.migrate
86
+ expect(subject.dump).to match_ruby expected_dsl
87
+ }
88
+
89
+ it {
90
+ delta = client(bulk_change: true).diff(expected_dsl_using_t_foreign_key)
91
+ expect(delta.differ?).to be_truthy
92
+ expect(subject.dump).to match_ruby actual_dsl
93
+ expect(delta.script).to match_fuzzy <<-RUBY
94
+ add_foreign_key("child", "parent", **{:name=>"child_ibfk_1"})
95
+ RUBY
96
+ delta.migrate
97
+ expect(subject.dump).to match_ruby expected_dsl
98
+ }
99
+ end
100
+
46
101
  context 'when create fk when create table' do
47
102
  let(:dsl) do
48
103
  erbh(<<-ERB)
@@ -57,6 +57,61 @@ describe 'Ridgepole::Client#diff -> migrate' do
57
57
  }
58
58
  end
59
59
 
60
+ context 'when drop fk using `t.foreign_key`' do
61
+ let(:actual_dsl) do
62
+ erbh(<<-ERB)
63
+ create_table "parent", id: :integer, force: :cascade do |t|
64
+ end
65
+
66
+ create_table "child", force: :cascade do |t|
67
+ t.integer "parent_id"
68
+ t.index ["parent_id"], name: "par_id"
69
+ t.foreign_key "parent", name: "child_ibfk_1"
70
+ end
71
+ ERB
72
+ end
73
+
74
+ let(:sorted_actual_dsl) do
75
+ expected_dsl + <<-RUBY
76
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
77
+ RUBY
78
+ end
79
+
80
+ let(:expected_dsl) do
81
+ erbh(<<-ERB)
82
+ create_table "child", force: :cascade do |t|
83
+ t.integer "parent_id"
84
+ t.index ["parent_id"], name: "par_id"
85
+ end
86
+
87
+ create_table "parent", id: :integer, force: :cascade do |t|
88
+ end
89
+ ERB
90
+ end
91
+
92
+ before { subject.diff(actual_dsl).migrate }
93
+ subject { client }
94
+
95
+ it {
96
+ delta = subject.diff(expected_dsl)
97
+ expect(delta.differ?).to be_truthy
98
+ expect(subject.dump).to match_fuzzy sorted_actual_dsl
99
+ delta.migrate
100
+ expect(subject.dump).to match_ruby expected_dsl
101
+ }
102
+
103
+ it {
104
+ delta = client(bulk_change: true).diff(expected_dsl)
105
+ expect(delta.differ?).to be_truthy
106
+ expect(subject.dump).to match_fuzzy sorted_actual_dsl
107
+ expect(delta.script).to match_fuzzy <<-RUBY
108
+ remove_foreign_key("child", name: "child_ibfk_1")
109
+ RUBY
110
+ delta.migrate
111
+ expect(subject.dump).to match_ruby expected_dsl
112
+ }
113
+ end
114
+
60
115
  context 'when drop fk when drop table' do
61
116
  let(:dsl) do
62
117
  erbh(<<-ERB)
@@ -186,6 +186,51 @@ describe 'Ridgepole::Client#diff -> migrate' do
186
186
  }
187
187
  end
188
188
 
189
+ context 'when add unique index' do
190
+ let(:actual_dsl) do
191
+ erbh(<<-ERB)
192
+ create_table "employees", primary_key: "emp_no", force: :cascade do |t|
193
+ t.date "birth_date", null: false
194
+ t.string "first_name", limit: 14, null: false
195
+ t.string "last_name", limit: 16, null: false
196
+ t.string "gender", limit: 1, null: false
197
+ t.date "hire_date", null: false
198
+ end
199
+ ERB
200
+ end
201
+
202
+ let(:expected_dsl) do
203
+ erbh(<<-ERB)
204
+ create_table "employees", primary_key: "emp_no", force: :cascade do |t|
205
+ t.date "birth_date", null: false
206
+ t.string "first_name", limit: 14, null: false
207
+ t.string "last_name", limit: 16, null: false
208
+ t.string "gender", limit: 1, null: false
209
+ t.date "hire_date", null: false
210
+ t.index ["first_name"], name: "idx_first_name", unique: true
211
+ end
212
+ ERB
213
+ end
214
+
215
+ let(:alter_extra) { 'LOCK=DEFAULT, ALGORITHM=DEFAULT' }
216
+
217
+ before { subject.diff(actual_dsl).migrate }
218
+ subject { client }
219
+
220
+ it {
221
+ delta = subject.diff(expected_dsl)
222
+ expect(delta.differ?).to be_truthy
223
+ expect(subject.dump).to match_ruby actual_dsl
224
+ migrated, sql = delta.migrate(alter_extra: alter_extra, noop: true)
225
+ expect(migrated).to be_truthy
226
+ expect(sql).to match_fuzzy erbh(<<-SQL)
227
+ CREATE UNIQUE INDEX `idx_first_name` ON `employees` (`first_name`) LOCK=DEFAULT ALGORITHM=DEFAULT
228
+ SQL
229
+ delta.migrate(alter_extra: alter_extra)
230
+ expect(subject.dump).to match_ruby expected_dsl
231
+ }
232
+ end
233
+
189
234
  context 'when drop index' do
190
235
  let(:actual_dsl) do
191
236
  erbh(<<-ERB)
@@ -5,7 +5,11 @@ describe 'Ridgepole::Client#diff -> migrate' do
5
5
  let(:dsl) do
6
6
  erbh(<<-ERB)
7
7
  create_table "salaries", id: false, force: :cascade do |t|
8
- t.integer "emp_no", limit: 8, null: false
8
+ t.integer "emp_no_int", limit: 4, null: false
9
+ t.integer "emp_no_bigint5", limit: 5, null: false
10
+ t.integer "emp_no_bigint6", limit: 6, null: false
11
+ t.integer "emp_no_bigint7", limit: 7, null: false
12
+ t.integer "emp_no_bigint8", limit: 8, null: false
9
13
  t.float "salary", <%= i cond('< 5.2.0.beta2', limit: 24) %>, null: false
10
14
  t.date "from_date", null: false
11
15
  t.date "to_date", null: false
@@ -17,7 +21,12 @@ describe 'Ridgepole::Client#diff -> migrate' do
17
21
  subject { client }
18
22
 
19
23
  it {
20
- expect(subject.dump).to match_ruby dsl.sub(/t.integer "emp_no", limit: 8/, 't.bigint "emp_no"')
24
+ expect(subject.dump).to match_ruby dsl
25
+ .sub(/t.integer "emp_no_int", limit: 4/, 't.integer "emp_no_int"')
26
+ .sub(/t.integer "emp_no_bigint5", limit: 5/, 't.bigint "emp_no_bigint5"')
27
+ .sub(/t.integer "emp_no_bigint6", limit: 6/, 't.bigint "emp_no_bigint6"')
28
+ .sub(/t.integer "emp_no_bigint7", limit: 7/, 't.bigint "emp_no_bigint7"')
29
+ .sub(/t.integer "emp_no_bigint8", limit: 8/, 't.bigint "emp_no_bigint8"')
21
30
  delta = subject.diff(dsl)
22
31
  expect(delta.differ?).to be_falsey
23
32
  }
@@ -157,4 +157,64 @@ describe 'Ridgepole::Client#diff -> migrate' do
157
157
  expect(subject.dump).to match_ruby expected_dsl
158
158
  }
159
159
  end
160
+
161
+ context 'when using index option' do
162
+ let(:dsl) do
163
+ erbh(<<-ERB)
164
+ create_table "clubs", force: :cascade do |t|
165
+ t.string "name", default: "", null: false, index: { unique: true }
166
+ end
167
+
168
+ create_table "titles", id: false, force: :cascade do |t|
169
+ t.integer "emp_no", null: false, index: { name: "emp_no" }
170
+ t.string "title", limit: 50, null: false
171
+ t.date "from_date", null: false
172
+ t.date "to_date"
173
+ end
174
+ ERB
175
+ end
176
+
177
+ let(:actual_dsl) do
178
+ erbh(<<-ERB)
179
+ create_table "clubs", force: :cascade do |t|
180
+ t.string "name", default: "", null: false
181
+ end
182
+
183
+ create_table "titles", id: false, force: :cascade do |t|
184
+ t.integer "emp_no", null: false
185
+ t.string "title", limit: 50, null: false
186
+ t.date "from_date", null: false
187
+ t.date "to_date"
188
+ end
189
+ ERB
190
+ end
191
+
192
+ let(:expected_dsl) do
193
+ erbh(<<-ERB)
194
+ create_table "clubs", force: :cascade do |t|
195
+ t.string "name", default: "", null: false
196
+ t.index ["name"], name: "index_clubs_on_name", unique: true
197
+ end
198
+
199
+ create_table "titles", id: false, force: :cascade do |t|
200
+ t.integer "emp_no", null: false
201
+ t.string "title", limit: 50, null: false
202
+ t.date "from_date", null: false
203
+ t.date "to_date"
204
+ t.index ["emp_no"], name: "emp_no"
205
+ end
206
+ ERB
207
+ end
208
+
209
+ before { subject.diff(actual_dsl).migrate }
210
+ subject { client }
211
+
212
+ it {
213
+ delta = subject.diff(dsl)
214
+ expect(delta.differ?).to be_truthy
215
+ expect(subject.dump).to match_ruby actual_dsl
216
+ delta.migrate
217
+ expect(subject.dump).to match_ruby expected_dsl
218
+ }
219
+ end
160
220
  end
data/spec/spec_const.rb CHANGED
@@ -5,7 +5,7 @@ TEST_MYSQL_PORT = ENV['MYSQL57'] == '1' ? 13_317 : 13_316
5
5
  TEST_MYSQL_USER = 'root'
6
6
  TEST_MYSQL_PASS = 'password'
7
7
 
8
- MYSQL_CLI = "mysql -h #{TEST_MYSQL_HOST} -P #{TEST_MYSQL_PORT} -u #{TEST_MYSQL_USER} -p#{TEST_MYSQL_PASS} 2>/dev/null"
8
+ MYSQL_CLI = "mysql -h #{TEST_MYSQL_HOST} -P #{TEST_MYSQL_PORT} -u #{TEST_MYSQL_USER} -p#{TEST_MYSQL_PASS} --ssl-mode=DISABLED 2>/dev/null"
9
9
 
10
10
  TEST_PG_HOST = ENV['DOCKER_HOST'] ? ENV['DOCKER_HOST'].gsub(%r{\Atcp://|:\d+\z}, '') : '127.0.0.1'
11
11
  TEST_PG_PORT = 15_442
data/spec/spec_helper.rb CHANGED
@@ -132,6 +132,7 @@ module SpecHelper
132
132
  port: TEST_MYSQL_PORT,
133
133
  username: TEST_MYSQL_USER,
134
134
  password: TEST_MYSQL_PASS,
135
+ ssl_mode: 'DISABLED',
135
136
  }.merge(config)
136
137
  end
137
138
  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.9.0.rc1
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-23 00:00:00.000000000 Z
11
+ date: 2021-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -202,16 +202,16 @@ dependencies:
202
202
  name: rubocop
203
203
  requirement: !ruby/object:Gem::Requirement
204
204
  requirements:
205
- - - ">="
205
+ - - '='
206
206
  - !ruby/object:Gem::Version
207
- version: 1.7.0
207
+ version: 1.9.1
208
208
  type: :development
209
209
  prerelease: false
210
210
  version_requirements: !ruby/object:Gem::Requirement
211
211
  requirements:
212
- - - ">="
212
+ - - '='
213
213
  - !ruby/object:Gem::Version
214
- version: 1.7.0
214
+ version: 1.9.1
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: rubocop-rake
217
217
  requirement: !ruby/object:Gem::Requirement
@@ -468,11 +468,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
468
468
  version: 2.2.7
469
469
  required_rubygems_version: !ruby/object:Gem::Requirement
470
470
  requirements:
471
- - - ">"
471
+ - - ">="
472
472
  - !ruby/object:Gem::Version
473
- version: 1.3.1
473
+ version: '0'
474
474
  requirements: []
475
- rubygems_version: 3.0.3
475
+ rubygems_version: 3.1.4
476
476
  signing_key:
477
477
  specification_version: 4
478
478
  summary: Ridgepole is a tool to manage DB schema.