Ruby on rails 使用某种机制来修剪方法的返回值
我有服务api。在我的Ruby on rails 使用某种机制来修剪方法的返回值,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有服务api。在我的Base类中有一些方法,我有继承这个类并实现其方法的具体实现。我几乎没有Base类的实现者 我有大约20个方法,我想修剪所有这些方法的返回值。但我不太确定是否要添加一段代码来修剪20个方法中每个方法的返回值。我一直在寻找更好的方法 我想我是在这里找到的: 但是这种方法只适用于我的Base类,而不适用于实现Base类的类。如何将其应用于我所有的实现者类?我认为实现Presenter(也称为Exhibit)模式是有意义的。基本概念是使用代理来包装对象,代理添加了一层表示逻辑。
Base
类中有一些方法,我有继承这个类并实现其方法的具体实现。我几乎没有Base
类的实现者
我有大约20个方法,我想修剪所有这些方法的返回值。但我不太确定是否要添加一段代码来修剪20个方法中每个方法的返回值。我一直在寻找更好的方法
我想我是在这里找到的:
但是这种方法只适用于我的
Base
类,而不适用于实现Base
类的类。如何将其应用于我所有的实现者类?我认为实现Presenter(也称为Exhibit)模式是有意义的。基本概念是使用代理来包装对象,代理添加了一层表示逻辑。您可以在此处找到有关此模式的更多信息:
class Test
def baked
" baked"
end
def beans
" beans "
end
def food_methods
[:baked, :beans]
end
end
test = Test.new
p "#{test.baked} #{test.beans}"
Ruby标准库提供了一个名为SimpleDelegator的简洁实用程序,它提供了我们需要的大部分功能。因此,我们只需要简单地定义一些方法,并将原始对象包装到新的呈现对象中:
需要“委托”
类TestPresenter
警告:此解决方案不如@ju liu的“干净”,可能也不是最有效的,但它较短,更容易在您的工作流中实现。您可能还希望限制要重新定义的方法,并构建更好的错误处理
在基础
类中,您可以执行以下操作:
(Base.instance_methods - Class.instance_methods).each do |method|
alias_method "#{method}_backup", method
class_eval %Q{
def #{method}(*args)
#{method}_backup(*args).strip rescue #{method}_backup(*args)
end
}
end
您不能创建一个具有trim包装器方法的中间类吗?那么
模块如何
您可以包含该功能上的层?
(Base.instance_methods - Class.instance_methods).each do |method|
alias_method "#{method}_backup", method
class_eval %Q{
def #{method}(*args)
#{method}_backup(*args).strip rescue #{method}_backup(*args)
end
}
end