如何访问当前作用域

时间:2016-02-09 17:04:08

标签: ruby-on-rails ruby

是否可以获取当前范围中调用的方法列表,例如在另一个方法中?

我知道我可以获得有关当前正在执行的方法的信息,但是可以为执行刚刚结束的方法执行此操作吗?

def my_method
  [1, 3, 2].sort

  # is there a magic method that does this?
  last_method_called = magic_method
  # last_method_called is now :sort
end

我的目的是为我的模型和控制器添加一种记录器,并尽可能地释放方法代码。在我调用某个方法之后,例如数组上的这个sort,就在它之后我想访问:

  • 当前方法
  • 当前课程/模块
  • 最后一个名为
  • 的方法

这些我将传递给我的日志记录方法,该方法将使用该信息生成一些日志消息。例如,我可以将消息文本保存在本地化的yaml文件中,其中键对应于类,方法和最后的方法。

我需要这种日志记录用于rake任务,数据迁移等,我想避免这种情况:

output = "Seeding pages:\n"
pages.each |page|
  output << "  * #{page.label}\n"
  status = page.do_something
  output << "    did something to the page: #{status}"
end

(请注意,以上只是即兴发挥作用)

而不是那样,如果我能有这样的东西会很好:

# ...
status = page.do_something
log status

其中log是一个通过关注添加到类中的方法,并且会执行以下操作:

def log(message)
  # current_method - a helper that I would add, returns Symbol
  # current_class - a helper that I would add, returns Symbol
  # last_method - a helper that I would add, returns Symbol
  @log << I18n.t last_method, scope: [current_class, current_method], message: message
end

0 个答案:

没有答案