Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

メタプログラミングRuby | 魔術 | 動的プロキシ

概要

動的プロキシ

内容

どのメソッドにも当てはまらないメッセージを他のオブジェクトに転送します。

サンプル

# encoding: utf-8
require "date"
require "pp"

class DynamicProxy
  attr_accessor :proxies

  def initialize(*proxies)
    @proxies = proxies
  end

  def hoge
    puts "hoge"
  end
  def method_missing(method_name, *args, &block)
    @proxies.each do |p|
      return p.__send__(method_name, *args, &block) if p.respond_to? method_name
    end
    super
  end
end

class ProxyHage
  def self.hage
    puts "hage"
  end
end
class ProxyHige
  def self.hige
    puts "hige"
  end
end

dp = DynamicProxy.new(ProxyHage, ProxyHige)
dp.hoge
dp.hage
dp.hige
# dp.hege => `method_missing': undefined method `hege'

出力

hoge
hage
hige