convergence 0.2.7 → 1.0.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 +5 -5
- data/.travis.yml +2 -0
- data/CHANGELOG.md +42 -0
- data/Gemfile.lock +47 -52
- data/README.md +50 -19
- data/bin/convergence +2 -19
- data/convergence.gemspec +4 -5
- data/lib/convergence.rb +0 -22
- data/lib/convergence/cli.rb +55 -0
- data/lib/convergence/column.rb +1 -0
- data/lib/convergence/command.rb +6 -26
- data/lib/convergence/command/apply.rb +25 -15
- data/lib/convergence/command/diff.rb +6 -7
- data/lib/convergence/command/dryrun.rb +9 -7
- data/lib/convergence/command/export.rb +4 -7
- data/lib/convergence/command/rollback_dryrun.rb +28 -0
- data/lib/convergence/config.rb +31 -1
- data/lib/convergence/database_connector.rb +1 -0
- data/lib/convergence/database_connector/mysql_connector.rb +16 -10
- data/lib/convergence/default_parameter.rb +1 -0
- data/lib/convergence/default_parameter/mysql_default_parameter.rb +2 -0
- data/lib/convergence/diff.rb +1 -1
- data/lib/convergence/dsl.rb +2 -0
- data/lib/convergence/dumper.rb +1 -1
- data/lib/convergence/dumper/mysql_schema_dumper.rb +3 -0
- data/lib/convergence/pretty_diff.rb +2 -0
- data/lib/convergence/sql_generator/mysql_generator.rb +2 -0
- data/lib/convergence/table.rb +4 -0
- data/lib/convergence/version.rb +1 -1
- data/spec/convergence/diff_spec.rb +2 -0
- data/spec/convergence/dsl_spec.rb +1 -0
- data/spec/convergence/dumper/mysql_schema_dumper_spec.rb +2 -0
- data/spec/convergence/dumper_spec.rb +2 -0
- data/spec/convergence/table_spec.rb +1 -0
- data/spec/integrations/command_dryrun.rb +2 -2
- data/spec/integrations/drop_foreign_key.rb +2 -2
- data/spec/spec_helper.rb +3 -4
- metadata +13 -26
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a41f0e1a7c45b785eecc5a53f5aa622158f8777d51999e0ba48280fc53901326
|
|
4
|
+
data.tar.gz: 91749136917fd3c5f0c2ba6ff1553bd23ceb96edeca9c702eae9aeecd01f7976
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2e232a04b220ccdce258b2ab2f8da447e1c95dbba6b58f5de20ef6d9193553fce54a8504205503d15111ce2e00db5000753083af5284c502f4919890919b8572
|
|
7
|
+
data.tar.gz: 5fdc75e1b04fac387622100c41d85cc79b8c4440988fe0560d5c9bd0149411da18172ab3513a9fad1a1688b38b7f3a247640ce7d815d0614b29030868986f750
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,45 @@
|
|
|
1
|
+
## Convergence 1.0.4 (September 8, 2020) ##
|
|
2
|
+
|
|
3
|
+
* Support diff-lcs 1.4 (PR: #75 #76)
|
|
4
|
+
|
|
5
|
+
*yujideveloper*
|
|
6
|
+
|
|
7
|
+
* Fix warning on Ruby 2.6 and later (PR: #77)
|
|
8
|
+
|
|
9
|
+
*yujideveloper*
|
|
10
|
+
|
|
11
|
+
## Convergence 1.0.3 (January 8, 2020) ##
|
|
12
|
+
|
|
13
|
+
* Support json column (PR: #70)
|
|
14
|
+
|
|
15
|
+
*nishio-dens*
|
|
16
|
+
|
|
17
|
+
## Convergence 1.0.2 (May 24, 2019) ##
|
|
18
|
+
|
|
19
|
+
* Support ssl connections (PR: #69)
|
|
20
|
+
|
|
21
|
+
*yujideveloper*
|
|
22
|
+
|
|
23
|
+
## Convergence 1.0.1 (September 27, 2018) ##
|
|
24
|
+
|
|
25
|
+
* Add Rollback Dryrun command (PR: #64)
|
|
26
|
+
|
|
27
|
+
*nishio-dens*
|
|
28
|
+
|
|
29
|
+
## Convergence 1.0.0 (August 28, 2018) ##
|
|
30
|
+
|
|
31
|
+
* [BREAKING CHANGE] Change flag style command to sub-command style (PR: #60)
|
|
32
|
+
|
|
33
|
+
A flag style command has been deprecated
|
|
34
|
+
|
|
35
|
+
e.g. convergence -c database.yml -i example.schema --apply
|
|
36
|
+
|
|
37
|
+
Introduce a sub command style.
|
|
38
|
+
|
|
39
|
+
e.g. convergence apply example.schema -c database.yml
|
|
40
|
+
|
|
41
|
+
*yujideveloper*
|
|
42
|
+
|
|
1
43
|
## Convergence 0.2.7 (August 20, 2018) ##
|
|
2
44
|
|
|
3
45
|
* Fix issues of Convergence::Config (PR: #58)
|
data/Gemfile.lock
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
convergence (0.
|
|
4
|
+
convergence (1.0.4)
|
|
5
5
|
diff-lcs
|
|
6
6
|
diffy
|
|
7
7
|
mysql2
|
|
8
|
-
|
|
8
|
+
thor (~> 0.20)
|
|
9
9
|
|
|
10
10
|
GEM
|
|
11
11
|
remote: https://rubygems.org/
|
|
12
12
|
specs:
|
|
13
|
-
ast (2.
|
|
13
|
+
ast (2.4.0)
|
|
14
14
|
coderay (1.1.2)
|
|
15
|
-
diff-lcs (1.
|
|
16
|
-
diffy (3.
|
|
17
|
-
ffi (1.
|
|
15
|
+
diff-lcs (1.4.2)
|
|
16
|
+
diffy (3.4.0)
|
|
17
|
+
ffi (1.11.3)
|
|
18
18
|
formatador (0.2.5)
|
|
19
|
-
guard (2.
|
|
19
|
+
guard (2.16.1)
|
|
20
20
|
formatador (>= 0.2.4)
|
|
21
21
|
listen (>= 2.7, < 4.0)
|
|
22
|
-
lumberjack (
|
|
22
|
+
lumberjack (>= 1.0.12, < 2.0)
|
|
23
23
|
nenv (~> 0.1)
|
|
24
24
|
notiffany (~> 0.0)
|
|
25
25
|
pry (>= 0.9.12)
|
|
@@ -30,69 +30,64 @@ GEM
|
|
|
30
30
|
guard (~> 2.1)
|
|
31
31
|
guard-compat (~> 1.1)
|
|
32
32
|
rspec (>= 2.99.0, < 4.0)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
rb-
|
|
36
|
-
|
|
37
|
-
lumberjack (1.0
|
|
38
|
-
method_source (0.9.
|
|
39
|
-
mysql2 (0.5.
|
|
33
|
+
jaro_winkler (1.5.4)
|
|
34
|
+
listen (3.2.1)
|
|
35
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
36
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
|
37
|
+
lumberjack (1.1.0)
|
|
38
|
+
method_source (0.9.2)
|
|
39
|
+
mysql2 (0.5.3)
|
|
40
40
|
nenv (0.3.0)
|
|
41
|
-
notiffany (0.1.
|
|
41
|
+
notiffany (0.1.3)
|
|
42
42
|
nenv (~> 0.1)
|
|
43
43
|
shellany (~> 0.0)
|
|
44
|
-
parallel (1.
|
|
45
|
-
parser (2.
|
|
46
|
-
ast (~> 2.
|
|
47
|
-
|
|
48
|
-
pry (0.11.3)
|
|
44
|
+
parallel (1.19.1)
|
|
45
|
+
parser (2.7.0.1)
|
|
46
|
+
ast (~> 2.4.0)
|
|
47
|
+
pry (0.12.2)
|
|
49
48
|
coderay (~> 1.1.0)
|
|
50
49
|
method_source (~> 0.9.0)
|
|
51
|
-
rainbow (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
rb-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
rspec-
|
|
59
|
-
rspec-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
rspec-expectations (3.7.0)
|
|
50
|
+
rainbow (3.0.0)
|
|
51
|
+
rake (13.0.1)
|
|
52
|
+
rb-fsevent (0.10.3)
|
|
53
|
+
rb-inotify (0.10.1)
|
|
54
|
+
ffi (~> 1.0)
|
|
55
|
+
rspec (3.9.0)
|
|
56
|
+
rspec-core (~> 3.9.0)
|
|
57
|
+
rspec-expectations (~> 3.9.0)
|
|
58
|
+
rspec-mocks (~> 3.9.0)
|
|
59
|
+
rspec-core (3.9.1)
|
|
60
|
+
rspec-support (~> 3.9.1)
|
|
61
|
+
rspec-expectations (3.9.0)
|
|
64
62
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
65
|
-
rspec-support (~> 3.
|
|
66
|
-
rspec-mocks (3.
|
|
63
|
+
rspec-support (~> 3.9.0)
|
|
64
|
+
rspec-mocks (3.9.1)
|
|
67
65
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
68
|
-
rspec-support (~> 3.
|
|
69
|
-
rspec-support (3.
|
|
70
|
-
rubocop (0.
|
|
66
|
+
rspec-support (~> 3.9.0)
|
|
67
|
+
rspec-support (3.9.2)
|
|
68
|
+
rubocop (0.79.0)
|
|
69
|
+
jaro_winkler (~> 1.5.1)
|
|
71
70
|
parallel (~> 1.10)
|
|
72
|
-
parser (>= 2.
|
|
73
|
-
|
|
74
|
-
rainbow (>= 2.2.2, < 3.0)
|
|
71
|
+
parser (>= 2.7.0.1)
|
|
72
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
75
73
|
ruby-progressbar (~> 1.7)
|
|
76
|
-
unicode-display_width (
|
|
77
|
-
ruby-progressbar (1.
|
|
78
|
-
ruby_dep (1.5.0)
|
|
74
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
|
75
|
+
ruby-progressbar (1.10.1)
|
|
79
76
|
shellany (0.0.1)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
unicode-display_width (1.3.0)
|
|
77
|
+
thor (0.20.3)
|
|
78
|
+
unicode-display_width (1.6.0)
|
|
83
79
|
|
|
84
80
|
PLATFORMS
|
|
85
81
|
ruby
|
|
86
82
|
|
|
87
83
|
DEPENDENCIES
|
|
88
|
-
bundler (~> 1.7)
|
|
89
84
|
convergence!
|
|
90
85
|
guard
|
|
91
86
|
guard-rspec
|
|
92
87
|
pry
|
|
93
|
-
rake (~>
|
|
94
|
-
rspec
|
|
88
|
+
rake (~> 13.0)
|
|
89
|
+
rspec (>= 3.5)
|
|
95
90
|
rubocop
|
|
96
91
|
|
|
97
92
|
BUNDLED WITH
|
|
98
|
-
1.
|
|
93
|
+
2.1.3
|
data/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Convergence
|
|
2
2
|
|
|
3
3
|
Convergence is a pure-Ruby database schema migration tool.
|
|
4
|
-
Currently, This
|
|
4
|
+
Currently, This tool is support only MySQL.
|
|
5
5
|
|
|
6
6
|
It defines DB Schema using Convergence DSL(like Rails DSL).
|
|
7
|
-
For more information about Convergence DSL, See below 'Detail About Convergence DSL'
|
|
7
|
+
For more information about Convergence DSL, See below ['Detail About Convergence DSL'](#detail-about-convergence-dsl)
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
[](https://badge.fury.io/rb/convergence)
|
|
@@ -53,7 +53,7 @@ create_table 'test_tables' do |t|
|
|
|
53
53
|
t.index :name
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
$ convergence -c database.yml -
|
|
56
|
+
$ convergence apply example.schema -c database.yml --dry-run
|
|
57
57
|
|
|
58
58
|
# CREATE TABLE `test_tables` (
|
|
59
59
|
# `id` int(11) NOT NULL AUTO_INCREMENT,
|
|
@@ -64,7 +64,7 @@ $ convergence -c database.yml -i example.schema --dryrun
|
|
|
64
64
|
# KEY `index_test_tables_on_name` (`name`)
|
|
65
65
|
# ) ENGINE=InnoDB ROW_FORMAT=Compact DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci;
|
|
66
66
|
|
|
67
|
-
$ convergence -c database.yml
|
|
67
|
+
$ convergence apply example.schema -c database.yml
|
|
68
68
|
|
|
69
69
|
SET FOREIGN_KEY_CHECKS=0;
|
|
70
70
|
--> 0.0005826340056955814s
|
|
@@ -89,7 +89,7 @@ create_table 'test_tables', comment: 'Table Comment Test', engine: 'MyISAM' do |
|
|
|
89
89
|
t.datetime :posted_at
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
$ convergence -c database.yml -
|
|
92
|
+
$ convergence apply changed_example.schema -c database.yml --dry-run
|
|
93
93
|
|
|
94
94
|
# DROP INDEX `index_test_tables_on_name` ON `test_tables`;
|
|
95
95
|
# ALTER TABLE `test_tables`
|
|
@@ -98,7 +98,7 @@ $ convergence -c database.yml -i changed_example.schema --dryrun
|
|
|
98
98
|
# ADD COLUMN `posted_at` datetime NOT NULL AFTER `created_at`;
|
|
99
99
|
# ALTER TABLE `test_tables` ENGINE=MyISAM COMMENT='Table Comment Test';
|
|
100
100
|
|
|
101
|
-
$ convergence -c database.yml
|
|
101
|
+
$ convergence apply changed_example.schema -c database.yml
|
|
102
102
|
|
|
103
103
|
SET FOREIGN_KEY_CHECKS=0;
|
|
104
104
|
--> 0.0005331430002115667s
|
|
@@ -131,15 +131,12 @@ Create Table: CREATE TABLE `test_tables` (
|
|
|
131
131
|
## Usage
|
|
132
132
|
|
|
133
133
|
```
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
--dryrun
|
|
141
|
-
--apply execute sql to your database
|
|
142
|
-
-h, --help Display this help message.
|
|
134
|
+
Commands:
|
|
135
|
+
convergence apply FILE -c, --config=CONFIG # execute sql to your database
|
|
136
|
+
convergence diff FILE1 FILE2 # print diff of DSLs
|
|
137
|
+
convergence export -c, --config=CONFIG # export db schema to dsl
|
|
138
|
+
convergence help [COMMAND] # Describe available commands or one specific command
|
|
139
|
+
convergence version # print the version
|
|
143
140
|
```
|
|
144
141
|
|
|
145
142
|
### DB Config
|
|
@@ -155,13 +152,39 @@ username: root
|
|
|
155
152
|
password:
|
|
156
153
|
```
|
|
157
154
|
|
|
155
|
+
#### Use SSL connection
|
|
156
|
+
|
|
157
|
+
If you would like to use SSL connection, you can specify SSL options in database.yml
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
$ cat database.yml
|
|
161
|
+
adapter: mysql
|
|
162
|
+
database: convergence_test
|
|
163
|
+
host: 127.0.0.1
|
|
164
|
+
username: root
|
|
165
|
+
password:
|
|
166
|
+
sslca: /path/to/ca-cert.pem
|
|
167
|
+
sslverify: true
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Supported ssl options are below:
|
|
171
|
+
* `ssl_mode`
|
|
172
|
+
* `sslkey`
|
|
173
|
+
* `sslcert`
|
|
174
|
+
* `sslca`
|
|
175
|
+
* `sslcapath`
|
|
176
|
+
* `sslcipher`
|
|
177
|
+
* `sslverify`
|
|
178
|
+
|
|
179
|
+
See [the ssl options section of mysql2 README](https://github.com/brianmario/mysql2/tree/master#ssl-options) for more details of SSL options
|
|
180
|
+
|
|
158
181
|
### Export Your DB Schema
|
|
159
182
|
|
|
160
183
|
First, you need to create database.yml.
|
|
161
184
|
And then, execute command like below.
|
|
162
185
|
|
|
163
186
|
```
|
|
164
|
-
$ convergence -c database.yml
|
|
187
|
+
$ convergence export -c database.yml > example.schema
|
|
165
188
|
```
|
|
166
189
|
|
|
167
190
|
Export DSL like this.
|
|
@@ -193,16 +216,23 @@ create_table "paper_authors", collate: "utf8_general_ci", comment: "Paper Author
|
|
|
193
216
|
end
|
|
194
217
|
```
|
|
195
218
|
|
|
196
|
-
###
|
|
219
|
+
### Dry run
|
|
197
220
|
|
|
198
221
|
```
|
|
199
|
-
$ convergence -c database.yml -
|
|
222
|
+
$ convergence apply example.schema -c database.yml --dry-run
|
|
200
223
|
```
|
|
201
224
|
|
|
225
|
+
### Rollback Dry run
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
$ convergence apply example.schema -c database.yml --rollback-dry-run
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
|
|
202
232
|
### Apply
|
|
203
233
|
|
|
204
234
|
```
|
|
205
|
-
$ convergence -c database.yml
|
|
235
|
+
$ convergence apply example.schema -c database.yml
|
|
206
236
|
```
|
|
207
237
|
|
|
208
238
|
### Include Other Schema files
|
|
@@ -242,6 +272,7 @@ Convergence is currently support column types below.
|
|
|
242
272
|
- datetime
|
|
243
273
|
- timestamp
|
|
244
274
|
- year
|
|
275
|
+
- json
|
|
245
276
|
|
|
246
277
|
```
|
|
247
278
|
create_table "tests", comment: 'Column type example' do |t|
|
data/bin/convergence
CHANGED
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
|
3
3
|
require 'rubygems'
|
|
4
|
-
require 'convergence'
|
|
5
|
-
require 'slop'
|
|
4
|
+
require 'convergence/cli'
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
opt.banner 'Usage: convergence [options]'
|
|
9
|
-
|
|
10
|
-
opt.on 'v', 'version' do
|
|
11
|
-
puts "version #{Convergence::VERSION}"
|
|
12
|
-
exit
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
opt.on 'c=', 'config=', 'Database Yaml Setting'
|
|
16
|
-
opt.on 'd=', 'diff=', 'DSL1,DSL2', as: Array, limit: 2
|
|
17
|
-
opt.on 'e', 'export', 'export db schema to dsl'
|
|
18
|
-
opt.on 'i=', 'input=', 'Input DSL'
|
|
19
|
-
opt.on 'dryrun'
|
|
20
|
-
opt.on 'apply', 'execute sql to your database'
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
Convergence::Command.new(opts).execute
|
|
6
|
+
Convergence::CLI.start
|
data/convergence.gemspec
CHANGED
|
@@ -21,13 +21,12 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
spec.add_dependency 'mysql2'
|
|
22
22
|
spec.add_dependency 'diff-lcs'
|
|
23
23
|
spec.add_dependency 'diffy'
|
|
24
|
-
spec.add_dependency '
|
|
24
|
+
spec.add_dependency 'thor', '~> 0.20'
|
|
25
25
|
|
|
26
|
-
spec.required_ruby_version = ">= 2.
|
|
26
|
+
spec.required_ruby_version = ">= 2.4.0"
|
|
27
27
|
|
|
28
|
-
spec.add_development_dependency '
|
|
29
|
-
spec.add_development_dependency '
|
|
30
|
-
spec.add_development_dependency 'rspec'
|
|
28
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
|
29
|
+
spec.add_development_dependency 'rspec', '>= 3.5'
|
|
31
30
|
spec.add_development_dependency 'rubocop'
|
|
32
31
|
spec.add_development_dependency 'pry'
|
|
33
32
|
spec.add_development_dependency 'guard'
|
data/lib/convergence.rb
CHANGED
|
@@ -1,24 +1,2 @@
|
|
|
1
1
|
require 'convergence/module'
|
|
2
|
-
require 'convergence/logger'
|
|
3
2
|
require 'convergence/version'
|
|
4
|
-
require 'convergence/config'
|
|
5
|
-
require 'convergence/command'
|
|
6
|
-
require 'convergence/command/diff'
|
|
7
|
-
require 'convergence/command/export'
|
|
8
|
-
require 'convergence/command/dryrun'
|
|
9
|
-
require 'convergence/command/apply'
|
|
10
|
-
require 'convergence/pretty_diff'
|
|
11
|
-
require 'convergence/database_connector'
|
|
12
|
-
require 'convergence/database_connector/mysql_connector'
|
|
13
|
-
require 'convergence/column'
|
|
14
|
-
require 'convergence/index'
|
|
15
|
-
require 'convergence/foreign_key'
|
|
16
|
-
require 'convergence/table'
|
|
17
|
-
require 'convergence/dsl'
|
|
18
|
-
require 'convergence/diff'
|
|
19
|
-
require 'convergence/sql_generator'
|
|
20
|
-
require 'convergence/sql_generator/mysql_generator'
|
|
21
|
-
require 'convergence/dumper'
|
|
22
|
-
require 'convergence/dumper/mysql_schema_dumper'
|
|
23
|
-
require 'convergence/default_parameter'
|
|
24
|
-
require 'convergence/default_parameter/mysql_default_parameter'
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'thor'
|
|
4
|
+
require 'convergence/module'
|
|
5
|
+
require 'convergence/config'
|
|
6
|
+
|
|
7
|
+
class Convergence::CLI < Thor
|
|
8
|
+
map %w[--version -v] => :version
|
|
9
|
+
|
|
10
|
+
desc 'apply FILE', 'execute sql to your database'
|
|
11
|
+
method_option :config, aliases: '-c', type: :string, required: true, desc: 'Database Yaml Setting'
|
|
12
|
+
method_option :dry_run, type: :boolean
|
|
13
|
+
method_option :rollback_dry_run, type: :boolean
|
|
14
|
+
def apply(file)
|
|
15
|
+
opts = { input: file }
|
|
16
|
+
if options[:dry_run]
|
|
17
|
+
require 'convergence/command/dryrun'
|
|
18
|
+
Convergence::Command::Dryrun.new(opts, config: config).execute
|
|
19
|
+
elsif options[:rollback_dry_run]
|
|
20
|
+
require 'convergence/command/rollback_dryrun'
|
|
21
|
+
Convergence::Command::RollbackDryrun.new(opts, config: config).execute
|
|
22
|
+
else
|
|
23
|
+
require 'convergence/command/apply'
|
|
24
|
+
Convergence::Command::Apply.new(opts, config: config).execute
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
desc 'diff FILE1 FILE2', 'print diff of DSLs'
|
|
29
|
+
def diff(file1, file2)
|
|
30
|
+
require 'convergence/command/diff'
|
|
31
|
+
opts = { diff: [file1, file2] }
|
|
32
|
+
Convergence::Command::Diff.new(opts, config: config).execute
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
desc 'export', 'export db schema to dsl'
|
|
36
|
+
method_option :config, aliases: '-c', type: :string, required: true, desc: 'Database Yaml Setting'
|
|
37
|
+
def export
|
|
38
|
+
require 'convergence/command/export'
|
|
39
|
+
opts = {}
|
|
40
|
+
Convergence::Command::Export.new(opts, config: config).execute
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
desc 'version', 'print the version'
|
|
44
|
+
def version
|
|
45
|
+
require 'convergence/version'
|
|
46
|
+
puts "version #{Convergence::VERSION}"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def config
|
|
52
|
+
return unless options[:config]
|
|
53
|
+
@config ||= Convergence::Config.load(options[:config])
|
|
54
|
+
end
|
|
55
|
+
end
|
data/lib/convergence/column.rb
CHANGED
data/lib/convergence/command.rb
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
require 'convergence/config'
|
|
2
|
+
require 'convergence/logger'
|
|
3
|
+
require 'convergence/database_connector'
|
|
4
|
+
|
|
1
5
|
class Convergence::Command
|
|
2
6
|
def initialize(opts, config: nil)
|
|
3
7
|
@opts = opts
|
|
@@ -8,23 +12,7 @@ class Convergence::Command
|
|
|
8
12
|
end
|
|
9
13
|
end
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
execute_klass =
|
|
13
|
-
if @opts[:diff]
|
|
14
|
-
Convergence::Command::Diff
|
|
15
|
-
elsif @opts[:export]
|
|
16
|
-
Convergence::Command::Export
|
|
17
|
-
elsif @opts[:dryrun]
|
|
18
|
-
Convergence::Command::Dryrun
|
|
19
|
-
elsif @opts[:apply]
|
|
20
|
-
Convergence::Command::Apply
|
|
21
|
-
end
|
|
22
|
-
if execute_klass.nil?
|
|
23
|
-
puts @opts
|
|
24
|
-
else
|
|
25
|
-
execute_klass.new(@opts, config: @config).execute
|
|
26
|
-
end
|
|
27
|
-
end
|
|
15
|
+
private
|
|
28
16
|
|
|
29
17
|
def database_adapter
|
|
30
18
|
@config.nil? ? 'mysql' : @config.adapter
|
|
@@ -37,21 +25,13 @@ class Convergence::Command
|
|
|
37
25
|
def dumper
|
|
38
26
|
@dumper ||= case database_adapter
|
|
39
27
|
when 'mysql', 'mysql2'
|
|
28
|
+
require 'convergence/dumper/mysql_schema_dumper'
|
|
40
29
|
Convergence::Dumper::MysqlSchemaDumper.new(connector)
|
|
41
30
|
else
|
|
42
31
|
fail NotImplementedError.new('unknown database adapter')
|
|
43
32
|
end
|
|
44
33
|
end
|
|
45
34
|
|
|
46
|
-
def sql_generator
|
|
47
|
-
@sql_generator ||= case database_adapter
|
|
48
|
-
when 'mysql', 'mysql2'
|
|
49
|
-
SQLGenerator::MysqlGenerator.new
|
|
50
|
-
else
|
|
51
|
-
fail NotImplementedError.new('unknown database adapter')
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
35
|
def logger
|
|
56
36
|
@logger ||= Convergence::Logger.new
|
|
57
37
|
end
|
|
@@ -1,20 +1,39 @@
|
|
|
1
1
|
require 'benchmark'
|
|
2
2
|
require 'pathname'
|
|
3
|
+
require 'convergence/command'
|
|
4
|
+
require 'convergence/dsl'
|
|
5
|
+
require 'convergence/default_parameter'
|
|
6
|
+
require 'convergence/diff'
|
|
3
7
|
|
|
4
8
|
class Convergence::Command::Apply < Convergence::Command
|
|
5
|
-
def validate!
|
|
6
|
-
fail ArgumentError.new('--config required') if @config.nil?
|
|
7
|
-
fail ArgumentError.new('--input required') unless @opts[:input]
|
|
8
|
-
end
|
|
9
|
-
|
|
10
9
|
def execute
|
|
11
|
-
validate!
|
|
12
10
|
current_dir_path = Pathname.new(@opts[:input]).realpath.dirname
|
|
13
11
|
input_tables = Convergence::DSL.parse(File.open(@opts[:input]).read, current_dir_path)
|
|
14
12
|
current_tables = dumper.dump
|
|
15
13
|
execute_sql(input_tables, current_tables)
|
|
16
14
|
end
|
|
17
15
|
|
|
16
|
+
def generate_sql(input_tables, current_tables)
|
|
17
|
+
current_tables_with_full_option =
|
|
18
|
+
Convergence::DefaultParameter.append_database_default_parameter(current_tables, database_adapter)
|
|
19
|
+
input_tables_with_full_option =
|
|
20
|
+
Convergence::DefaultParameter.append_database_default_parameter(input_tables, database_adapter)
|
|
21
|
+
delta = Convergence::Diff.new.diff(current_tables_with_full_option, input_tables_with_full_option)
|
|
22
|
+
sql_generator.generate(input_tables_with_full_option, delta, current_tables_with_full_option)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def sql_generator
|
|
28
|
+
@sql_generator ||= case database_adapter
|
|
29
|
+
when 'mysql', 'mysql2'
|
|
30
|
+
require 'convergence/sql_generator/mysql_generator'
|
|
31
|
+
SQLGenerator::MysqlGenerator.new
|
|
32
|
+
else
|
|
33
|
+
fail NotImplementedError.new('unknown database adapter')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
18
37
|
def execute_sql(input_tables, current_tables)
|
|
19
38
|
sql = generate_sql(input_tables, current_tables)
|
|
20
39
|
unless sql.strip.empty?
|
|
@@ -41,13 +60,4 @@ SET FOREIGN_KEY_CHECKS=1;
|
|
|
41
60
|
end
|
|
42
61
|
end
|
|
43
62
|
end
|
|
44
|
-
|
|
45
|
-
def generate_sql(input_tables, current_tables)
|
|
46
|
-
current_tables_with_full_option =
|
|
47
|
-
Convergence::DefaultParameter.append_database_default_parameter(current_tables, database_adapter)
|
|
48
|
-
input_tables_with_full_option =
|
|
49
|
-
Convergence::DefaultParameter.append_database_default_parameter(input_tables, database_adapter)
|
|
50
|
-
delta = Convergence::Diff.new.diff(current_tables_with_full_option, input_tables_with_full_option)
|
|
51
|
-
sql_generator.generate(input_tables_with_full_option, delta, current_tables_with_full_option)
|
|
52
|
-
end
|
|
53
63
|
end
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
end
|
|
1
|
+
require 'pathname'
|
|
2
|
+
require 'convergence/command'
|
|
3
|
+
require 'convergence/default_parameter'
|
|
4
|
+
require 'convergence/pretty_diff'
|
|
5
|
+
require 'convergence/dsl'
|
|
7
6
|
|
|
7
|
+
class Convergence::Command::Diff < Convergence::Command
|
|
8
8
|
def execute
|
|
9
|
-
validate!
|
|
10
9
|
from = Convergence::DefaultParameter.remove_database_default_parameter(from_tables, database_adapter)
|
|
11
10
|
to = Convergence::DefaultParameter.remove_database_default_parameter(to_tables, database_adapter)
|
|
12
11
|
msg = Convergence::PrettyDiff.new(from, to).output
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
require 'pathname'
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
require 'convergence/command'
|
|
3
|
+
require 'convergence/command/apply'
|
|
4
|
+
require 'convergence/dsl'
|
|
5
|
+
require 'convergence/default_parameter'
|
|
6
|
+
require 'convergence/pretty_diff'
|
|
7
7
|
|
|
8
|
+
class Convergence::Command::Dryrun < Convergence::Command
|
|
8
9
|
def execute
|
|
9
|
-
validate!
|
|
10
10
|
current_dir_path = Pathname.new(@opts[:input]).realpath.dirname
|
|
11
11
|
input_tables = Convergence::DSL.parse(File.open(@opts[:input]).read, current_dir_path)
|
|
12
12
|
current_tables = dumper.dump
|
|
@@ -15,6 +15,8 @@ class Convergence::Command::Dryrun < Convergence::Command
|
|
|
15
15
|
output_sql(input_tables, current_tables)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
private
|
|
19
|
+
|
|
18
20
|
def output_diff(input_tables, current_tables)
|
|
19
21
|
input_tables_without_default_parameter =
|
|
20
22
|
Convergence::DefaultParameter.remove_database_default_parameter(input_tables, database_adapter)
|
|
@@ -35,7 +37,7 @@ class Convergence::Command::Dryrun < Convergence::Command
|
|
|
35
37
|
.split("\n")
|
|
36
38
|
.map { |v| '# ' + v }
|
|
37
39
|
.join("\n")
|
|
38
|
-
logger.output(msg)
|
|
40
|
+
logger.output(msg) unless msg.empty?
|
|
39
41
|
msg
|
|
40
42
|
end
|
|
41
43
|
end
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
fail ArgumentError.new('--config required')
|
|
5
|
-
end
|
|
6
|
-
end
|
|
1
|
+
require 'convergence/command'
|
|
2
|
+
require 'convergence/dumper'
|
|
3
|
+
require 'convergence/default_parameter'
|
|
7
4
|
|
|
5
|
+
class Convergence::Command::Export < Convergence::Command
|
|
8
6
|
def execute
|
|
9
|
-
validate!
|
|
10
7
|
tables = Convergence::DefaultParameter.remove_database_default_parameter(dumper.dump, database_adapter)
|
|
11
8
|
msg = Convergence::Dumper.new.dump_dsl(tables)
|
|
12
9
|
logger.output(msg)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'pathname'
|
|
2
|
+
require 'convergence/command'
|
|
3
|
+
require 'convergence/command/apply'
|
|
4
|
+
require 'convergence/dsl'
|
|
5
|
+
require 'convergence/default_parameter'
|
|
6
|
+
|
|
7
|
+
class Convergence::Command::RollbackDryrun < Convergence::Command
|
|
8
|
+
def execute
|
|
9
|
+
current_dir_path = Pathname.new(@opts[:input]).realpath.dirname
|
|
10
|
+
input_tables = Convergence::DSL.parse(File.open(@opts[:input]).read, current_dir_path)
|
|
11
|
+
current_tables = dumper.dump
|
|
12
|
+
|
|
13
|
+
output_sql(current_tables, input_tables)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def output_sql(input_tables, current_tables)
|
|
19
|
+
msg = Convergence::Command::Apply
|
|
20
|
+
.new(@opts, config: @config)
|
|
21
|
+
.generate_sql(input_tables, current_tables)
|
|
22
|
+
.split("\n")
|
|
23
|
+
.map { |v| '# ' + v }
|
|
24
|
+
.join("\n")
|
|
25
|
+
logger.output(msg)
|
|
26
|
+
msg
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/convergence/config.rb
CHANGED
|
@@ -4,7 +4,33 @@ require 'yaml'
|
|
|
4
4
|
class Convergence::Config
|
|
5
5
|
ATTRIBUTES = %i[adapter database host port username password].freeze
|
|
6
6
|
|
|
7
|
-
attr_accessor(*ATTRIBUTES)
|
|
7
|
+
attr_accessor(*ATTRIBUTES, :mysql)
|
|
8
|
+
|
|
9
|
+
class MySQL
|
|
10
|
+
ATTRIBUTES = %i[ssl_mode sslkey sslcert sslca sslcapath sslcipher sslverify].freeze
|
|
11
|
+
|
|
12
|
+
attr_accessor(*ATTRIBUTES)
|
|
13
|
+
|
|
14
|
+
def initialize(attributes)
|
|
15
|
+
attributes.each do |k, v|
|
|
16
|
+
next if v.nil?
|
|
17
|
+
next if !ATTRIBUTES.include?(k.to_sym) && !ATTRIBUTES.include?(k.to_s)
|
|
18
|
+
instance_variable_set("@#{k}", v)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def ssl_options
|
|
23
|
+
{
|
|
24
|
+
ssl_mode: ssl_mode,
|
|
25
|
+
sslkey: sslkey,
|
|
26
|
+
sslcert: sslcert,
|
|
27
|
+
sslca: sslca,
|
|
28
|
+
sslcapath: sslcapath,
|
|
29
|
+
sslcipher: sslcipher,
|
|
30
|
+
sslverify: sslverify
|
|
31
|
+
}.compact
|
|
32
|
+
end
|
|
33
|
+
end
|
|
8
34
|
|
|
9
35
|
def initialize(attributes)
|
|
10
36
|
attributes.each do |k, v|
|
|
@@ -12,6 +38,10 @@ class Convergence::Config
|
|
|
12
38
|
next if !ATTRIBUTES.include?(k.to_sym) && !ATTRIBUTES.include?(k.to_s)
|
|
13
39
|
instance_variable_set("@#{k}", v)
|
|
14
40
|
end
|
|
41
|
+
case adapter
|
|
42
|
+
when 'mysql', 'mysql2'
|
|
43
|
+
@mysql = MySQL.new(attributes)
|
|
44
|
+
end
|
|
15
45
|
end
|
|
16
46
|
|
|
17
47
|
def self.load(yaml_path)
|
|
@@ -5,6 +5,7 @@ class Convergence::DatabaseConnector
|
|
|
5
5
|
@connector =
|
|
6
6
|
case config.adapter
|
|
7
7
|
when 'mysql', 'mysql2'
|
|
8
|
+
require 'convergence/database_connector/mysql_connector'
|
|
8
9
|
Convergence::DatabaseConnector::MysqlConnector.new(config)
|
|
9
10
|
else
|
|
10
11
|
fail NotImplementedError.new("#{config.adapter} not supported yet")
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
require 'mysql2'
|
|
2
|
+
require 'convergence/database_connector'
|
|
3
|
+
|
|
2
4
|
class Convergence::DatabaseConnector::MysqlConnector
|
|
3
5
|
attr_reader :config
|
|
4
6
|
|
|
@@ -8,21 +10,25 @@ class Convergence::DatabaseConnector::MysqlConnector
|
|
|
8
10
|
|
|
9
11
|
def client(database_name = @config.database)
|
|
10
12
|
@mysql ||= Mysql2::Client.new(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
{
|
|
14
|
+
host: @config.host,
|
|
15
|
+
port: @config.port,
|
|
16
|
+
username: @config.username,
|
|
17
|
+
password: @config.password,
|
|
18
|
+
database: database_name
|
|
19
|
+
}.merge!(@config.mysql.ssl_options)
|
|
16
20
|
)
|
|
17
21
|
end
|
|
18
22
|
|
|
19
23
|
def schema_client
|
|
20
24
|
@schema_mysql ||= Mysql2::Client.new(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
{
|
|
26
|
+
host: @config.host,
|
|
27
|
+
port: @config.port,
|
|
28
|
+
username: @config.username,
|
|
29
|
+
password: @config.password,
|
|
30
|
+
database: 'information_schema'
|
|
31
|
+
}.merge!(@config.mysql.ssl_options)
|
|
26
32
|
)
|
|
27
33
|
end
|
|
28
34
|
end
|
|
@@ -2,6 +2,7 @@ class Convergence::DefaultParameter
|
|
|
2
2
|
def initialize(adapter)
|
|
3
3
|
case adapter.downcase
|
|
4
4
|
when 'mysql', 'mysql2'
|
|
5
|
+
require 'convergence/default_parameter/mysql_default_parameter'
|
|
5
6
|
@parameter_klass = Convergence::DefaultParameter::MysqlDefaultParameter.new
|
|
6
7
|
else
|
|
7
8
|
fail NotImplementedError.new("unknown adapter #{config.adapter}.")
|
data/lib/convergence/diff.rb
CHANGED
|
@@ -99,7 +99,7 @@ class Convergence::Diff
|
|
|
99
99
|
from_columns = from.columns.keys
|
|
100
100
|
to_columns = to.columns.keys
|
|
101
101
|
order_changed_columns = Diff::LCS.diff(from_columns, to_columns)
|
|
102
|
-
.flatten
|
|
102
|
+
.flatten(1)
|
|
103
103
|
.select(&:adding?)
|
|
104
104
|
.map(&:element)
|
|
105
105
|
order_changed_columns.each do |column|
|
data/lib/convergence/dsl.rb
CHANGED
data/lib/convergence/dumper.rb
CHANGED
data/lib/convergence/table.rb
CHANGED
data/lib/convergence/version.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
|
+
require 'convergence/command/dryrun'
|
|
2
3
|
|
|
3
4
|
describe 'Command::Dryrun#execute' do
|
|
4
5
|
def execute(dsl_path)
|
|
5
6
|
parse_option = {
|
|
6
|
-
dryrun: true,
|
|
7
7
|
input: File.expand_path("#{File.dirname(__FILE__)}/../fixtures/#{dsl_path}")
|
|
8
8
|
}
|
|
9
|
-
Convergence::Command.new(parse_option, config: mysql_settings).execute
|
|
9
|
+
Convergence::Command::Dryrun.new(parse_option, config: mysql_settings).execute
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
describe 'change table options' do
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
|
+
require 'convergence/command/apply'
|
|
2
3
|
|
|
3
4
|
describe 'Changeable Foreign key' do
|
|
4
5
|
after(:each) do
|
|
@@ -7,10 +8,9 @@ describe 'Changeable Foreign key' do
|
|
|
7
8
|
|
|
8
9
|
def execute(dsl_path)
|
|
9
10
|
parse_option = {
|
|
10
|
-
apply: true,
|
|
11
11
|
input: File.expand_path("#{File.dirname(__FILE__)}/../fixtures/#{dsl_path}")
|
|
12
12
|
}
|
|
13
|
-
Convergence::Command.new(parse_option, config: mysql_settings).execute
|
|
13
|
+
Convergence::Command::Apply.new(parse_option, config: mysql_settings).execute
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
describe 'drop foreign key' do
|
data/spec/spec_helper.rb
CHANGED
|
@@ -3,6 +3,7 @@ require 'bundler/setup'
|
|
|
3
3
|
require 'rspec'
|
|
4
4
|
require 'pry'
|
|
5
5
|
require 'convergence'
|
|
6
|
+
require 'convergence/database_connector'
|
|
6
7
|
Dir["#{File.dirname(__FILE__)}/integrations/**/*.rb"].each { |f| require f }
|
|
7
8
|
|
|
8
9
|
$default_output = File.open('/dev/null', 'w')
|
|
@@ -20,14 +21,12 @@ def rollback
|
|
|
20
21
|
.map(&:strip)
|
|
21
22
|
.reject(&:empty?)
|
|
22
23
|
sqls.each do |sql|
|
|
23
|
-
Convergence::
|
|
24
|
-
.connector
|
|
24
|
+
Convergence::DatabaseConnector.new(mysql_settings)
|
|
25
25
|
.client
|
|
26
26
|
.query("#{sql};")
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
RSpec.configure do |config|
|
|
31
|
-
config.
|
|
32
|
-
config.run_all_when_everything_filtered = true
|
|
31
|
+
config.filter_run_when_matching :focus
|
|
33
32
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: convergence
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Shinsuke Nishio
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-09-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: mysql2
|
|
@@ -53,61 +53,47 @@ dependencies:
|
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: thor
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '0.20'
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: bundler
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '1.7'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '1.7'
|
|
68
|
+
version: '0.20'
|
|
83
69
|
- !ruby/object:Gem::Dependency
|
|
84
70
|
name: rake
|
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
|
86
72
|
requirements:
|
|
87
73
|
- - "~>"
|
|
88
74
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
75
|
+
version: '13.0'
|
|
90
76
|
type: :development
|
|
91
77
|
prerelease: false
|
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
79
|
requirements:
|
|
94
80
|
- - "~>"
|
|
95
81
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
82
|
+
version: '13.0'
|
|
97
83
|
- !ruby/object:Gem::Dependency
|
|
98
84
|
name: rspec
|
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
|
100
86
|
requirements:
|
|
101
87
|
- - ">="
|
|
102
88
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
89
|
+
version: '3.5'
|
|
104
90
|
type: :development
|
|
105
91
|
prerelease: false
|
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
93
|
requirements:
|
|
108
94
|
- - ">="
|
|
109
95
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
96
|
+
version: '3.5'
|
|
111
97
|
- !ruby/object:Gem::Dependency
|
|
112
98
|
name: rubocop
|
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -187,12 +173,14 @@ files:
|
|
|
187
173
|
- convergence.gemspec
|
|
188
174
|
- database.yml.example
|
|
189
175
|
- lib/convergence.rb
|
|
176
|
+
- lib/convergence/cli.rb
|
|
190
177
|
- lib/convergence/column.rb
|
|
191
178
|
- lib/convergence/command.rb
|
|
192
179
|
- lib/convergence/command/apply.rb
|
|
193
180
|
- lib/convergence/command/diff.rb
|
|
194
181
|
- lib/convergence/command/dryrun.rb
|
|
195
182
|
- lib/convergence/command/export.rb
|
|
183
|
+
- lib/convergence/command/rollback_dryrun.rb
|
|
196
184
|
- lib/convergence/config.rb
|
|
197
185
|
- lib/convergence/database_connector.rb
|
|
198
186
|
- lib/convergence/database_connector/mysql_connector.rb
|
|
@@ -241,15 +229,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
241
229
|
requirements:
|
|
242
230
|
- - ">="
|
|
243
231
|
- !ruby/object:Gem::Version
|
|
244
|
-
version: 2.
|
|
232
|
+
version: 2.4.0
|
|
245
233
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
246
234
|
requirements:
|
|
247
235
|
- - ">="
|
|
248
236
|
- !ruby/object:Gem::Version
|
|
249
237
|
version: '0'
|
|
250
238
|
requirements: []
|
|
251
|
-
|
|
252
|
-
rubygems_version: 2.6.8
|
|
239
|
+
rubygems_version: 3.1.2
|
|
253
240
|
signing_key:
|
|
254
241
|
specification_version: 4
|
|
255
242
|
summary: DB Schema management tool
|