Compartir variables de instancia entre clases ruby

Sé que esta pregunta se ha respondido antes, pero parece que no puedo hacer que ninguna de las soluciones funcione

Estoy haciendo un contenedor de rubíes para una API a la que necesito llamar. La clase Interface realiza todo el manejo de la sesión y la llamada real de la API, pero quiero crear clases auxiliares para las funciones que realizaré con más frecuencia. El problema que tengo es que necesito una forma de mantener una instancia de la clase Interface en varias clases auxiliares.

Aquí está el código que tengo hasta ahora

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

Quiero poder usar mi código así.

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.

El problema que tengo es que la clase Interface maneja el token de sesión que cambia de llamada a llamada. Quiero poder dividir mi código limpiamente en secciones, comosession ydata mientras usa solo una instancia de la clase de interfaz.

No quiero que estos métodos devuelvan nada más que los valores de retorno de la API. Es decir, no quiero pasar manualmente una instancia de la clase de interfaz o variables de sesión, etc. ¿Es esto posible?

Respuestas a la pregunta(0)

Su respuesta a la pregunta