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

Ruby 如何正确修改/子类RestClient::Response,ruby,Ruby,我正在编写一个Ruby接口,以gem为基础。我非常喜欢调用RestClient自动返回主体的方式,除非调用code/headers/etc.方法,我希望保留该功能。问题是,我希望对Fluidinfo返回的JSON进行预解析,这样用户就不必担心了。我其实不太关心这个问题,只是在某些情况下,Fluidinfo会返回一个值,比如“foo”,这在技术上不是JSON,因此基本的JSON gem不会解析它。我使用的是YAJL,它接受这些基本值 我对Ruby非常陌生(主要熟悉Python和Perl),所以我不

我正在编写一个Ruby接口,以gem为基础。我非常喜欢调用RestClient自动返回主体的方式,除非调用code/headers/etc.方法,我希望保留该功能。问题是,我希望对Fluidinfo返回的JSON进行预解析,这样用户就不必担心了。我其实不太关心这个问题,只是在某些情况下,Fluidinfo会返回一个值,比如
“foo”
,这在技术上不是JSON,因此基本的JSON gem不会解析它。我使用的是YAJL,它接受这些基本值

我对Ruby非常陌生(主要熟悉Python和Perl),所以我不确定如何做到这一点。我是否可以将
RestClient::Response子类化并重写
create
方法?我知道在Ruby中可以打开类和重新定义方法,但我不确定在这种情况下这是个好主意


任何建议都将不胜感激。

重新定义
RestClient::Response
create
方法将破坏其与您的界面并排使用的rest客户端的原始功能。由于rest客户机gem是一个经常使用的gem,这可能不是您想要的

在这种情况下,我编写一个具有原始实例的包装器类,编写别名方法来调用原始实例,并重新定义必要的方法

使用普通的
request
方法,可以将
发送到原始实例,但别名可能有点人手不足;别名只调用
request:method_name,*args
then

通过这种方式,我包装了rest客户端,作为存储cookie的简单用户代理,并在每个请求之前重新定义类global
RestClient.proxy
变量。我需要rest客户机和couchrest(couchrest使用rest客户机本身),我确实希望自己通过代理发出rest客户机请求,并直接从couchrest发出请求,我还必须包装这些请求

我知道这不是一个优雅的解决方案,但在我不到一年的ruby经验中,我知道没有更好的解决方案。也许有人给我们看了一本更好的,我也想读一读