OBstart for ruby

1179 ワード

OBstartはPHPにおいて非常に重要な関数であり、キャッシュを実現したり、静的なページを生成したりと、ob_を離れられません。start
ルビーにはこの機能がないことを発見しましたが、ルビーのblock特性を利用して実現しました。
#title:ob_start for ruby 
#author:axgle (2006-10-25) 
#version:1.0 
#see:http://php.net/ob_start 
  
class Ob 
  require 'stringio'  
  def self.start(&block) 
   $stdout=@buffer=StringIO.new  
   block.call  
 end
 
 def self.get_contents 
  $stdout = STDOUT 
  @buffer.rewind 
  @buffer.read 
 end 
 
end 
  
def ob_start(&block) 
 Ob.start(&block) 
end 
  
def ob_get_contents 
 Ob.get_contents 
end 
  
  
#    (example): 
ob_start do 
  
 #       
 p "aaa" #    1 
 puts "bbb" #    2 
 print File.open(__FILE__).read #    3,       (        ,          ) 
 #require "other" 
  
 data=ob_get_contents #           ,       
  
 #        
 puts data.size 
 puts data.include?("aaa")  
 puts data.include?("bbb") 
 puts data  
  
end