annotate_modelsの紹介
annotate_models を使うとmodelにスキーマ情報が付加されて見やすくなるので自分の観測範囲だとよく使われています。
# == Schema Information # # Table name: users # # id :integer not null, primary key # gitlab_user_id :integer # username :string(255) # email :string(255) # private_token :string(255) # created_at :datetime # updated_at :datetime # # Indexes # # index_users_on_gitlab_user_id (gitlab_user_id) UNIQUE #
Railsだと rake db:migrate
や rake db:rollback
時に自動的にannotateを実行するコードがgithubのwikiで紹介されています。
https://github.com/ctran/annotate_models/wiki
最近Padrinoでアプリ作り始めたのですが、Railsみたいにmigrateで自動的にannotateする方法を作ってみました。
Padrinoでar:migrate時に自動的にannotateする方法
lib/tasks/annotate.rake
lib/tasks/ にrakeファイルを置いておくと自動的にロードされるのでこんな感じでrakeファイルを置く
desc "annotate models" task :annotate => :environment do require 'annotate/annotate_models' AnnotateModels.do_annotations( model_dir: "#{__dir__}/../../models/", exclude_fixtures: true, exclude_factories: true, exclude_tests: true, show_indexes: true, format_markdown: false ) end
Rakefile
PadrinoTasks.init
の直後に下記を書く
require "padrino-core" if Padrino.env == :development Rake::Task['ar:migrate'].enhance do Rake::Task['annotate'].invoke end Rake::Task['ar:rollback'].enhance do Rake::Task['annotate'].invoke end end
Padrinoの初期化順の関係からか、 lib/tasks/annotate.rake の中にフックする処理が書けませんでした。。。 他にうまいやり方ありますかねぇ?>有識者