DataMapper を使う (Hook)

メソッド呼び出し前後に callback を仕掛けることができる.

インスタンスメソッドに対する Hook

class Post
  include DataMapper::Resource
  
  ...

  before :save, :do_before_save # save メソッドの直前
  after  :save, :do_after_save  # save メソッドの直後

  def do_before_save
    # save の直前に何か処理する
  end
  def do_after_save
    # save の直後に何か処理する
  end
end

直接ブロックで指定することも可能.

class Post
  include DataMapper::Resource
  
  ...

  before :save do
    # save の直前に何か処理する
  end
end

保存の直前で値を正規化したり,ログを仕込んだりすることができる.

クラスメソッドに対する Hook

class Post
  include DataMapper::Resource
  
  ...

  def self.draft_posts
    all(:draft => true)
  end

  # ↓ここで draft_posts に対して callback を仕掛ける
  before_class_method :draft_posts, :do_before_draft_posts # draft_posts メソッドの直前

  def self.do_before_draft_posts
    ...
  end
end

after も同様.