市田です。

On 2016/11/08 16:17, yamataka / u08.itscom.net wrote:

 > network上に存在しようがしまいが、インスタンスを作成して、呼び出しを
 > master.render.SetMute(true)
 > slave.render.SetMute(true)
 > 揃えたい。
 > しかし、ネットワーク上に存在しない場合、そのまま呼び出すと、内部で用いて
 > いるgemがRaiseし、スクリプトが終了して困るので、
 > それを回避したいのです。
 >
 > また、他のメンバーの利用も考えており、network上に機器が存在しなかった場
 > 合をの事をコード上であまり意識させたくないので、
 > 機器が存在しない場合は、内部で何も実行せず、メッセージを表示するのみにし
 > たいと考えています。

設計、I/Fの是非はともかく、上のことをあまり手間をかけずに実現するとして
   class StubMethod
     def initialize(obj)
       @obj = obj
     end

     def method_missing(name, *args)
       super unless @obj.respond_to? name
       puts "#{name} does not work"
     end
   end

   class Render
     def play
       puts "Render#play"
     end
   end

   class Device
     attr_reader :render
     def initialize(device, is_nw_in)
       @device = device
       render = Render.new
       @render = if is_nw_in
                    render
                 else
                    StubMethod.new(render)
                 end
     end
   end

という方法はどうでしょう。
Render のインスタンスを生成して、そのインスタンスが応答できるメソッド
が呼ばれたら何らかのメッセージを出すというものです。
応答できないもの=Render にないメソッドを呼び出したときは、いつもどおり
NoMethodError になります。

もしくは, class を引数にするのでも良いです。

   class StubMethod
     def initialize(klass)
       @klass = klass
     end

     def method_missing(name, *args)
       super unless @klass.instance_methods.include? name
       puts "#{name} does not work"
     end
   end

   class Device
     attr_reader :render
     def initialize(device, is_nw_in)
       @device = device
       @render = if is_nw_in
                    Render.new
                 else
                    StubMethod.new(Render)
                 end
     end
   end

ではでは。