schema_comments 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/schema_comments/schema_comment.rb +10 -4
- data/lib/schema_comments/task.rb +1 -1
- data/lib/schema_comments/tasks/alter_comments.rake +53 -0
- data/{tasks → lib/schema_comments/tasks}/annotate_models_tasks.rake +0 -0
- data/{tasks → lib/schema_comments/tasks}/schema_comments.rake +0 -0
- data/lib/schema_comments/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21a9d779680d54f251b51ab643ec747878b68924
|
4
|
+
data.tar.gz: 3ffa036c8dab55d4386d442e60bdf66aa6ff770e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6027c604d17578b22dfb68aa5e0b6a42c184629ae539c2cb79b9c1634ab76dbf4d55a82136d075d1a7be53756d68ee7e7ff2b2fbadc2e935d6108956806cb524
|
7
|
+
data.tar.gz: e576b7f6de6a7cf31ea2a73413bce1b3929347ac110a2f81c3a84bceab744854d50cf16f73bab85139a8b9f130a74463c17150aced1f21641be640473fa5346c
|
@@ -106,8 +106,13 @@ module SchemaComments
|
|
106
106
|
io.rewind
|
107
107
|
root = YAML.load(io)
|
108
108
|
end
|
109
|
-
|
110
|
-
|
109
|
+
SortedStore.sort_yaml_content!(root)
|
110
|
+
root.to_yaml(@opt)
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.sort_yaml_content!(root)
|
114
|
+
table_comments = (root['table_comments'] ||= {})
|
115
|
+
column_comments = (root['column_comments'] ||= {})
|
111
116
|
# 大元は
|
112
117
|
# table_comments:
|
113
118
|
# ...
|
@@ -129,11 +134,13 @@ module SchemaComments
|
|
129
134
|
column_comments.extend(HashKeyOrderable)
|
130
135
|
column_comments.key_order = table_names
|
131
136
|
# column_comments の各値はテーブルのカラム順
|
137
|
+
conn = ActiveRecord::Base.connection
|
138
|
+
columns_method = conn.respond_to?(:columns_without_schema_comments) ? :columns_without_schema_comments : :columns
|
132
139
|
column_comments.each do |table_name, column_hash|
|
133
140
|
column_hash ||= {}
|
134
141
|
column_names = nil
|
135
142
|
begin
|
136
|
-
columns =
|
143
|
+
columns = conn.send(columns_method, table_name)
|
137
144
|
column_names = columns.map(&:name)
|
138
145
|
rescue ActiveRecord::ActiveRecordError
|
139
146
|
column_names = column_hash.keys.sort
|
@@ -143,7 +150,6 @@ module SchemaComments
|
|
143
150
|
column_hash.extend(HashKeyOrderable)
|
144
151
|
column_hash.key_order = column_names
|
145
152
|
end
|
146
|
-
root.to_yaml(@opt)
|
147
153
|
end
|
148
154
|
end
|
149
155
|
|
data/lib/schema_comments/task.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Dir.glob(File.
|
1
|
+
Dir.glob(File.expand_path('../tasks/*.rake', __FILE__)){|f| load(f)}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :schema do
|
3
|
+
namespace :comments do
|
4
|
+
|
5
|
+
desc "update #{SchemaComments.yaml_path} from mysql comments of tables and columns"
|
6
|
+
task :dump => :environment do
|
7
|
+
conn = ActiveRecord::Base.connection
|
8
|
+
db_table_comments = conn.select_all("SHOW TABLE STATUS").each_with_object({}){|row, d| d[row["Name"]] = row["Comment"]}
|
9
|
+
column_comments = {}
|
10
|
+
db_table_comments.keys.each do |t|
|
11
|
+
column_comments[t] = conn.select_all("SHOW FULL COLUMNS FROM #{t}").each_with_object({}){|row, d| d[row["Field"]] = row["Comment"]}
|
12
|
+
end
|
13
|
+
root = {"table_comments" => db_table_comments, "column_comments" => column_comments}
|
14
|
+
SchemaComments::SchemaComment::SortedStore.sort_yaml_content!(root)
|
15
|
+
open(SchemaComments.yaml_path, "w"){|f| f.puts root.to_yaml }
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "load #{SchemaComments.yaml_path} and alter table for mysql comments"
|
19
|
+
task :load => :environment do
|
20
|
+
conn = ActiveRecord::Base.connection
|
21
|
+
creation = ActiveRecord::ConnectionAdapters::AbstractAdapter::SchemaCreation.new(conn)
|
22
|
+
|
23
|
+
db_tables = conn.tables
|
24
|
+
db_table_comments = conn.select_all("SHOW TABLE STATUS").each_with_object({}){|row, d| d[row["Name"]] = row["Comment"]}
|
25
|
+
root = YAML.load_file(SchemaComments.yaml_path)
|
26
|
+
column_comments_root = root["column_comments"]
|
27
|
+
root["table_comments"].each do |t, t_comment|
|
28
|
+
unless db_tables.include?(t)
|
29
|
+
$stderr.puts "\e[33mtable #{t.inspect} doesn't exist\e[0m"
|
30
|
+
next
|
31
|
+
end
|
32
|
+
unless t_comment == db_table_comments[t]
|
33
|
+
conn.execute("ALTER TABLE #{t} COMMENT '#{t_comment}'")
|
34
|
+
end
|
35
|
+
|
36
|
+
column_hash = conn.columns(t).each_with_object({}){|c, d| d[c.name] = c}
|
37
|
+
db_column_comments = conn.select_all("SHOW FULL COLUMNS FROM #{t}").each_with_object({}){|row, d| d[row["Field"]] = row["Comment"]}
|
38
|
+
column_comments = column_comments_root[t]
|
39
|
+
column_comments.each do |c, c_comment|
|
40
|
+
unless c_comment == db_column_comments[t]
|
41
|
+
if col = column_hash[c]
|
42
|
+
opts = col.sql_type.dup
|
43
|
+
creation.send(:add_column_options!, opts, column: col, null: col.null, default: col.default, auto_increment: (col.extra == "auto_increment"))
|
44
|
+
conn.execute("ALTER TABLE #{t} MODIFY #{c} #{opts} COMMENT '#{c_comment}'")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schema_comments
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- akm
|
@@ -116,10 +116,11 @@ files:
|
|
116
116
|
- lib/schema_comments/schema_dumper.rb
|
117
117
|
- lib/schema_comments/schema_dumper/mysql.rb
|
118
118
|
- lib/schema_comments/task.rb
|
119
|
+
- lib/schema_comments/tasks/alter_comments.rake
|
120
|
+
- lib/schema_comments/tasks/annotate_models_tasks.rake
|
121
|
+
- lib/schema_comments/tasks/schema_comments.rake
|
119
122
|
- lib/schema_comments/version.rb
|
120
123
|
- schema_comments.gemspec
|
121
|
-
- tasks/annotate_models_tasks.rake
|
122
|
-
- tasks/schema_comments.rake
|
123
124
|
homepage: http://github.com/akm/schema_comments
|
124
125
|
licenses:
|
125
126
|
- MIT
|