schema_comments 0.3.2 → 0.4.0
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/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
|