在类ruby之间共享实例变量

时间:2015-08-10 15:51:36

标签: ruby class instance instance-variables

我知道此问题之前已得到解答,但我似乎无法使任何解决方案正常工作

我正在为我需要调用的API创建一个ruby包装器。 Interface类完成了api的所有会话处理和实际调用,但我想为我将最常执行的函数构建帮助器类。我遇到的问题是我需要一种在多个辅助类中维护Interface类的一个实例的方法。

这是我到目前为止的代码

require_relative 'interface'

module Api_Helper
  attr_accessor :xmlmc
    #get a new instance of the interface, This should be the only instance used.
    #I don't know if this needs to go in its own module
  def initialize server, port = '5015'
    @xmlmc = Xmlmc::Interface.new server, port
  end
end

module Xmlmc
  class API
    include Api_Helper
    module Session
        #session helpers use invoke method to send calls to the api via the interface class
        def invoke service, operation, parameters
            Xmlmc::API.xmlmc.invoke service, operation, parameters
        end 
    end
    module Data
        #data helpers use invoke method to send calls to the api via the interface class
        def invoke service, operation, parameters
            Xmlmc::API.xmlmc.invoke service, operation, parameters
        end 
    end

    def session
      #extend the session module into its own class
      _session = Object.new
      _session.extend Session
      _session
    end

    def data
      #extend the data helpers into its own class
      _data = Object.new
      _data.extend Data
      _data
    end
  end
end

我希望能够像这样使用我的代码。

api = Xmlmc::API.new 'localhost', '2000'
@session = api.session
@session.logon 'username', 'password' 
@data = api.data
@data.query = 'select * from table' #requires a session first.

我遇到的问题是Interface类处理会话令牌,会话令牌从一个调用到另一个调用。我希望能够将我的代码干净地划分为多个部分,例如sessiondata,同时只使用一个接口类实例。

我不想让这些方法返回比API返回值更多的内容。那就是我不想手动传递接口类或会话变量的实例等。这可能吗?

0 个答案:

没有答案