class Log
def output(s)
puts s
end
end
module Decoratable
def decos
@decos ||= []
end
def output(s)
puts decos.inject(s){ |acc, deco| deco[acc] }
end
end
#usage example
class Log; prepend Decoratable end
timeStamp = ->s{ "#{Time.now} #{s}" }
pid = ->s{ "[#{Process.pid}] #{s}" }
log = Log.new
log.decos << timeStamp << pid
log.output 'aaa'
log.output 'bbb'
log2 = Log.new
log2.decos << pid << timeStamp
log2.output 'aaa'
log2.output 'bbb'
Y2xhc3MgTG9nCiAgZGVmIG91dHB1dChzKQogICAgcHV0cyBzCiAgZW5kCmVuZAoKbW9kdWxlIERlY29yYXRhYmxlCiAgZGVmIGRlY29zCiAgICBAZGVjb3MgfHw9IFtdCiAgZW5kCgogIGRlZiBvdXRwdXQocykKICAgIHB1dHMgZGVjb3MuaW5qZWN0KHMpeyB8YWNjLCBkZWNvfCBkZWNvW2FjY10gfQogIGVuZAplbmQKCgojdXNhZ2UgZXhhbXBsZQoKY2xhc3MgTG9nOyBwcmVwZW5kIERlY29yYXRhYmxlIGVuZAp0aW1lU3RhbXAgPSAtPnN7ICIje1RpbWUubm93fSAje3N9IiB9CnBpZCA9IC0+c3sgIlsje1Byb2Nlc3MucGlkfV0gI3tzfSIgfQoKbG9nID0gTG9nLm5ldwpsb2cuZGVjb3MgPDwgdGltZVN0YW1wIDw8IHBpZApsb2cub3V0cHV0ICdhYWEnCmxvZy5vdXRwdXQgJ2JiYicKCmxvZzIgPSBMb2cubmV3CmxvZzIuZGVjb3MgPDwgcGlkIDw8IHRpbWVTdGFtcApsb2cyLm91dHB1dCAnYWFhJwpsb2cyLm91dHB1dCAnYmJiJw==