2011-03-24 22 views
3

我正在編寫一個到Fluidinfo的Ruby接口,使用rest-client gem作爲基礎。我真的很喜歡如何調用RestClient自動返回正文,除非你調用代碼/頭/等。方法,我想保留這個功能。問題是我想要讓Fluidinfo返回的JSON預分析,因此用戶不必擔心它。我不會那麼在乎,只是在某些情況下Fluidinfo會返回一個值,如"foo",這在技術上不是JSON,所以基本的JSON gem將不會解析它。我使用的是YAJL,它接受這些原始值。如何正確修改/子類RestClient :: Response

我對Ruby非常陌生(主要熟悉Python和Perl),所以我不確定如何做到這一點。我可以僅子類RestClient::Response並覆蓋create方法嗎?我知道Ruby中可以打開類並重新定義方法,但在這種情況下我不確定這是個好主意。

任何意見,將不勝感激。

回答

1

重新定義create方法RestClient::Response將打破其原有的功能,用於與您的界面並排使用的休息客戶端。由於休息客戶的寶石是一個經常使用的寶石,這可能不是你想要的。

在這種情況下,我編寫了一個包裝類,其中包含原始實例的實例,編寫別名方法以調用原始實例並重新定義必要的方法。

這個別名可以用一個普通的request方法稍微短一點,它會將send作爲原始實例;那麼別名只能調用request :method_name, *args

這樣我打包休息客戶端作爲存儲cookie的簡單用戶代理工作,並在每個請求之前重新定義全局類變量RestClient.proxy變量。我需要rest-client和couchrest(couchrest使用rest-client本身),我希望通過代理自己做休息 - 客戶端請求,並做一些直接的請求,我也必須包裝。

我知道這不是一個優雅的解決方案,但在我不到一年的紅寶石體驗中,我知道不是一個更好的解決方案。也許有人向我們展示了一個更好的,我也想讀一讀。