2012-06-10 8 views
-2

Я хочу найти драгоценный камень или написать код, который реализует крючки для методов.Рубин: крючки для методов

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

    def meth 
    puts 'meth' 
    end 
end 

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

Я использую Rails, и я знаю об обратных вызовов и фильтров, но

  • meth не действие
  • Я не палочка, чтобы изменить то, как я вызов метода

Помогите пожалуйста ...

ОБНОВЛЕНИЕ

я найти драгоценный камень для автоматизации этого кода:

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 
+0

возможный дубликат [Определение понятия «method_called» .. Как мне сделать метод крюк который вызывается каждый раз, когда любая функция класса будет вызываться?] (HTTP: // StackOverflow. com/questions/3236194/define-method-called-how-do-i-make-a-hook-method-which-gets-called-every-t) –

+1

Взгляните http://stackoverflow.com/a/ 10471857/1322562 – jdoe

+0

@jdoe Да, это именно то, что я хочу, но нет ли этой драгоценности этой функции? – Kuraga

ответ

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 
+0

Спасибо, но вызывающий абонент не вызвал что-то еще 'meth' ... Идея заключается в использовании' alias_method' и callbacks (внутренне). Но я хочу найти драгоценный камень ... – Kuraga

+0

Извините, что вы имеете в виду под «но вызывающим не называть что-то еще мета»? –

+0

Я не уверен, что понимаю, что вы имеете в виду. –

Смежные вопросы