ridgepole 0.6.4.beta5 → 0.6.4.beta6
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 +4 -4
- data/.travis.yml +2 -4
- data/README.md +1 -0
- data/bin/ridgepole +0 -1
- data/lib/ridgepole/client.rb +0 -8
- data/lib/ridgepole/execute_expander.rb +45 -63
- data/lib/ridgepole/ext/abstract_mysql_adapter.rb +19 -9
- data/lib/ridgepole/ext/schema_dumper.rb +31 -22
- data/lib/ridgepole/migration_ext.rb +51 -40
- data/lib/ridgepole/schema_dumper_ext.rb +13 -6
- data/lib/ridgepole/schema_statements_ext.rb +27 -4
- data/lib/ridgepole/version.rb +1 -1
- data/ridgepole.gemspec +0 -1
- data/spec/mysql/cli/ridgepole_spec.rb +0 -1
- data/spec/spec_helper.rb +0 -4
- metadata +23 -42
- data/lib/ridgepole/ext/migration_comments.rb +0 -37
- data/spec/mysql/0_comment/comment_mysql_awesome_spec.rb +0 -45
- data/spec/mysql/0_comment/comment_spec.rb +0 -183
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5656989ac8ac6af8579e4280dd2a62faeebd4251
|
4
|
+
data.tar.gz: 37efd93b1be528a4d2e15dd30e0c28ed52448d11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5737d53986f3364fad3e6714055b8b35fa53da440034a9125bd3d3ef8babaa2982933b470b431b98df2c975f2c3359599a3fc64bb00a735987621b290ed39185
|
7
|
+
data.tar.gz: 4117e40778af880a1d74e0193f8d0fb3ec0f51e6e394a4b1e307452205af3346ba5ac70d6fbce514057a70f91e28461921a03ed9fb5f9dc7655668f89fdab154
|
data/.travis.yml
CHANGED
@@ -13,10 +13,8 @@ script:
|
|
13
13
|
- bundle exec rake
|
14
14
|
env:
|
15
15
|
matrix:
|
16
|
-
- ENABLE_MYSQL_AWESOME=0
|
17
|
-
- ENABLE_MYSQL_AWESOME=1
|
18
|
-
- ENABLE_MYSQL_AWESOME=0 ENABLE_MIGRATION_COMMENTS=1
|
19
|
-
- ENABLE_MYSQL_AWESOME=1 ENABLE_MIGRATION_COMMENTS=1
|
16
|
+
- ENABLE_MYSQL_AWESOME=0
|
17
|
+
- ENABLE_MYSQL_AWESOME=1
|
20
18
|
- POSTGRESQL=1
|
21
19
|
addons:
|
22
20
|
postgresql: "9.4"
|
data/README.md
CHANGED
@@ -48,6 +48,7 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
|
|
48
48
|
* Add `--alter-extra` option
|
49
49
|
* Add `--dump-with-default-fk-name` option
|
50
50
|
* Support `t.index` ([pull#64](https://github.com/winebarrel/ridgepole/pull/64))
|
51
|
+
* Remove migration_comments
|
51
52
|
|
52
53
|
## Installation
|
53
54
|
|
data/bin/ridgepole
CHANGED
@@ -114,7 +114,6 @@ ARGV.options do |opt|
|
|
114
114
|
opt.on('', '--dump-without-table-options') { options[:dump_without_table_options] = true }
|
115
115
|
opt.on('', '--dump-with-default-fk-name') { options[:dumb_with_default_fk_name] = true }
|
116
116
|
opt.on('', '--index-removed-drop-column') { options[:index_removed_drop_column] = true }
|
117
|
-
opt.on('', '--enable-migration-comments') { options[:enable_migration_comments] = true }
|
118
117
|
opt.on('-r', '--require LIBS', Array) {|v| v.each {|i| require i } }
|
119
118
|
opt.on('' , '--log-file LOG_FILE') {|v| options[:log_file] = v }
|
120
119
|
opt.on('' , '--verbose') { Ridgepole::Logger.verbose = true }
|
data/lib/ridgepole/client.rb
CHANGED
@@ -14,15 +14,7 @@ class Ridgepole::Client
|
|
14
14
|
@parser = Ridgepole::DSLParser.new(@options)
|
15
15
|
@diff = Ridgepole::Diff.new(@options)
|
16
16
|
|
17
|
-
if @options[:enable_migration_comments]
|
18
|
-
require 'migration_comments'
|
19
|
-
end
|
20
|
-
|
21
17
|
if @options[:enable_mysql_awesome]
|
22
|
-
if @options[:enable_migration_comments]
|
23
|
-
require 'ridgepole/ext/migration_comments'
|
24
|
-
end
|
25
|
-
|
26
18
|
require 'activerecord/mysql/awesome/base'
|
27
19
|
end
|
28
20
|
|
@@ -5,6 +5,48 @@ class Ridgepole::ExecuteExpander
|
|
5
5
|
end
|
6
6
|
end
|
7
7
|
|
8
|
+
module ConnectionAdapterExt
|
9
|
+
def execute(sql, name = nil)
|
10
|
+
if Ridgepole::ExecuteExpander.noop
|
11
|
+
if (callback = Ridgepole::ExecuteExpander.callback)
|
12
|
+
sql = append_alter_extra(sql)
|
13
|
+
callback.call(sql, name)
|
14
|
+
end
|
15
|
+
|
16
|
+
if sql =~ /\A(SELECT|SHOW)\b/i
|
17
|
+
begin
|
18
|
+
super(sql, name)
|
19
|
+
rescue => e
|
20
|
+
Stub.new
|
21
|
+
end
|
22
|
+
else
|
23
|
+
Stub.new
|
24
|
+
end
|
25
|
+
elsif Ridgepole::ExecuteExpander.use_script
|
26
|
+
if sql =~ /\A(SELECT|SHOW)\b/i
|
27
|
+
super(sql, name)
|
28
|
+
else
|
29
|
+
sql = append_alter_extra(sql)
|
30
|
+
Ridgepole::ExecuteExpander.sql_executer.execute(sql)
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
else
|
34
|
+
sql = append_alter_extra(sql)
|
35
|
+
super(sql, name)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def append_alter_extra(sql)
|
42
|
+
if Ridgepole::ExecuteExpander.alter_extra and sql =~ /\AALTER\b/i
|
43
|
+
sql = sql + ',' + Ridgepole::ExecuteExpander.alter_extra
|
44
|
+
end
|
45
|
+
|
46
|
+
sql
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
8
50
|
cattr_accessor :noop, :instance_writer => false, :instance_reader => false
|
9
51
|
cattr_accessor :callback, :instance_writer => false, :instance_reader => false
|
10
52
|
cattr_accessor :use_script, :instance_writer => false, :instance_reader => false
|
@@ -44,71 +86,11 @@ class Ridgepole::ExecuteExpander
|
|
44
86
|
end
|
45
87
|
|
46
88
|
def expand_execute(connection)
|
47
|
-
return if connection.
|
48
|
-
|
49
|
-
class << connection
|
50
|
-
def execute_with_ext(sql, name = nil)
|
51
|
-
if Ridgepole::ExecuteExpander.noop
|
52
|
-
if (callback = Ridgepole::ExecuteExpander.callback)
|
53
|
-
sql = append_alter_extra(sql)
|
54
|
-
callback.call(sql, name)
|
55
|
-
end
|
89
|
+
return if connection.is_a?(ConnectionAdapterExt)
|
56
90
|
|
57
|
-
|
58
|
-
|
59
|
-
execute_without_ext(sql, name)
|
60
|
-
rescue => e
|
61
|
-
Stub.new
|
62
|
-
end
|
63
|
-
else
|
64
|
-
Stub.new
|
65
|
-
end
|
66
|
-
elsif Ridgepole::ExecuteExpander.use_script
|
67
|
-
if sql =~ /\A(SELECT|SHOW)\b/i
|
68
|
-
execute_without_ext(sql, name)
|
69
|
-
else
|
70
|
-
sql = append_alter_extra(sql)
|
71
|
-
Ridgepole::ExecuteExpander.sql_executer.execute(sql)
|
72
|
-
nil
|
73
|
-
end
|
74
|
-
else
|
75
|
-
sql = append_alter_extra(sql)
|
76
|
-
execute_without_ext(sql, name)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
alias_method_chain :execute, :ext
|
80
|
-
|
81
|
-
private
|
82
|
-
|
83
|
-
def append_alter_extra(sql)
|
84
|
-
if Ridgepole::ExecuteExpander.alter_extra and sql =~ /\AALTER\b/i
|
85
|
-
sql = sql + ',' + Ridgepole::ExecuteExpander.alter_extra
|
86
|
-
end
|
87
|
-
|
88
|
-
sql
|
89
|
-
end
|
91
|
+
connection.class_eval do
|
92
|
+
prepend ConnectionAdapterExt
|
90
93
|
end
|
91
94
|
end
|
92
95
|
end # of class methods
|
93
96
|
end
|
94
|
-
|
95
|
-
require 'active_record/connection_adapters/abstract/schema_statements'
|
96
|
-
|
97
|
-
module ActiveRecord::ConnectionAdapters::SchemaStatements
|
98
|
-
def index_name_exists_with_noop?(table_name, column_name, options = {})
|
99
|
-
if Ridgepole::ExecuteExpander.noop
|
100
|
-
caller_methods = caller.map {|i| i =~ /:\d+:in `(.+)'/ ? $1 : '' }
|
101
|
-
|
102
|
-
if caller_methods.any? {|i| i =~ /\Aremove_index/ }
|
103
|
-
true
|
104
|
-
elsif caller_methods.any? {|i| i =~ /\Aadd_index/ }
|
105
|
-
false
|
106
|
-
else
|
107
|
-
index_name_exists_without_noop?(table_name, column_name, options)
|
108
|
-
end
|
109
|
-
else
|
110
|
-
index_name_exists_without_noop?(table_name, column_name, options)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
alias_method_chain :index_name_exists?, :noop
|
114
|
-
end
|
@@ -1,16 +1,26 @@
|
|
1
1
|
require 'active_record/connection_adapters/abstract_mysql_adapter'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
module Ridgepole
|
4
|
+
module Ext
|
5
|
+
module AbstractMysqlAdapter
|
6
|
+
def add_index(table_name, column_name, options = {})
|
7
|
+
index_name, index_type, index_columns, index_options, index_algorithm, index_using = add_index_options(table_name, column_name, options)
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
+
# cannot specify index_algorithm
|
10
|
+
execute "ALTER TABLE #{quote_table_name(table_name)} ADD #{index_type} INDEX #{quote_column_name(index_name)} #{index_using} (#{index_columns})#{index_options}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def remove_index!(table_name, index_name)
|
14
|
+
execute "ALTER TABLE #{quote_table_name(table_name)} DROP INDEX #{quote_column_name(index_name)}"
|
15
|
+
end
|
16
|
+
end
|
9
17
|
end
|
10
|
-
|
18
|
+
end
|
11
19
|
|
12
|
-
|
13
|
-
|
20
|
+
module ActiveRecord
|
21
|
+
module ConnectionAdapters
|
22
|
+
class AbstractMysqlAdapter
|
23
|
+
include Ridgepole::Ext::AbstractMysqlAdapter
|
24
|
+
end
|
14
25
|
end
|
15
|
-
alias_method_chain :remove_index!, :alter
|
16
26
|
end
|
@@ -1,32 +1,41 @@
|
|
1
1
|
require 'active_record/schema_dumper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
parts << "column: #{foreign_key.column.inspect}"
|
14
|
-
end
|
3
|
+
module Ridgepole
|
4
|
+
module Ext
|
5
|
+
module SchemaDumper
|
6
|
+
def foreign_keys(table, stream)
|
7
|
+
if (foreign_keys = @connection.foreign_keys(table)).any?
|
8
|
+
add_foreign_key_statements = foreign_keys.map do |foreign_key|
|
9
|
+
parts = [
|
10
|
+
"add_foreign_key #{remove_prefix_and_suffix(foreign_key.from_table).inspect}",
|
11
|
+
remove_prefix_and_suffix(foreign_key.to_table).inspect,
|
12
|
+
]
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
if foreign_key.column != @connection.foreign_key_column_for(foreign_key.to_table)
|
15
|
+
parts << "column: #{foreign_key.column.inspect}"
|
16
|
+
end
|
19
17
|
|
20
|
-
|
18
|
+
if foreign_key.custom_primary_key?
|
19
|
+
parts << "primary_key: #{foreign_key.primary_key.inspect}"
|
20
|
+
end
|
21
21
|
|
22
|
-
|
23
|
-
parts << "on_delete: #{foreign_key.on_delete.inspect}" if foreign_key.on_delete
|
22
|
+
parts << "name: #{foreign_key.name.inspect}"
|
24
23
|
|
25
|
-
|
26
|
-
|
24
|
+
parts << "on_update: #{foreign_key.on_update.inspect}" if foreign_key.on_update
|
25
|
+
parts << "on_delete: #{foreign_key.on_delete.inspect}" if foreign_key.on_delete
|
27
26
|
|
28
|
-
|
27
|
+
" #{parts.join(', ')}"
|
28
|
+
end
|
29
|
+
|
30
|
+
stream.puts add_foreign_key_statements.sort.join("\n")
|
31
|
+
end
|
32
|
+
end
|
29
33
|
end
|
30
34
|
end
|
31
|
-
|
35
|
+
end
|
36
|
+
|
37
|
+
module ActiveRecord
|
38
|
+
class SchemaDumper
|
39
|
+
prepend Ridgepole::Ext::SchemaDumper
|
40
|
+
end
|
32
41
|
end
|
@@ -1,58 +1,69 @@
|
|
1
1
|
require 'active_record/migration'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
12
|
-
alias_method_chain :write, :logging
|
13
|
-
|
14
|
-
def parse_text(text)
|
15
|
-
return unless self.time_recorder
|
3
|
+
module Ridgepole
|
4
|
+
module MigrationExt
|
5
|
+
def self.included(klass)
|
6
|
+
klass.class_eval do
|
7
|
+
cattr_accessor :time_recorder
|
8
|
+
cattr_accessor :disable_logging
|
9
|
+
end
|
10
|
+
end
|
16
11
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
self.time_recorder.add_value($1.to_f)
|
12
|
+
def write(text = '')
|
13
|
+
logger = Ridgepole::Logger.instance
|
14
|
+
logger.info(text) unless self.disable_logging
|
15
|
+
parse_text(text)
|
22
16
|
end
|
23
|
-
end
|
24
17
|
|
25
|
-
|
26
|
-
|
18
|
+
def parse_text(text)
|
19
|
+
return unless self.time_recorder
|
27
20
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
21
|
+
case text
|
22
|
+
when /\A--\s+(.+)\Z/
|
23
|
+
self.time_recorder.add_key($1)
|
24
|
+
when /\A\s+->\s+(\d+\.\d+)s\Z/
|
25
|
+
self.time_recorder.add_value($1.to_f)
|
26
|
+
end
|
34
27
|
end
|
35
28
|
|
36
|
-
|
37
|
-
|
29
|
+
def self.record_time
|
30
|
+
result = nil
|
38
31
|
|
39
|
-
|
40
|
-
|
32
|
+
begin
|
33
|
+
self.time_recorder = TimeRecorder.new
|
34
|
+
yield
|
35
|
+
result = self.time_recorder.result
|
36
|
+
ensure
|
37
|
+
self.time_recorder = nil
|
38
|
+
end
|
41
39
|
|
42
|
-
|
43
|
-
@result = {}
|
40
|
+
result
|
44
41
|
end
|
45
42
|
|
46
|
-
|
47
|
-
|
48
|
-
|
43
|
+
class TimeRecorder
|
44
|
+
attr_reader :result
|
45
|
+
|
46
|
+
def initialize
|
47
|
+
@result = {}
|
48
|
+
end
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
@result[@key] = value
|
50
|
+
def add_key(key)
|
51
|
+
@key = key
|
53
52
|
end
|
54
53
|
|
55
|
-
|
54
|
+
def add_value(value)
|
55
|
+
if @key
|
56
|
+
@result[@key] = value
|
57
|
+
end
|
58
|
+
|
59
|
+
@key = nil
|
60
|
+
end
|
56
61
|
end
|
57
62
|
end
|
58
63
|
end
|
64
|
+
|
65
|
+
module ActiveRecord
|
66
|
+
class Migration
|
67
|
+
include Ridgepole::MigrationExt
|
68
|
+
end
|
69
|
+
end
|
@@ -1,10 +1,17 @@
|
|
1
1
|
require 'active_record/schema_dumper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
module Ridgepole
|
4
|
+
module SchemaDumperExt
|
5
|
+
def table(table, stream)
|
6
|
+
logger = Ridgepole::Logger.instance
|
7
|
+
logger.verbose_info("# #{table}")
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module ActiveRecord
|
14
|
+
class SchemaDumper
|
15
|
+
prepend Ridgepole::SchemaDumperExt
|
8
16
|
end
|
9
|
-
alias_method_chain :table, :logging
|
10
17
|
end
|
@@ -1,9 +1,32 @@
|
|
1
1
|
require 'active_record/connection_adapters/abstract/schema_statements'
|
2
2
|
|
3
|
-
module
|
4
|
-
|
5
|
-
|
3
|
+
module Ridgepole
|
4
|
+
module SchemaStatementsExt
|
5
|
+
def index_name_exists?(table_name, column_name, options = {})
|
6
|
+
if Ridgepole::ExecuteExpander.noop
|
7
|
+
caller_methods = caller.map {|i| i =~ /:\d+:in `(.+)'/ ? $1 : '' }
|
8
|
+
if caller_methods.any? {|i| i =~ /\Aremove_index/ }
|
9
|
+
true
|
10
|
+
elsif caller_methods.any? {|i| i =~ /\Aadd_index/ }
|
11
|
+
false
|
12
|
+
else
|
13
|
+
super
|
14
|
+
end
|
15
|
+
else
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def rename_table_indexes(table_name, new_name)
|
21
|
+
# Nothing to do
|
22
|
+
end
|
6
23
|
end
|
24
|
+
end
|
7
25
|
|
8
|
-
|
26
|
+
module ActiveRecord
|
27
|
+
module ConnectionAdapters
|
28
|
+
class AbstractAdapter
|
29
|
+
include Ridgepole::SchemaStatementsExt
|
30
|
+
end
|
31
|
+
end
|
9
32
|
end
|
data/lib/ridgepole/version.rb
CHANGED
data/ridgepole.gemspec
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ridgepole
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.4.
|
4
|
+
version: 0.6.4.beta6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
@@ -14,128 +14,114 @@ dependencies:
|
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 4.2.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.2.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 3.0.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 3.0.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mysql2
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 0.3.20
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.3.20
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: pg
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: coveralls
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: activerecord-mysql-awesome
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: 0.0.7
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 0.0.7
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: migration_comments
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - '>='
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - '>='
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
125
|
description: Ridgepole is a tool to manage DB schema. It defines DB schema using Rails
|
140
126
|
DSL, and updates DB schema according to DSL.
|
141
127
|
email:
|
@@ -145,9 +131,9 @@ executables:
|
|
145
131
|
extensions: []
|
146
132
|
extra_rdoc_files: []
|
147
133
|
files:
|
148
|
-
- .gitignore
|
149
|
-
- .rspec
|
150
|
-
- .travis.yml
|
134
|
+
- ".gitignore"
|
135
|
+
- ".rspec"
|
136
|
+
- ".travis.yml"
|
151
137
|
- Gemfile
|
152
138
|
- LICENSE.txt
|
153
139
|
- README.md
|
@@ -163,7 +149,6 @@ files:
|
|
163
149
|
- lib/ridgepole/dumper.rb
|
164
150
|
- lib/ridgepole/execute_expander.rb
|
165
151
|
- lib/ridgepole/ext/abstract_mysql_adapter.rb
|
166
|
-
- lib/ridgepole/ext/migration_comments.rb
|
167
152
|
- lib/ridgepole/ext/schema_dumper.rb
|
168
153
|
- lib/ridgepole/external_sql_executer.rb
|
169
154
|
- lib/ridgepole/logger.rb
|
@@ -172,8 +157,6 @@ files:
|
|
172
157
|
- lib/ridgepole/schema_statements_ext.rb
|
173
158
|
- lib/ridgepole/version.rb
|
174
159
|
- ridgepole.gemspec
|
175
|
-
- spec/mysql/0_comment/comment_mysql_awesome_spec.rb
|
176
|
-
- spec/mysql/0_comment/comment_spec.rb
|
177
160
|
- spec/mysql/bigint_pk/bigint_pkspec.rb
|
178
161
|
- spec/mysql/cli/config_spec.rb
|
179
162
|
- spec/mysql/cli/ridgepole_spec.rb
|
@@ -275,23 +258,21 @@ require_paths:
|
|
275
258
|
- lib
|
276
259
|
required_ruby_version: !ruby/object:Gem::Requirement
|
277
260
|
requirements:
|
278
|
-
- -
|
261
|
+
- - ">="
|
279
262
|
- !ruby/object:Gem::Version
|
280
263
|
version: '0'
|
281
264
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
282
265
|
requirements:
|
283
|
-
- -
|
266
|
+
- - ">"
|
284
267
|
- !ruby/object:Gem::Version
|
285
268
|
version: 1.3.1
|
286
269
|
requirements: []
|
287
270
|
rubyforge_project:
|
288
|
-
rubygems_version: 2.
|
271
|
+
rubygems_version: 2.4.5.1
|
289
272
|
signing_key:
|
290
273
|
specification_version: 4
|
291
274
|
summary: Ridgepole is a tool to manage DB schema.
|
292
275
|
test_files:
|
293
|
-
- spec/mysql/0_comment/comment_mysql_awesome_spec.rb
|
294
|
-
- spec/mysql/0_comment/comment_spec.rb
|
295
276
|
- spec/mysql/bigint_pk/bigint_pkspec.rb
|
296
277
|
- spec/mysql/cli/config_spec.rb
|
297
278
|
- spec/mysql/cli/ridgepole_spec.rb
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'migration_comments/active_record/schema_dumper'
|
2
|
-
|
3
|
-
module MigrationComments::ActiveRecord
|
4
|
-
module SchemaDumper
|
5
|
-
def append_comments(table, stream)
|
6
|
-
table_name = table.inspect.gsub('"', '')
|
7
|
-
column_comments = @connection.retrieve_column_comments(table_name)
|
8
|
-
comment_stream = StringIO.new
|
9
|
-
lines = []
|
10
|
-
col_names = {}
|
11
|
-
|
12
|
-
while (line = stream.gets)
|
13
|
-
content = line.chomp
|
14
|
-
|
15
|
-
if content =~ /t\.\w+\s+"(\w+)"/
|
16
|
-
col_names[lines.size] = $1.to_sym
|
17
|
-
end
|
18
|
-
|
19
|
-
lines << content
|
20
|
-
end
|
21
|
-
|
22
|
-
len = col_names.keys.map{|index| lines[index]}.map(&:length).max + 2 unless col_names.empty?
|
23
|
-
|
24
|
-
lines.each_with_index do |line, index|
|
25
|
-
if col_names[index]
|
26
|
-
comment = column_comments[col_names[index]]
|
27
|
-
line << ' ' * (len - line.length) << "# #{comment}" unless comment.blank?
|
28
|
-
end
|
29
|
-
|
30
|
-
comment_stream.puts line
|
31
|
-
end
|
32
|
-
|
33
|
-
comment_stream.rewind
|
34
|
-
comment_stream
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
unless postgresql?
|
2
|
-
if migration_comments_enabled?
|
3
|
-
if mysql_awesome_enabled?
|
4
|
-
describe 'Ridgepole::Client#diff -> migrate' do
|
5
|
-
context 'when change column (add comment)' do
|
6
|
-
let(:dsl) {
|
7
|
-
<<-RUBY
|
8
|
-
create_table "employee_clubs", unsigned: true, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='テーブルコメント'" do |t|
|
9
|
-
t.integer "emp_no", limit: 4, null: false, unsigned: true
|
10
|
-
t.integer "club_id", limit: 4, null: false
|
11
|
-
t.string "string", limit: 255, null: false, collation: "utf8mb4_bin" # カラムコメント
|
12
|
-
t.text "text", limit: 65535, null: false
|
13
|
-
end
|
14
|
-
RUBY
|
15
|
-
}
|
16
|
-
|
17
|
-
before do
|
18
|
-
subject.diff('').migrate
|
19
|
-
|
20
|
-
ActiveRecord::Base.connection.raw_connection.query(<<-EOS)
|
21
|
-
CREATE TABLE `employee_clubs` (
|
22
|
-
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
23
|
-
`emp_no` int(11) unsigned NOT NULL ,
|
24
|
-
`club_id` int(11) NOT NULL ,
|
25
|
-
`string` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'カラムコメント',
|
26
|
-
`text` text NOT NULL,
|
27
|
-
PRIMARY KEY (`id`)
|
28
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='テーブルコメント';
|
29
|
-
EOS
|
30
|
-
end
|
31
|
-
|
32
|
-
subject do
|
33
|
-
client(enable_migration_comments: true, dump_without_table_options: false)
|
34
|
-
end
|
35
|
-
|
36
|
-
it {
|
37
|
-
delta = subject.diff(dsl)
|
38
|
-
expect(delta.differ?).to be_falsey
|
39
|
-
expect(subject.dump).to eq dsl.strip_heredoc.strip
|
40
|
-
}
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,183 +0,0 @@
|
|
1
|
-
unless postgresql?
|
2
|
-
if migration_comments_enabled?
|
3
|
-
unless mysql_awesome_enabled?
|
4
|
-
describe 'Ridgepole::Client#diff -> migrate' do
|
5
|
-
context 'when change column (add comment)' do
|
6
|
-
let(:actual_dsl) {
|
7
|
-
<<-RUBY
|
8
|
-
create_table "employee_clubs", force: :cascade do |t|
|
9
|
-
t.integer "emp_no", limit: 4, null: false
|
10
|
-
t.integer "club_id", limit: 4, null: false
|
11
|
-
t.string "string", limit: 255, null: false
|
12
|
-
t.text "text", limit: 65535, null: false
|
13
|
-
end
|
14
|
-
RUBY
|
15
|
-
}
|
16
|
-
|
17
|
-
let(:expected_dsl) {
|
18
|
-
<<-RUBY
|
19
|
-
create_table "employee_clubs", force: :cascade do |t|
|
20
|
-
t.integer "emp_no", limit: 4, null: false, comment: "any comment"
|
21
|
-
t.integer "club_id", limit: 4, null: false, comment: "any comment2"
|
22
|
-
t.string "string", limit: 255, null: false, comment: "any comment3"
|
23
|
-
t.text "text", limit: 65535, null: false, comment: "any comment4"
|
24
|
-
end
|
25
|
-
RUBY
|
26
|
-
}
|
27
|
-
|
28
|
-
before { subject.diff(actual_dsl).migrate }
|
29
|
-
subject { client(enable_migration_comments: true) }
|
30
|
-
|
31
|
-
it {
|
32
|
-
delta = subject.diff(expected_dsl)
|
33
|
-
expect(delta.differ?).to be_truthy
|
34
|
-
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
35
|
-
delta.migrate
|
36
|
-
expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
|
37
|
-
}
|
38
|
-
end
|
39
|
-
|
40
|
-
context 'when change column (delete comment)' do
|
41
|
-
let(:actual_dsl) {
|
42
|
-
<<-RUBY
|
43
|
-
create_table "employee_clubs", force: :cascade do |t|
|
44
|
-
t.integer "emp_no", limit: 4, null: false, comment: "any comment"
|
45
|
-
t.integer "club_id", limit: 4, null: false, comment: "any comment2"
|
46
|
-
t.string "string", limit: 255, null: false, comment: "any comment3"
|
47
|
-
t.text "text", limit: 65535, null: false, comment: "any comment4"
|
48
|
-
end
|
49
|
-
RUBY
|
50
|
-
}
|
51
|
-
|
52
|
-
let(:expected_dsl) {
|
53
|
-
<<-RUBY
|
54
|
-
create_table "employee_clubs", force: :cascade do |t|
|
55
|
-
t.integer "emp_no", limit: 4, null: false
|
56
|
-
t.integer "club_id", limit: 4, null: false
|
57
|
-
t.string "string", limit: 255, null: false
|
58
|
-
t.text "text", limit: 65535, null: false
|
59
|
-
end
|
60
|
-
RUBY
|
61
|
-
}
|
62
|
-
|
63
|
-
before { subject.diff(actual_dsl).migrate }
|
64
|
-
subject { client(enable_migration_comments: true) }
|
65
|
-
|
66
|
-
it {
|
67
|
-
delta = subject.diff(expected_dsl)
|
68
|
-
expect(delta.differ?).to be_truthy
|
69
|
-
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
70
|
-
delta.migrate
|
71
|
-
expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
|
72
|
-
}
|
73
|
-
end
|
74
|
-
|
75
|
-
context 'when change column (change comment)' do
|
76
|
-
let(:actual_dsl) {
|
77
|
-
<<-RUBY
|
78
|
-
create_table "employee_clubs", force: :cascade do |t|
|
79
|
-
t.integer "emp_no", limit: 4, null: false, comment: "any comment"
|
80
|
-
t.integer "club_id", limit: 4, null: false, comment: "any comment2"
|
81
|
-
t.string "string", limit: 255, null: false, comment: "any comment3"
|
82
|
-
t.text "text", limit: 65535, null: false, comment: "any comment4"
|
83
|
-
end
|
84
|
-
RUBY
|
85
|
-
}
|
86
|
-
|
87
|
-
let(:expected_dsl) {
|
88
|
-
<<-RUBY
|
89
|
-
create_table "employee_clubs", force: :cascade do |t|
|
90
|
-
t.integer "emp_no", limit: 4, null: false, comment: "other comment"
|
91
|
-
t.integer "club_id", limit: 4, null: false, comment: "other comment2"
|
92
|
-
t.string "string", limit: 255, null: false, comment: "other comment3"
|
93
|
-
t.text "text", limit: 65535, null: false, comment: "other comment4"
|
94
|
-
end
|
95
|
-
RUBY
|
96
|
-
}
|
97
|
-
|
98
|
-
before { subject.diff(actual_dsl).migrate }
|
99
|
-
subject { client(enable_migration_comments: true) }
|
100
|
-
|
101
|
-
it {
|
102
|
-
delta = subject.diff(expected_dsl)
|
103
|
-
expect(delta.differ?).to be_truthy
|
104
|
-
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
105
|
-
delta.migrate
|
106
|
-
expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
|
107
|
-
}
|
108
|
-
end
|
109
|
-
|
110
|
-
context 'when change column (no change comment)' do
|
111
|
-
let(:actual_dsl) {
|
112
|
-
<<-RUBY
|
113
|
-
create_table "employee_clubs", force: :cascade do |t|
|
114
|
-
t.integer "emp_no", limit: 4, null: false, comment: "any comment"
|
115
|
-
t.integer "club_id", limit: 4, null: false, comment: "any comment2"
|
116
|
-
t.string "string", limit: 255, null: false, comment: "any comment3"
|
117
|
-
t.text "text", limit: 65535, null: false, comment: "any comment4"
|
118
|
-
end
|
119
|
-
RUBY
|
120
|
-
}
|
121
|
-
|
122
|
-
before { subject.diff(actual_dsl).migrate }
|
123
|
-
subject { client(enable_migration_comments: true) }
|
124
|
-
|
125
|
-
it {
|
126
|
-
delta = subject.diff(actual_dsl)
|
127
|
-
expect(delta.differ?).to be_falsey
|
128
|
-
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
129
|
-
delta.migrate
|
130
|
-
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
131
|
-
}
|
132
|
-
end
|
133
|
-
|
134
|
-
context 'when create table (with comment)' do
|
135
|
-
let(:expected_dsl) {
|
136
|
-
<<-RUBY
|
137
|
-
create_table "employee_clubs", force: :cascade, comment: "table comment" do |t|
|
138
|
-
t.integer "emp_no", limit: 4, null: false, comment: "other comment"
|
139
|
-
t.integer "club_id", limit: 4, null: false, comment: "other comment2"
|
140
|
-
t.string "string", limit: 255, null: false, comment: "other comment3"
|
141
|
-
t.text "text", limit: 65535, null: false, comment: "other comment4"
|
142
|
-
end
|
143
|
-
RUBY
|
144
|
-
}
|
145
|
-
|
146
|
-
subject { client(enable_migration_comments: true) }
|
147
|
-
|
148
|
-
it {
|
149
|
-
delta = subject.diff(expected_dsl)
|
150
|
-
expect(delta.differ?).to be_truthy
|
151
|
-
expect(subject.dump.strip).to be_empty
|
152
|
-
delta.migrate
|
153
|
-
expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
|
154
|
-
}
|
155
|
-
end
|
156
|
-
|
157
|
-
context 'when drop table (with comment)' do
|
158
|
-
let(:actual_dsl) {
|
159
|
-
<<-RUBY
|
160
|
-
create_table "employee_clubs", force: :cascade, comment: "table comment" do |t|
|
161
|
-
t.integer "emp_no", limit: 4, null: false, comment: "other comment"
|
162
|
-
t.integer "club_id", limit: 4, null: false, comment: "other comment2"
|
163
|
-
t.string "string", limit: 255, null: false, comment: "other comment3"
|
164
|
-
t.text "text", limit: 65535, null: false, comment: "other comment4"
|
165
|
-
end
|
166
|
-
RUBY
|
167
|
-
}
|
168
|
-
|
169
|
-
before { subject.diff(actual_dsl).migrate }
|
170
|
-
subject { client(enable_migration_comments: true) }
|
171
|
-
|
172
|
-
it {
|
173
|
-
delta = subject.diff('')
|
174
|
-
expect(delta.differ?).to be_truthy
|
175
|
-
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
176
|
-
delta.migrate
|
177
|
-
expect(subject.dump).to be_empty
|
178
|
-
}
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|