実際に作った手順を簡単に記録しておこうと思います。
作ったのは、railsのアクセスログをdbに保存するというものです。
after_filterでlogsテーブルに記録をするというだけのものです。
とりあえず名前はrails_acclog2dbとします。
githubに実際に作ったものを置いてみました。
https://github.com/vivahiraj/rails_acclog2db
まずは雛形を作ります。
rails plugin new rails_acclog2db -T --skip-bundle --dummy-path=spec/dummy
それぞれのオプションは
-T:テスト用ファイルの作成をスキップ(後でrspecを利用するようにします)
--skip-bundle:コマンド直後にbundle installを実行しない
--dummy-path:作ったプラグインを試すためのrails環境の場所を指定
cd rails_acclog2db
続いてrspecの設定を行います。
vi rails_acclog2db.gemspec
rspec-railsとammeterを追加します。
ammeterはgeneratorのspecを作成する際に利用します。関連するgemをvendor配下にインストールするように設定します。(必須ではないです)
mkdir .bundle vi .bundle/config
内容は以下のような感じです。
------------------------------ BUNDLE_PATH: vendor/bundle BUNDLE_DISABLE_SHARED_GEMS: "1" ------------------------------
gemをインストールします。
bundle install
rspec用のファイルを生成します。
cd spec/dummy ln -s ../../spec rails generate rspec:install cd - cp spec/dummy/.rspec .
spec_helperを修正します。
vi spec/spec_helper.rb
environmentの読込先を変更してammeter/initを追加します。
今回はログの記録先としてlogsテーブルに保存したいので、migrationとmodelをrails generateで実行できるようにするために専用のgeneratorを作成してみます。
まずはgeneratorでコピーするファイルを保存するディレクトリを作成します。
mkdir -p lib/generators/rails_acclog2db/install/templates
コピーするモデルを作成します。
vi lib/generators/rails_acclog2db/install/templates/log.rb
コピーするマイグレーションを作成します。
vi lib/generators/rails_acclog2db/install/templates/create_logs.rb
ジェネレーターを作成します。
vi lib/generators/rails_acclog2db/install/install_generator.rb
ジェネレータのspecも作成してみます。
mkdir -p spec/generators/rails_acclog2db/install
specが成功することを確認してみます。
bundle exec rspec spec
実際にジェネレートできるかテスト用のrails環境で試してみます。
cd spec/dummy/
rails g rails_acclog2db:install
実際にmigrationもできるか試します。
rake db:migrate rake db:migrate RAILS_ENV=test
cd ../../
作成されたLogモデルのspecも作ってみます。
mkdir spec/models
vi spec/models/log_spec.rb
specが成功することを確認してみます。bundle exec rspec spec
つづいてメインの部分でlogを記録する部分です。
controllerにaccess_loggingと書いたら、そのcontrollerへのログを記録するようにしてみます。
sessionに:userが設定されていたら、きっと何かしらの認証がされたと思い込んで、それっぽい情報を保存するようにもします。
vi lib/rails_acclog2db/logging.rb
ActiveSupport::Concernをextendするとモジュールで取り込まれるclassメソッドとかインスタンスメソッドがちょっとすっきりかけるようです。
上記のファイルをrequireできるようにします。
vi lib/rails_acclog2db.rb
実際にテスト用のrails環境のcontrollerに組み込んでみてspecを作成してみます。
まずはcontrollerを準備します。
cd spec/dummy
rails g controller welcome touch app/views/welcome/index.html.erb
vi app/controllers/welcome_controller.rb
vi config/routes.rb
次にspecを作成します。
cd ../../
vi spec/controllers/welcome_controller_spec.rb
specが成功することを確認してみます。
bundle exec rspec spec
これが普通な作り方なのかはよくわからないのですが、こんな感じでできました。
以下が参考になりました。
http://guides.rubyonrails.org/v3.2.14/plugins.html
http://d.hatena.ne.jp/kouji0625/20130523/p1
http://d.hatena.ne.jp/kouji0625/20130524/p1
0 件のコメント:
コメントを投稿