2013-04-04 2 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 

И мой вызов в контроллере:

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

OK, моя ошибка is undefined method `post 'для ApiMethods :: PulseDev: Class и он указывает на сообщение в моем методе get_json_api_post_response.

Мой вопрос: я понимаю, что он находится в контексте ApiMethods :: Dev, и именно поэтому self.base_uri работает, но как мне обрабатывать сообщение внутри этого метода process_response, чтобы привязать его к EventMachine? Есть что-то в цепочке методов, которые я не вижу? В выводе ошибки я могу проверить, что http показывает объект EventMachine, поэтому новый метод работает. Спасибо за ваше время, sam

ответ

0

Ответ должен быть более внимательным в сообщении об ошибке. Метод process_response - это тот, который фактически вызывает метод EventMachine и обрабатывает его: body. Так было написано с ненужным звонком.