使用draper装饰器时的装饰方法列表

时间:2016-04-20 23:40:30

标签: ruby-on-rails ruby decorator

我需要获取在 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]

1 个答案:

答案 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