2013-04-04 68 views
0

我有什麼可能是一個基本的Q,但它看起來很複雜的設置。我有一個有一些類的模塊。一個類包含API調用的方法。其他類描述了一個服務器。 Dev例如有它的屬性。服務器類繼承包含所有API調用的類。我使用服務器類的一個實例來使用這些方法之一,然後對其應用EventMachine方法。下面是一個服務器類的一個子集:導軌方法鏈接上下文

class PulseDev < ApiMethods 
    def base_uri 
    "http://myserver.com/api" 
    end 
end 

而且在方法類的動作:

Class ApiMethods 
    def get_json_api_post_response(url, post_obj={}) 
    http = EM::Synchrony.sync EventMachine::HttpRequest.new(self.base_uri+"#{url}").post(:body => post_obj) 
    process_response self.class.post(url, :body => post_obj).body 
    end 

     def process_response(result) 
     response = ActiveSupport::JSON.decode(result) 
      if response["code"].to_i == 200 
      ToolResult.new(true, response["result"], 200) 
      else 
      ToolResult.new(false, response["result"], response["code"]) 
      end 
     end 
     end 

Class ToolResult < Struct.new(:success, :result, :code) 
end 

和Controller我對它的調用:

http = ApiMethods::Dev.new.get_json_api_post_response('/handshake', @j) 

OK,我的錯誤是ApiMethods :: PulseDev的未定義方法'post':類 它指向我的get_json_api_post_response方法中的文章。

我的問題是:我得到它在ApiMethods :: Dev的上下文中,這就是爲什麼self.base_uri可以工作,但我應該如何處理process_response方法中的帖子,以便將其與EventMachine綁定?有沒有關於我沒有看到的方法鏈接?在錯誤輸出中,我可以驗證http是否顯示EventMachine對象,以便新方法似乎正在工作。謝謝你的時間,山姆

回答

0

答案是仔細看看錯誤消息。 process_response方法是實際調用EventMachine方法並處理其主體的方法。所以它是寫在一個不需要的電話。