たいてい太るモデルといえば User ですよね。デブモデル1位だと思う。
でたいてい User.login
とかよくわからんそれモデルの責務じゃないだろアホかよみたいなメソッドが生えてるのがデブ化の要因だと思います。
僕は女性もモデルもスリムな方が好きなので、実装を外出しするための Gem を書きました。
Ruby 1.8.x / 1.9.x / head 、Rails 3.0.x / 3.1.x / 3.2.x はテスト済みです。
使い方
Gemfile に gem 'active_strategy'
を書きましょう。まだ rubygems に上がってないので :git => 'git://github.com/rosylilly/active_strategy.git'
も必要です。
bundle install したら $ rails g strategy login
とかします。app/strategies/login_strategy.rb
ができるはず。
できたらその Strategy を使うクラスに以下のように書きます。
class User
include ActiveStrategy::Context
strategy :login, class_method: true
end
これで User.login
を叩くと LoginStrategy#login
が叩かれるようになりました。やったね。
あとは LoginStrategy#login
にログインな実装を書きましょう。この場合はクラスメソッドなので @class
に User
が渡っています。これがインスタンスメソッドの時は @user
に User インスタンスが渡ってきます。
嬉しいこと
- デブ化を防げる
- 挙動ごとに実装部分を切り分けられる
- 同じ挙動を使いまわせる(別のモデルにも
strategy
を書けば良い) - 特定の挙動だけテスト時に入れ替えたりできる