私はおそらく基本的な Q を持っていますが、セットアップが複雑に見えます。いくつかのクラスを持つモジュールがあります。1 つのクラスには、API 呼び出しのメソッドが含まれています。他のクラスはサーバーを記述します。たとえば、開発にはその属性があります。サーバー クラスは、すべての API 呼び出しを含むクラスを継承します。サーバー クラスのインスタンスを使用してこれらのメソッドの 1 つを使用し、それに 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、私のエラーはApiMethods::PulseDev:Class のメソッド「post」が未定義 で、get_json_api_post_response メソッドの投稿を指しています。
私の質問は: ApiMethods::Dev のコンテキスト内にあることがわかります。これが self.base_uri が機能する理由ですが、その process_response メソッド内で投稿を処理して EventMachine に関連付けるにはどうすればよいですか? 私が見ていないメソッドチェーンについて何かありますか? エラー出力で、http が EventMachine オブジェクトを表示していることを確認できるため、新しいメソッドが機能しているように見えます。時間をありがとう、サム