2013-12-10 96 views
1

我正在開發一些使用純ruby和RestClient的工具,我想覆蓋Request類的默認log_request方法。在Ruby中重寫第三方方法

的lib/RESTClient實現/ request.rb

module RestClient 
    class Request 
    def log_request 
     RestClient.log << "SECRET" 
    end 
    end 
end 

但現在,如果我嘗試測試,它無法正常工作:

$ irb 
irb(main):001:0> require 'restclient' 
=> true 
irb(main):002:0> RestClient.log = "stdout" 
=> "stdout" 
irb(main):003:0> RestClient.get("http://localhost") 
RestClient.get "http://localhost", "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate" 

預計只看到SECRET作爲輸出。

我可能會缺少,如何「注入」我的代碼在默認RestClient庫?

如何從lib/mytool/somefile.rb中的其他文件執行此操作?

+0

的問題是,猴子補丁沒有裝到精確要求。你需要在某個地方需要request.rb。 – Pafjo

+0

我發現,'require'restclient/request''還不夠,因爲它已經被'require'restclient''遇到了。正確的解決方案是'load'lib/restclient/request.rb'' – Vestel

回答

0

此文件後需要require 'restclient' 添加load 'lib/restclient/request.rb'的伎倆

0

由於您將它放在lib文件夾中,因爲RestClient :: Request常量已被定義,所以此文件永遠不會被加載。將你的配置在這個代碼/ initializers目錄

+0

但這不是一個rails應用程序......我沒有config/initalizers文件夾這樣的東西 – Vestel

+0

啊,你確定這個文件已經加載?在文件開頭添加'raise'blah''並檢查它是否被擊中 – BroiSatse