将块传递给包含模块的钩子

时间:2016-03-08 11:07:36

标签: ruby

我想要包含一个传递配置块的模块。

现在我有类似的东西

class Check
  include Zabase::ObjectPrinter 
  pp_values :title 
end

因为我不想污染Check类的命名空间,所以我想使用这样的DSL块:

class Check
  include Zabase::ObjectPrinter do
     pp_values :title 
  end

  # calling pp_values here should fail
end

有可能实现这个吗?我已经看到self.included没有收到阻止。

1 个答案:

答案 0 :(得分:3)

实现这一目标的常用方法是:

module Zabase::ObjectPrinter

  # ...

  def self.included base
    base.extend ClassMethods
  end

  module ClassMethods
    def zabase_configure &block
      instance_eval(&block) if block_given?
    end
  end 
end

然后

class Check
  include Zabase::ObjectPrinter

  zabase_configure do
    ...
  end
end