如何正确修改/子类RestClient :: Response

时间:2011-03-24 02:51:52

标签: ruby

我正在使用Fluidinfo gem作为基础向rest-client编写Ruby接口。我真的很喜欢调用RestClient自动返回正文,除非你调用代码/头文件等。方法,我想保留该功能。问题是我希望Fluidinfo返回预先解析的JSON,因此用户不必担心它。我不太关心这一点,除了在某些情况下Fluidinfo将返回一个类似"foo"的值,这在技术上不是JSON,因此基本的JSON gem不会解析它。我正在使用YAJL,它接受这些原始值。

我是Ruby的新手(主要熟悉Python和Perl),所以我不确定如何做到这一点。我可以只是RestClient::Response的子类并覆盖create方法吗?我知道在Ruby中你可以打开类并重新定义方法,但在这种情况下我不确定这是个好主意。

任何建议都将受到赞赏。

1 个答案:

答案 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做直接请求。

我知道这不是一个优雅的解决方案,但在我不到一年的红宝石体验中,我知道不是一个更好的。也许有人向我们展示了一个更好的,我也想读它。