我正在使用Fluidinfo gem作为基础向rest-client编写Ruby接口。我真的很喜欢调用RestClient自动返回正文,除非你调用代码/头文件等。方法,我想保留该功能。问题是我希望Fluidinfo返回预先解析的JSON,因此用户不必担心它。我不太关心这一点,除了在某些情况下Fluidinfo将返回一个类似"foo"
的值,这在技术上不是JSON,因此基本的JSON gem不会解析它。我正在使用YAJL,它接受这些原始值。
我是Ruby的新手(主要熟悉Python和Perl),所以我不确定如何做到这一点。我可以只是RestClient::Response
的子类并覆盖create
方法吗?我知道在Ruby中你可以打开类并重新定义方法,但在这种情况下我不确定这是个好主意。
任何建议都将受到赞赏。
答案 0 :(得分:1)
重新定义create
RestClient::Response
方法会破坏其与您的界面并排使用的rest-client的原始功能。由于rest-client gem是经常使用的gem,这可能不是你想要的。
在这种情况下,我编写了一个包含原始实例的包装类,编写别名方法以调用原始实例并重新定义必要的方法。
使用对request
原始实例send
的常见request :method_name, *args
方法,别名可能有点空洞;别名只调用RestClient.proxy
。
这样我将rest-client包装成一个存储cookie的简单用户代理,并在每个请求之前重新定义class-global {{1}}变量。我需要rest-client和couchrest(使用rest-client本身的couchrest),我确实希望通过代理自己发出rest-client请求,并且我也必须从couchrest做直接请求。
我知道这不是一个优雅的解决方案,但在我不到一年的红宝石体验中,我知道不是一个更好的。也许有人向我们展示了一个更好的,我也想读它。