山口と申します。

classから作成したインスタンスから作成元のclassのインスタンス変数を、参照
できるのか?
下記の様なコードにおいて、何かいい方法があればご脅威いただけますでしょう
か?

class Render
    def initialize(service)
      @service = service
    end
    ...
    def SetMute(sw)
     @service.SetMute(sw)
    end
end

class NetWorkAudioDevice

   attr_reader	:is_in_nw

   def initialize(device,is_in_nw)
    @is_in_nw = is_in_nw
    ...
   @webapi      = WebAPI.new(@ip,api_port)
   @render      = Rendering.new(device.service)
   @avtransport = AVTransport.new(device.service)
  end
end

# Network上に master機器発見 is_in_nw true でインスタンス作成
master = NetWorkAudioDevice.new(device,is_in_nw=true)
# Network上に slave 機器存在しない is_in_nw false でインスタンス作成
slave  = NetWorkAudioDevice.new(device,is_in_nw=false)

#1 
master.render.SetMute(true)
#2
slave.render.SetMute(true) # RenderクラスのSetMute内 @service.SetMute 呼
び出し後、Gem内で機器に対するserviceが存在しないため、Raiseし、スクリプ
トが停止する
#3
if slave.is_in_nw then # 毎呼び出し時に、instanceのis_in_nwを確認する
 slave.render.SetMute(true) # 各method呼び出しに、上の条件をつける必要が
有りコードが煩雑になる。
end
#4 
slave.render.SetMute(true) # Renderクラス SetMute内で、is_in_nwを確認し、
@service.SetMuteを呼び出すか呼び出さないか判断したい。

# 4の様にするには、

class Render
    def initialize(service,is_in_nw)
      @service = service
      @is_in_nw = is_in_nw
    end
    ...
    def SetMute(sw)
     if @is_in_nw then
       @service.SetMute(sw)
     else
       puts "#{__method__} is not called due to XXX is not in network"
     end
    end
end

class NetWorkAudioDevice

   attr_reader	:is_in_nw

   def initialize(device,is_in_nw)
    @is_in_nw = is_in_nw
    ...
   @webapi      = WebAPI.new(@ip,api_port,@is_in_nw)
   @render      = Rendering.new(device.service,@is_in_nw)
   @avtransport = AVTransport.new(device.service,@is_in_nw)
  end
end

各WebAPI,Rendering,AVTransportをインスタンス作成する際に、@is_in_nwを渡
し、
それぞれの関数内で、判別するしかないのかでしょうか?

NetWorkAudioDevice class内から、それぞれWebAPI,Rendering,AVTransportのイ
ンスタンスを作成しているので、
インスタンス作成時に、@is_in_nwを渡さなくても、参照できるんいい方法があ
るんじゃないか?

と思う反面

インスタンスから他のインスタンスの値を参照するmethodが必要になるので、前
述のようには、できないだろう

とも想像がつくのですが...

何かいい方法があれば、ご教示いただければと思います。