【问题标题】:Ruby: hooks for methodsRuby:方法的钩子
【发布时间】:2012-06-13 16:42:32
【问题描述】:

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

【问题讨论】:

标签: ruby-on-rails ruby gem


【解决方案1】:

您可以使用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

【讨论】:

  • 谢谢,但调用者没有调用其他东西meth... 一个想法是使用alias_method 和回调(内部)。但我想找到一颗宝石......
  • 抱歉,“但调用者没有调用其他方法”是什么意思?
  • 我不确定我明白你的意思。
  • 调用meth 必须执行类似run_callbacks(:callback_name) { meth } 的操作。
  • 不,meth 会这样做。再次阅读sn-p。并提供链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多