gpt4 book ai didi

ruby - 是否可以在 Draper 装饰器中验证上下文?

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:10 25 4
gpt4 key购买 nike

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

设置(精简版):

我们有一个有两个 child 的主要对象。

 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 的子代,但这对我们的应用程序来说没有任何意义。我同意它可以工作,但这不是我们想要的。)

最佳答案

您可以只重写初始化程序来验证上下文是否已传递:

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

关于ruby - 是否可以在 Draper 装饰器中验证上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17873602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com