15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ActiveStrategy 作った

Posted at

たいてい太るモデルといえば 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 にログインな実装を書きましょう。この場合はクラスメソッドなので @classUser が渡っています。これがインスタンスメソッドの時は @user に User インスタンスが渡ってきます。

嬉しいこと

  • デブ化を防げる
  • 挙動ごとに実装部分を切り分けられる
  • 同じ挙動を使いまわせる(別のモデルにも strategy を書けば良い)
  • 特定の挙動だけテスト時に入れ替えたりできる
15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?