schema_comments 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.travis.yml +13 -0
- data/Gemfile +11 -8
- data/README.md +187 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/gemfiles/.gitignore +1 -0
- data/gemfiles/Gemfile.rails-4.0 +15 -0
- data/gemfiles/Gemfile.rails-4.1 +12 -0
- data/gemfiles/Gemfile.rails-4.2 +12 -0
- data/lib/annotate_models.rb +12 -4
- data/lib/schema_comments/connection_adapters.rb +2 -1
- data/lib/schema_comments/railtie.rb +11 -0
- data/lib/schema_comments/schema_comment.rb +1 -1
- data/lib/schema_comments/schema_dumper/mysql.rb +2 -2
- data/lib/schema_comments/version.rb +3 -0
- data/lib/schema_comments.rb +2 -0
- data/schema_comments.gemspec +28 -0
- metadata +52 -194
- data/Gemfile.lock +0 -106
- data/README.rdoc +0 -150
- data/spec/annotate_models_spec.rb +0 -63
- data/spec/database.yml +0 -15
- data/spec/fake_app.rb +0 -38
- data/spec/hash_key_orderable_spec.rb +0 -50
- data/spec/human_readable_schema_comments.yml +0 -14
- data/spec/i18n_export_spec.rb +0 -44
- data/spec/migration_spec.rb +0 -108
- data/spec/migrations/valid/001_create_products.rb +0 -17
- data/spec/migrations/valid/002_rename_products.rb +0 -10
- data/spec/migrations/valid/003_rename_products_again.rb +0 -10
- data/spec/migrations/valid/004_remove_price.rb +0 -10
- data/spec/migrations/valid/005_change_products_name.rb +0 -10
- data/spec/migrations/valid/006_change_products_name_with_comment.rb +0 -10
- data/spec/migrations/valid/007_change_comments.rb +0 -12
- data/spec/migrations/valid/008_create_users_without_comment.rb +0 -19
- data/spec/resources/models/product.rb +0 -2
- data/spec/resources/models/product_name.rb +0 -2
- data/spec/schema.rb +0 -2
- data/spec/schema_comments/connection_adapters_spec.rb +0 -54
- data/spec/schema_comments/schema_comment_spec.rb +0 -76
- data/spec/schema_comments/schema_comments.yml +0 -10
- data/spec/schema_comments/schema_comments_broken_column_comments.yml +0 -7
- data/spec/schema_comments/schema_comments_broken_column_hash.yml +0 -10
- data/spec/schema_comments/schema_comments_broken_table_comments.yml +0 -13
- data/spec/schema_comments/schema_comments_users_without_column_hash.yml +0 -10
- data/spec/schema_comments/schema_dumper_spec.rb +0 -92
- data/spec/schema_comments.yml +0 -9
- data/spec/spec_helper.rb +0 -53
- data/spec/yaml_export_spec.rb +0 -52
data/spec/schema.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require File.join(File.dirname(__FILE__), '../spec_helper')
|
3
|
-
|
4
|
-
describe SchemaComments::ConnectionAdapters do
|
5
|
-
|
6
|
-
before(:each) do
|
7
|
-
SchemaComments.yaml_path = File.expand_path(File.join(File.dirname(__FILE__), 'schema_comments.yml'))
|
8
|
-
FileUtils.rm(SchemaComments.yaml_path, :verbose => true) if File.exist?(SchemaComments.yaml_path)
|
9
|
-
|
10
|
-
(ActiveRecord::Base.connection.tables - IGNORED_TABLES).each do |t|
|
11
|
-
ActiveRecord::Base.connection.drop_table(t) rescue nil
|
12
|
-
end
|
13
|
-
ActiveRecord::Base.connection.initialize_schema_migrations_table
|
14
|
-
ActiveRecord::Base.connection.execute "DELETE FROM #{ActiveRecord::Migrator.schema_migrations_table_name}"
|
15
|
-
|
16
|
-
(ActiveRecord::Base.connection.tables - %w(schema_migrations)).should == []
|
17
|
-
|
18
|
-
migration_path = File.join(MIGRATIONS_ROOT, 'valid')
|
19
|
-
Dir.glob('*.rb').each do |file|
|
20
|
-
require(file) if /^\d+?_.*/ =~ file
|
21
|
-
end
|
22
|
-
|
23
|
-
Product.reset_table_comments
|
24
|
-
Product.reset_column_comments
|
25
|
-
|
26
|
-
ActiveRecord::Migrator.up(migration_path, 1)
|
27
|
-
ActiveRecord::Migrator.current_version.should == 1
|
28
|
-
|
29
|
-
ActiveRecord::Base.export_i18n_models.keys.include?('product').should == true
|
30
|
-
ActiveRecord::Base.export_i18n_models['product'].should == '商品'
|
31
|
-
|
32
|
-
ActiveRecord::Base.export_i18n_attributes.keys.include?('product').should == true
|
33
|
-
ActiveRecord::Base.export_i18n_attributes['product'].should == {
|
34
|
-
'product_type_cd' => '種別コード',
|
35
|
-
"price" => "価格",
|
36
|
-
"name" => "商品名",
|
37
|
-
"created_at" => "登録日時",
|
38
|
-
"updated_at" => "更新日時"
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
describe SchemaComments::ConnectionAdapters::Column do
|
43
|
-
describe :comment do
|
44
|
-
it "should return comment" do
|
45
|
-
Product.columns.detect{|c| c.name == "product_type_cd"}.comment.should == '種別コード'
|
46
|
-
Product.columns.detect{|c| c.name == "price"}.comment.should == '価格'
|
47
|
-
Product.columns.detect{|c| c.name == "name"}.comment.should == '商品名'
|
48
|
-
Product.columns.detect{|c| c.name == "created_at"}.comment.should == '登録日時'
|
49
|
-
Product.columns.detect{|c| c.name == "updated_at"}.comment.should == '更新日時'
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require File.join(File.dirname(__FILE__), '../spec_helper')
|
3
|
-
|
4
|
-
describe SchemaComments::SchemaComment do
|
5
|
-
|
6
|
-
before(:each) do
|
7
|
-
SchemaComments.yaml_path = File.expand_path(File.join(File.dirname(__FILE__), 'schema_comments.yml'))
|
8
|
-
FileUtils.rm(SchemaComments.yaml_path, :verbose => true) if File.exist?(SchemaComments.yaml_path)
|
9
|
-
|
10
|
-
(ActiveRecord::Base.connection.tables - IGNORED_TABLES).each do |t|
|
11
|
-
ActiveRecord::Base.connection.drop_table(t) rescue nil
|
12
|
-
end
|
13
|
-
ActiveRecord::Base.connection.initialize_schema_migrations_table
|
14
|
-
ActiveRecord::Base.connection.execute "DELETE FROM #{ActiveRecord::Migrator.schema_migrations_table_name}"
|
15
|
-
end
|
16
|
-
|
17
|
-
describe :yaml_access do
|
18
|
-
before{@original_yaml_path = SchemaComments.yaml_path}
|
19
|
-
after {SchemaComments.yaml_path = @original_yaml_path}
|
20
|
-
|
21
|
-
# http://d.hatena.ne.jp/akm/20091213#c1271134505
|
22
|
-
# プラグインの更新ご苦労さまです。
|
23
|
-
# とても便利に使わせていただいてます。
|
24
|
-
#
|
25
|
-
# ところが本日更新してみたら0.1.3になっていて、
|
26
|
-
# コメントの生成に失敗するようになってしまいました。
|
27
|
-
#
|
28
|
-
# 原因を探ってみましたところ、
|
29
|
-
# コメントを一個も書いていないマイグレーションでは、
|
30
|
-
# nilにHashKeyOrderableをextendしようとして落ちていました。
|
31
|
-
#
|
32
|
-
# プラグインによって自動で作られるマイグレーションがあるのですが、
|
33
|
-
# 必ずしもコメントを書くとは限らないので、
|
34
|
-
# コメントがないときは無視?もしくはそのままカラム名をいれるのがいいのかなと思いました。
|
35
|
-
#
|
36
|
-
# # schema_comment.rb:154-164 あたり
|
37
|
-
#
|
38
|
-
# よろしければ対応していただけたらと思います。
|
39
|
-
it "dump without column comment" do
|
40
|
-
migration_path = File.join(MIGRATIONS_ROOT, 'valid')
|
41
|
-
Dir.glob('*.rb').each{|file| require(file) if /^\d+?_.*/ =~ file}
|
42
|
-
|
43
|
-
ActiveRecord::Migrator.up(migration_path, 8)
|
44
|
-
ActiveRecord::Migrator.current_version.should == 8
|
45
|
-
|
46
|
-
SchemaComments.yaml_path =
|
47
|
-
File.expand_path(File.join(
|
48
|
-
File.dirname(__FILE__), "schema_comments_users_without_column_hash.yml"))
|
49
|
-
SchemaComments::SchemaComment.yaml_access do |db|
|
50
|
-
db['column_comments']['products']['name'] = "商品名"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
{
|
54
|
-
"table_comments" => lambda{|db| db['column_comments']['users']['login'] = "ログイン"},
|
55
|
-
"column_comments" => lambda{|db| db['table_comments']['users'] = "物品"},
|
56
|
-
"column_hash" => lambda{|db| db['column_comments']['users']['login'] = "ログイン"}
|
57
|
-
}.each do |broken_type, proc|
|
58
|
-
it "raise SchemaComments::YamlError with broken #{broken_type}" do
|
59
|
-
migration_path = File.join(MIGRATIONS_ROOT, 'valid')
|
60
|
-
Dir.glob('*.rb').each{|file| require(file) if /^\d+?_.*/ =~ file}
|
61
|
-
|
62
|
-
ActiveRecord::Migrator.up(migration_path, 8)
|
63
|
-
ActiveRecord::Migrator.current_version.should == 8
|
64
|
-
|
65
|
-
SchemaComments.yaml_path =
|
66
|
-
File.expand_path(File.join(
|
67
|
-
File.dirname(__FILE__), "schema_comments_broken_#{broken_type}.yml"))
|
68
|
-
lambda{
|
69
|
-
SchemaComments::SchemaComment.yaml_access(&proc)
|
70
|
-
}.should raise_error(SchemaComments::YamlError)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require File.join(File.dirname(__FILE__), '../spec_helper')
|
3
|
-
|
4
|
-
describe ActiveRecord::SchemaDumper do
|
5
|
-
|
6
|
-
before(:each) do
|
7
|
-
SchemaComments.yaml_path = File.expand_path(File.join(File.dirname(__FILE__), 'schema_comments.yml'))
|
8
|
-
FileUtils.rm(SchemaComments.yaml_path, :verbose => true) if File.exist?(SchemaComments.yaml_path)
|
9
|
-
|
10
|
-
(ActiveRecord::Base.connection.tables - IGNORED_TABLES).each do |t|
|
11
|
-
ActiveRecord::Base.connection.drop_table(t) rescue nil
|
12
|
-
end
|
13
|
-
ActiveRecord::Base.connection.initialize_schema_migrations_table
|
14
|
-
ActiveRecord::Base.connection.execute "DELETE FROM #{ActiveRecord::Migrator.schema_migrations_table_name}"
|
15
|
-
end
|
16
|
-
|
17
|
-
describe :dump do
|
18
|
-
it "products" do
|
19
|
-
(ActiveRecord::Base.connection.tables - %w(schema_migrations)).should == []
|
20
|
-
|
21
|
-
migration_path = File.join(MIGRATIONS_ROOT, 'valid')
|
22
|
-
Dir.glob('*.rb').each{|file| require(file) if /^\d+?_.*/ =~ file}
|
23
|
-
|
24
|
-
Product.reset_table_comments
|
25
|
-
Product.reset_column_comments
|
26
|
-
|
27
|
-
ActiveRecord::Migrator.up(migration_path, 1)
|
28
|
-
ActiveRecord::Migrator.current_version.should == 1
|
29
|
-
|
30
|
-
ActiveRecord::Base.export_i18n_models.keys.include?('product').should == true
|
31
|
-
ActiveRecord::Base.export_i18n_models['product'].should == '商品'
|
32
|
-
|
33
|
-
ActiveRecord::Base.export_i18n_attributes.keys.include?('product').should == true
|
34
|
-
ActiveRecord::Base.export_i18n_attributes['product'].should == {
|
35
|
-
'product_type_cd' => '種別コード',
|
36
|
-
"price" => "価格",
|
37
|
-
"name" => "商品名",
|
38
|
-
"created_at" => "登録日時",
|
39
|
-
"updated_at" => "更新日時"
|
40
|
-
}
|
41
|
-
|
42
|
-
dest = StringIO.new
|
43
|
-
# ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, dest)
|
44
|
-
SchemaComments::SchemaDumper.dump(ActiveRecord::Base.connection, dest)
|
45
|
-
dest.rewind
|
46
|
-
s = <<EOS
|
47
|
-
# encoding: UTF-8
|
48
|
-
# This file is auto-generated from the current state of the database. Instead
|
49
|
-
# of editing this file, please use the migrations feature of Active Record to
|
50
|
-
# incrementally modify your database, and then regenerate this schema definition.
|
51
|
-
#
|
52
|
-
# Note that this schema.rb definition is the authoritative source for your
|
53
|
-
# database schema. If you need to create the application database on another
|
54
|
-
# system, you should be using db:schema:load, not running all the migrations
|
55
|
-
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
56
|
-
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
57
|
-
#
|
58
|
-
# It's strongly recommended to check this file into your version control system.
|
59
|
-
|
60
|
-
ActiveRecord::Schema.define(:version => 1) do
|
61
|
-
|
62
|
-
create_table "products", :force => true, :comment => '商品' do |t|
|
63
|
-
EOS
|
64
|
-
|
65
|
-
if ENV['DB'] =~ /mysql/i
|
66
|
-
s << <<EOS
|
67
|
-
#t.column "id", "int(11)", :null => false, :comment => "AUTO_INCREMENT PRIMARY KEY by rails"
|
68
|
-
t.column "product_type_cd", "varchar(255)", :comment => "種別コード"
|
69
|
-
t.column "price", "int(11)", :comment => "価格"
|
70
|
-
t.column "name", "varchar(255)", :comment => "商品名"
|
71
|
-
t.column "created_at", "datetime", :comment => "登録日時"
|
72
|
-
t.column "updated_at", "datetime", :comment => "更新日時"
|
73
|
-
EOS
|
74
|
-
else
|
75
|
-
s << <<EOS
|
76
|
-
t.string "product_type_cd", :comment => "種別コード"
|
77
|
-
t.integer "price", :comment => "価格"
|
78
|
-
t.string "name", :comment => "商品名"
|
79
|
-
t.datetime "created_at", :comment => "登録日時"
|
80
|
-
t.datetime "updated_at", :comment => "更新日時"
|
81
|
-
EOS
|
82
|
-
end
|
83
|
-
s << <<EOS
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
EOS
|
88
|
-
dest.read.should == s
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
92
|
-
end
|
data/spec/schema_comments.yml
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
if ENV["COVERAGE"] and not(ENV["COVERAGE"].empty?)
|
2
|
-
require "simplecov"
|
3
|
-
SimpleCov.start
|
4
|
-
end
|
5
|
-
|
6
|
-
ENV['DB'] ||= 'sqlite3'
|
7
|
-
|
8
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
9
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
10
|
-
|
11
|
-
require 'rails'
|
12
|
-
require 'schema_comments'
|
13
|
-
# require 'database_cleaner'
|
14
|
-
SchemaComments.yaml_path = File.expand_path("schema_comments.yml", File.dirname(__FILE__))
|
15
|
-
|
16
|
-
# Ensure we use 'syck' instead of 'psych' in 1.9.2
|
17
|
-
# RubyGems >= 1.5.0 uses 'psych' on 1.9.2, but
|
18
|
-
# Psych does not yet support YAML 1.1 merge keys.
|
19
|
-
# Merge keys is often used in mongoid.yml
|
20
|
-
# See: http://redmine.ruby-lang.org/issues/show/4300
|
21
|
-
# if RUBY_VERSION >= '1.9.2'
|
22
|
-
|
23
|
-
# if defined?(YAML::ENGINE) && YAML::ENGINE.respond_to?(:yamler=)
|
24
|
-
# YAML::ENGINE.yamler = 'syck'
|
25
|
-
# end
|
26
|
-
|
27
|
-
# require 'yaml_waml'
|
28
|
-
|
29
|
-
require 'fake_app'
|
30
|
-
|
31
|
-
require 'rspec/rails'
|
32
|
-
|
33
|
-
# Requires supporting files with custom matchers and macros, etc,
|
34
|
-
# in ./support/ and its subdirectories.
|
35
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
36
|
-
|
37
|
-
|
38
|
-
RSpec.configure do |config|
|
39
|
-
|
40
|
-
%w(resources/models).each do |path|
|
41
|
-
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), path)
|
42
|
-
ActiveSupport::Dependencies.autoload_paths << File.join(File.dirname(__FILE__), path)
|
43
|
-
end
|
44
|
-
Dir.glob("resources/**/*.rb") do |filename|
|
45
|
-
require filename
|
46
|
-
end
|
47
|
-
|
48
|
-
SchemaComments.setup
|
49
|
-
end
|
50
|
-
|
51
|
-
MIGRATIONS_ROOT = File.join(File.dirname(__FILE__), 'migrations')
|
52
|
-
|
53
|
-
IGNORED_TABLES = %w(schema_migrations)
|
data/spec/yaml_export_spec.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
|
-
|
4
|
-
describe SchemaComments::SchemaComment do
|
5
|
-
|
6
|
-
before(:each) do
|
7
|
-
SchemaComments.yaml_path = File.join(File.dirname(__FILE__), 'human_readable_schema_comments.yml')
|
8
|
-
FileUtils.rm(SchemaComments.yaml_path, :verbose => true) if File.exist?(SchemaComments.yaml_path)
|
9
|
-
|
10
|
-
(ActiveRecord::Base.connection.tables - IGNORED_TABLES).each do |t|
|
11
|
-
ActiveRecord::Base.connection.drop_table(t) rescue nil
|
12
|
-
end
|
13
|
-
ActiveRecord::Base.connection.initialize_schema_migrations_table
|
14
|
-
ActiveRecord::Base.connection.execute "DELETE FROM #{ActiveRecord::Migrator.schema_migrations_table_name}"
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should export human readable yaml" do
|
18
|
-
ActiveRecord::Schema.define(:version => 0) do
|
19
|
-
create_table(:person, :comment => '人') do |t|
|
20
|
-
t.string :name, :comment => '名前'
|
21
|
-
end
|
22
|
-
|
23
|
-
create_table(:addresses, :comment => '住所') do |t|
|
24
|
-
t.integer :person_id, :comment => '人'
|
25
|
-
t.text :descriptions, :comment => '記述'
|
26
|
-
end
|
27
|
-
|
28
|
-
create_table(:emails, :comment => 'メール') do |t|
|
29
|
-
t.integer :person_id, :comment => '人'
|
30
|
-
t.string :address, :comment => 'アドレス'
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
File.read(SchemaComments.yaml_path).split(/$/).map(&:strip).should == %{
|
35
|
-
---
|
36
|
-
table_comments:
|
37
|
-
addresses: 住所
|
38
|
-
emails: メール
|
39
|
-
person: 人
|
40
|
-
column_comments:
|
41
|
-
addresses:
|
42
|
-
person_id: 人
|
43
|
-
descriptions: 記述
|
44
|
-
emails:
|
45
|
-
person_id: 人
|
46
|
-
address: アドレス
|
47
|
-
person:
|
48
|
-
name: 名前
|
49
|
-
}.split(/$/).map(&:strip)
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|