Compartiendo variables de instancia entre clases ruby.

Sé que esta pregunta ha sido respondida antes, pero parece que no puedo hacer que ninguna de las soluciones funcione.

Estoy haciendo una envoltura de Ruby para una API a la que debo llamar. La clase de interfaz hace todo el manejo de la sesión y la llamada real de la api, pero quiero crear clases de ayuda para las funciones que realizaré con mayor frecuencia. El problema que tengo es que necesito una forma de mantener una instancia de la clase de Interfaz 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 de esta manera.

 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 de interfaz maneja el token de sesión que cambia de llamada a llamada. Quiero poder tener mi código dividido de manera clara en secciones, como session y data mientras uso 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 las variables de sesión, etc. ¿Es esto posible?