Maya の内部構造を真似たシンプルな Ruby プログラムの例である。
わかりやすくするためにノードは一種類(NodeA)、アトリビュートは一つだけ(attr)にしている。
require 'observer'
class NodeA
include Observable
def initialize
@attr = 0
end
def update(node)
setAttr(node.getAttr())
end
def getAttr
@attr
end
def setAttr(val)
@attr = val
changed(true)
notify_observers(self)
end
end
node1 = NodeA.new
node2 = NodeA.new
node3 = NodeA.new
print "( node1 " + node1.getAttr.to_s + " ) "
print "( node2 " + node2.getAttr.to_s + " ) "
print "( node3 " + node3.getAttr.to_s + " )\n"
node1.add_observer(node2)
node2.add_observer(node3)
print "( node1 " + node1.getAttr.to_s + " ) -> "
print "( node2 " + node2.getAttr.to_s + " ) -> "
print "( node3 " + node3.getAttr.to_s + " )\n"
node1.setAttr(2)
print "( node1 " + node1.getAttr.to_s + " ) -> "
print "( node2 " + node2.getAttr.to_s + " ) -> "
print "( node3 " + node3.getAttr.to_s + " )\n"
% ruby nmaya.rb ( node1 0 ) ( node2 0 ) ( node3 0 ) ← ノード node1, node2, node3 のアトリビュートの初期値は 0 ( node1 0 ) -> ( node2 0 ) -> ( node3 0 ) ← node1 から node2、 node2 から node3 へコネクトされた状態 ( node1 2 ) -> ( node2 2 ) -> ( node3 2 ) ← node1 のアトリビュートを変更すると node2, node3 も変更される