ridgepole 0.9.0 → 0.9.1

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: 3aa2d123eaa04d61f3b9c602714abb2c2b8f8a8c26fe98a4179972a999544781
4
- data.tar.gz: 1bed7b6f6caab7b80c86eb885cbe462db3a8970f558cc8a9fbd6bad6d5a728f5
3
+ metadata.gz: 4f3d6aadf39f73ef720c5f19404e303f98e75919164e51240570472d21c6c14e
4
+ data.tar.gz: 2e494165ba2dbd2c1a700ae3ebda831b43ca4439017a96513756f47d9f64f901
5
5
  SHA512:
6
- metadata.gz: 2455d86f97127f948c38ff7a86ff436008729defcc560dc81eb05e41647c65f4def830ee2f0f522ba0e235d879ac88876254d0edbab27be0c5b58189e978522f
7
- data.tar.gz: 8cfdf0654b03655332dfe06b70cadda456dc9300360342ba4a47c3703d1dca25ca1bf93908c08febc556d8b75820b35198aabed497410e6ab1fa2ad67391fb09
6
+ metadata.gz: 5b173d5e01ea89b0065dc617989cb89dd000050bf4aa973af74c714b55f7cbe414f932c6a44c1a9cc4dc10cf2e8db4ca590bd68ddc34176901700ab5c1d569e2
7
+ data.tar.gz: 20b1fa9092d28d119d9604ea3ffb7b11abe8080bb2edf6a6f0af88e095cb88724bb40836a59939f1eadee693386c0fbb64cf3876d56c4f3cdd4fd0f123a2b571
@@ -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
@@ -130,11 +130,13 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
130
130
  * `>= 0.8.13`
131
131
  * Support `serial` and `bigserial` column types ([pull#321](https://github.com/winebarrel/ridgepole/pull/321))
132
132
  * `>= 0.9.0`
133
- * 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))
134
134
  * Add `--table-hash-options` option ([pull#331](https://github.com/winebarrel/ridgepole/pull/331))
135
135
  * Support Rails 6.1 ([pull#323](https://github.com/winebarrel/ridgepole/pull/323))
136
136
  * Disable Rails 5.0 support ([pull#335](https://github.com/winebarrel/ridgepole/pull/335))
137
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))
138
140
  </details>
139
141
 
140
142
  **Notice**
@@ -120,6 +120,10 @@ module Ridgepole
120
120
  @base.add_index(@table_name, name, options)
121
121
  end
122
122
 
123
+ def foreign_key(name, options = {})
124
+ @base.add_foreign_key(@table_name, name, options)
125
+ end
126
+
123
127
  def timestamps(*args)
124
128
  options = { null: false }.merge(args.extract_options!)
125
129
  column(:created_at, :datetime, options)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ridgepole
4
- VERSION = '0.9.0'
4
+ VERSION = '0.9.1'
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.8.1'
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)
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
4
+ version: 0.9.1
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-31 00:00:00.000000000 Z
11
+ date: 2021-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -204,14 +204,14 @@ dependencies:
204
204
  requirements:
205
205
  - - '='
206
206
  - !ruby/object:Gem::Version
207
- version: 1.8.1
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.8.1
214
+ version: 1.9.1
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: rubocop-rake
217
217
  requirement: !ruby/object:Gem::Requirement
@@ -472,7 +472,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
472
472
  - !ruby/object:Gem::Version
473
473
  version: '0'
474
474
  requirements: []
475
- rubygems_version: 3.0.3
475
+ rubygems_version: 3.1.2
476
476
  signing_key:
477
477
  specification_version: 4
478
478
  summary: Ridgepole is a tool to manage DB schema.