mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-12-03 12:27:35 -05:00
FEATURE: Add CommentMigration for db column comments
For documenting the database (will be used in discourse-data-explorer)
This commit is contained in:
parent
d6069e8c90
commit
13d56eb989
2 changed files with 84 additions and 0 deletions
26
db/migrate/20150727230537_add_example_column_comments.rb
Normal file
26
db/migrate/20150727230537_add_example_column_comments.rb
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
require 'comment_migration'
|
||||||
|
|
||||||
|
class AddExampleColumnComments < CommentMigration
|
||||||
|
|
||||||
|
def comments_up
|
||||||
|
{
|
||||||
|
posts: {
|
||||||
|
_table: 'If you want to query public posts only, use the badge_posts view.',
|
||||||
|
post_number: 'The position of this post in the topic. The pair (topic_id, post_number) forms a natural key on the posts table.',
|
||||||
|
raw: 'The raw Markdown that the user entered into the composer.',
|
||||||
|
cooked: 'The processed HTML that is presented in a topic.',
|
||||||
|
reply_to_post_number: "If this post is a reply to another, this column is the post_number of the post it's replying to. [FKEY posts.topic_id, posts.post_number]",
|
||||||
|
reply_quoted: 'This column is true if the post contains a quote-reply, which causes the in-reply-to indicator to be absent.',
|
||||||
|
},
|
||||||
|
topics: {
|
||||||
|
_table: "To query public topics only: SELECT ... FROM topics t LEFT INNER JOIN categories c ON (t.category_id = c.id AND c.read_restricted = false)"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def comments_down
|
||||||
|
{
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
58
lib/comment_migration.rb
Normal file
58
lib/comment_migration.rb
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
|
||||||
|
|
||||||
|
class CommentMigration < ActiveRecord::Migration
|
||||||
|
def comments_up
|
||||||
|
raise "Not implemented"
|
||||||
|
end
|
||||||
|
|
||||||
|
def up
|
||||||
|
comments_up.each do |table|
|
||||||
|
table[1].each do |column|
|
||||||
|
table_name = table[0]
|
||||||
|
column_name = column[0]
|
||||||
|
comment = column[1]
|
||||||
|
|
||||||
|
if column_name == :_table
|
||||||
|
ActiveRecord::Base.exec_sql "COMMENT ON TABLE #{table_name} IS ?", comment
|
||||||
|
puts " COMMENT ON TABLE #{table_name}"
|
||||||
|
else
|
||||||
|
ActiveRecord::Base.exec_sql "COMMENT ON COLUMN #{table_name}.#{column_name} IS ?", comment
|
||||||
|
puts " COMMENT ON COLUMN #{table_name}.#{column_name}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def comments_down
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
replace_nils(comments_up).deep_merge(comments_down).each do |table|
|
||||||
|
table[1].each do |column|
|
||||||
|
table_name = table[0]
|
||||||
|
column_name = column[0]
|
||||||
|
comment = column[1]
|
||||||
|
|
||||||
|
if column_name == :_table
|
||||||
|
ActiveRecord::Base.exec_sql "COMMENT ON TABLE #{table_name} IS ?", comment
|
||||||
|
puts " COMMENT ON TABLE #{table_name}"
|
||||||
|
else
|
||||||
|
ActiveRecord::Base.exec_sql "COMMENT ON COLUMN #{table_name}.#{column_name} IS ?", comment
|
||||||
|
puts " COMMENT ON COLUMN #{table_name}.#{column_name}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def replace_nils(hash)
|
||||||
|
hash.each do |key, value|
|
||||||
|
if Hash === value
|
||||||
|
hash[key] = replace_nils value
|
||||||
|
else
|
||||||
|
hash[key] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue