У меня есть то, что, вероятно, базовый 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