在这里,我想向您展示一个演示代码:
if ENV["PRODUCTION"]
user.apply_discount!
product.update!
else
VCR.use_cassette(vcr_cassette) do
user.apply_discount!
product.update!
end
end
所以基本上两次我有相同的代码:
user.apply_discount!
product.update!
如何防止此代码重复?您将如何做到这一点? 我在考虑将代码放在一个Block中,然后直接或在块中调用它。这是一个例子:
actions = Proc.new do
user.apply_discount!
product.update!
end
if ENV["PRODUCTION"]
actions.call
else
VCR.use_cassette(vcr_cassette) do
actions.call
end
end
你有其他想法吗?更好的解决方案?谢谢
答案 0 :(得分:3)
您的版本是明确且可读的。
我唯一要做的就是将其转变为一般方法:
def do_env_specific_stuff(stuff)
ENV('PRODUCTION') ? stuff.call : VCR.use_cassette(vcr_cassette) { stuff.call }
end
然后:
stuff = proc do
user.apply_discount!
product.update!
end
do_env_specific_stuff(stuff)
答案 1 :(得分:2)
安德烈的答案非常好,应该被接受。
但是只想指出你可以将proc转换为块而不是在块中调用proc ...
VCR.use_cassette(vcr_cassette, &actions)
我认为显式调用更好,但只是想指出一种替代技术。