我需要获取在 draper 装饰器实例中创建的所有修饰方法的名称数组。
如果我有两个类,如:
class A
def foo
end
end
class ADecorator < Draper::Decorator
def bar
end
def hi
end
end
然后我想做类似的事情:
decorated = ADecorator.decorate(A.new)
decorated.decorated_methods # => [:bar, :hi]
最接近这是ruby的内置instance_methods
方法,但它返回基础对象方法和装饰器方法(在此示例中返回[:foo, :bar, :hi]
)
答案 0 :(得分:1)
你可以monkey patch进入德雷珀,例如:
将其放入config/initializers/draper.rb
:
module DraperExtensions
def decorated_methods
instance_methods.to_set - Draper::Decorator.instance_methods.to_set
end
end
Draper::Decorator.extend DraperExtensions
然后你就可以打电话了:
ADecorator.decorated_methods