Совместное использование переменных экземпляра между классами ruby

Я знаю, что на этот вопрос уже был дан ответ, но я не могу заставить какие-либо решения работать

Я делаю рубиновую оболочку для API, который мне нужно вызвать. Класс 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 обрабатывает маркер сеанса, который изменяется от вызова к вызову. Я хочу, чтобы мой код был четко разделен на разделы, напримерsession а такжеdata при использовании только одного экземпляра класса интерфейса.

Я не хочу, чтобы эти методы возвращали что-либо большее, чем возвращаемые значения API. То есть я не хочу вручную передавать экземпляр класса интерфейса или переменных сеанса и т. Д. Возможно ли это?

Ответы на вопрос(0)

Ваш ответ на вопрос