Ruby:方法的钩子

时间:2012-06-10 12:58:17

标签: ruby-on-rails ruby gem

我想找一个gem或者编写一个实现方法钩子的代码。

class A
  include SomeModule
  before_hook :meth, lambda { puts 'bla' }

  def meth
    puts 'meth'
  end
end

# A.new.meth => "bla\nmeth\n"

我正在使用Rails,我知道回调和过滤器,但

  • meth不是动作
  • 我不想改变方法调用方式

请帮帮我......

更新

我找到了一个用于自动化此代码的gem:

  include ActiveSupport::Callbacks
  define_callbacks :meth_callback

  set_callback :meth_callback, :before do |object|
    # my code
  end

  def meth_with_callback
    run_callbacks(:meth_callback) { meth }
  end

  alias_method_chain :meth, :callback

1 个答案:

答案 0 :(得分:5)

您可以使用ActiveModel::Callbacks

define_model_callbacks :create

def create
  run_callbacks :create do
    # do your thing here
  end
end

您甚至可以编写一个小帮助方法来隐藏此run_callbacks行。它可能看起来像这样:

hooked_method :create do
  # do your thing here
end
相关问题