получать от рубиновых методов - PullRequest
0 голосов
/ 11 октября 2011

Я использую jruby для запуска множества скриптов ruby, хотя я использую только его часть.

Иногда из вывода становится трудно понять, что именно происходит или где что-то пошло не так.

Я хотел получить что-то подобное в моем std out для каждого метода: введено в методе А вне метода A

Теперь я, конечно, могу пойти и поместить эти комментарии в каждый метод ... который кажется очень неправильным. Есть ли способ запустить ruby ​​немного подробнее, чтобы получить эту информацию в моем журнале. Надеюсь, я бы избегал использования большого количества драгоценных камней и т. Д., Поскольку они находятся на некоторых управляемых серверах, и мне придется потратить некоторое время, чтобы просто получить больше с / ф на нем. Надеясь, что-то будет полезно как часть самого jruby

Спасибо!

1 Ответ

0 голосов
/ 11 октября 2011

Вы можете использовать этот код:

module InOutHook
  module ClassMethods
    def setup_hooks(*syms)
      syms.each do |sym| # For each symbol
        str_id = "__#{sym}__hooked__"
        unless private_instance_methods.include?(str_id)
          alias_method str_id, sym        # Backup original method
          private str_id                  # Make backup private
          define_method sym do |*args|    # Replace method
            puts ">>> #{self.class}\##{sym} >>>"
            ret = __send__ str_id, *args  # Invoke backup
            puts "<<< #{self.class}\##{sym} >>>"
            ret
          end
        end
      end
    end
  end
  def InOutHook.included(base)
    base.extend(ClassMethods)
  end
end

class TestClass
  def test1
    puts "test!"
  end
  def test2(v)
    puts "Value is #{v}"
  end
  include InOutHook
  setup_hooks(:test1, :test2)
end

# works on existing classes too:
class Array
  include InOutHook
  setup_hooks(:[])
end

tc = TestClass.new
tc.test1
tc.test2(10)

ary = [1,2,3]
puts ary[1..2]

В случае, если вы хотите добавить реплику к каждому методу, просто добавьте звездочку:

setup_hooks(*[].methods)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...