【发布时间】:2015-04-22 00:16:47
【问题描述】:
这是我在模型中的所有方法之前开发代码运行方式的实现
调用“before_hook :months_used”方法需要在类的底部,ExecutionHooks 才能获取模块中加载的instance_method。我想在顶部加载实例方法
class BalanceChart < BalanceFind
include ExecutionHooks
attr_reader :options
def initialize(options = {})
@options = options
@begin_at = @options[:begin_at]
end
def months_used
range.map{|date| I18n.l date, format: :month_year}.uniq!
end
before_hook :months_used
end
module ExecutionHooks
def self.included(base)
base.send :extend, ClassMethods
end
module ClassMethods
def before
@hooks.each do |name|
m = instance_method(name)
define_method(name) do |*args, &block|
return if @begin_at.blank? ## the code you can execute before methods
m.bind(self).(*args, &block) ## your old code in the method of the class
end
end
end
def before_hook(*method_name)
@hooks = method_name
before
end
def hooks
@hooks ||= []
end
end
end
【问题讨论】:
-
您的意思是您想在班级顶部调用 before_hook?
-
是的@FrederickCheung
标签: ruby model metaprogramming