模块中类之间的Ruby对象继承

时间:2015-10-25 21:49:47

标签: ruby

我很难找到如何在模块中的其他实例之间共享类的共享实例的好例子。我甚至不确定我是否正确描述它:)

这是我试图实现的一般事项:

module NSX
  class Manager
    def initialize(server, user, password)
      @nsx = RestClient::Resource.new(
        server,
        user: user,
        password: password)
    end
  end

  class Service
    def initialize(some_args)
      # assign instance variables, etc
    end

    def self.get(service_id)
      # USE NSX::Manager INSTANCE HERE
      obj = allocate
      response = JSON.parse(instance_of_manager[service_id].get)
      obj.send(:initialize, response)
      obj
    end

    def save
      # USE NSX::Manager INSTANCE HERE
      instance_of_manager[self.id].post(self.to_json)
    end
  end
end

我想实例化一个NSX :: Manager对象,该对象包含服务的所有连接详细信息。我希望能够在其他NSX模块类中引用该实例,包括类方法和实例方法(例如,执行HTTP GET或HTTP PUT)。

我还没有找到任何关于如何做到这一点的好例子,或者它是否可能。

任何人都可以指出我正确的方向,或者给我一些关于如何在结构上处理这个问题的想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

module NSX
  class Manager
    attr_accessor :nsx

    def initialize(nsx)
      @nsx = nsx
    end
  end


  class Service
    def self.get()
      puts NSXManager.nsx
    end

    def save
      puts NSXManager.nsx
    end
  end
end

Creating a constant可以从模块内部(或使用正确名称的其他任何地方)引用:

require_relative 'nsx'

manager = NSX::Manager.new(3)
NSX.const_set('NSXManager', manager)

NSX::Service.get
NSX::Service.new.save

--output:--
3
3

编辑: ---------------------------

module NSX

  class Manager
    attr_accessor :nsx

    def initialize(nsx)
      @nsx = nsx
      NSX.const_set('NSXManager', self)
    end
  end


  class Service
    def self.get()
      puts NSXManager.nsx
    end

    def save
      puts NSXManager.nsx
    end
  end
end

练习模块:

require_relative 'nsx'

NSX::Manager.new(3)

NSX::Service.get
NSX::Service.new.save

--output:--
3
3