我喜欢 Trailblazer 的所有面向对象的美!
我有一个与 gem(称为cpanel_deployer
)交互的操作,以在网络上进行外部操作。(它将插件域添加到 cpanel。)
class Website::Deploy < Trailblazer::Operation
attr_reader :website, :cpanel
def process(params)
real_cpanel_add_domain
website.cpanel = cpanel
website.save
end
private
def setup!(params)
@cpanel = Cpanel.find(params[:cpanel_id])
@website = website.find(params[:website_id])
end
def real_cpanel_add_domain
cp_domain = CpanelDeployer::Domain.new(website.domain)
cp_panel = CpanelDeployer::Panel.new(cpanel.host, cpanel.username, cpanel.password)
res = cp_panel.add_domain(cp_domain)
raise StandardError unless res
end
end
cpanel_deloyer
gem 已经过测试,所以我不需要在这里重新测试它的功能。但为了测试操作,我想确保CpanelDeployer::Panel#add_domain
使用正确的参数调用。所以我想我应该嘲笑CpanelDeployer::Panel
。
我认为尝试使用any_instance_of
. 根据thoughtbot 的说法,它通常被认为是代码异味......他们建议使用依赖注入。有没有一种在开拓者操作中使用依赖注入的好方法?这种情况还有另一种最佳做法吗?