Roxy: Rubyでプロキシオブジェクト

http://ryandaigle.com/articles/2008/11/10/implement-ruby-proxy-objects-with-roxy

本家では「両親が離婚しているか」をモデリングしている。
離婚しているか?は両親のpropertyだから、person.parents_divorced?ではなくて person.parents.divorced? と書けるべきという考えだからか。

っつーかあのサンプルをそのまま実行しても動かないから実験しづらいんだけど……

# -*- coding: euc-jp -*-
require 'rubygems'
require 'roxy'
class Dog
  def bark() "ワンワン" end
  def walk() "歩く" end
end

class ProxyTan
  include Roxy::Moxie
  attr_accessor :pet
  proxy :hoge do
    def fuga() 1 end # !> undefining `object_id' may cause serious problem
  end
  proxy :pet do
    def walk() "二足歩行犬" end
  end
end

p = ProxyTan.new
dog = Dog.new
dog.bark     # => "ワンワン" # !> `&' interpreted as argument prefix
dog.walk     # => "歩く"
p.pet = dog
p.hoge       # => nil
p.hoge.fuga  # => 1
p.pet        # => #<Dog:0xa6644c8>
p.pet.bark   # => "ワンワン"
p.pet.walk   # => "二足歩行犬"

要するにproxyを介したときに特異メソッドをくっつけるようなやつか?
warningが不気味に光ってる。

Ruby 1.9でも動く。