【问题标题】:Is it possible to validate the context in a Draper decorator?是否可以在 Draper 装饰器中验证上下文?
【发布时间】:2013-07-26 05:28:57
【问题描述】:

我在新工作中开始与装饰师合作,我发现他们真的很有帮助。我正在为我们的一位装饰器编写规范,并想知道是否可以这样做...

设置(精简版):

我们有一个有两个孩子的主对象。

 Main
 / \
A   B

当 Main 被装饰时,我们也装饰 B,但我们必须将 A 作为上下文传递。 A 用于 B 的一些装饰器方法,但如上所述将 A 与 B 分开更符合逻辑。

# in MainDecorator    
BDecorator.new(B, context: {a: A}) # all good

有时我们自己装饰 B(不通过 Main),而过去我们忘记将 A 作为上下文传递。我们总能抓住它,但一直打下去是个烦人的问题。

B.decorate # no context -> :(

问题:

是否可以验证 A 在 B 的装饰器中作为上下文传递?你能有一个装饰器验证器吗?

(我们考虑过让 A 成为 B 的子级,但这对我们的应用程序来说没有意义。我同意它会起作用,但这不是我们想要的。)

【问题讨论】:

    标签: ruby decorator draper


    【解决方案1】:

    你可以重写初始化器来验证上下文是否被传递:

    class BDecorator
      def initialize(obj, options = {})
        raise "Must pass context" unless options.key? :context
        super
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 2020-12-29
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      相关资源
      最近更新 更多