-1

我想找到一个 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
4

1 回答 1

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
于 2012-06-10T13:04:47.640 回答