2010-05-09 81 views
0

我寫,我希望會做以下小紅寶石守護:檢查目錄來存放文件,檢索第一個文件

  • 檢查特定目錄中有文件(在這種情況下,.yml文件)
  • 如果是的話,採取的第一個文件(數字順序排序preferrably),並解析到一個哈希
  • 做一個「成品率」,與此哈希作爲參數

我現在所擁有的是這樣的:

loop do 
    get_next_in_queue { |s| THINGS } 
end 

def get_next_in_queue 
    queue_dir = Dir[File.dirname(__FILE__)+'/../queue'] 
    info = YAML::load_file(queue_dir[0]) #not sure if this works or not 
    yield info 
end 

如果可能的話,我想讓yield有條件,所以它只發生在實際發現文件的情況下。謝謝!

+0

你必須將你的文件處理後離開,否則'get_next_in_queue'將始終以同一個文件一遍又一遍。 – 2010-05-09 21:20:26

回答

1

好吧,我得到了這個工作! 與queue_dir.empty?的問題是,一個目錄總是包含[".", ".."]

所以我所做的就是:

def get_next_in_queue 
    queue_dir = Dir.entries(File.dirname(__FILE__)+'/../queue') 
    queue_dir.delete "." 
    queue_dir.delete ".." 

    if !queue_dir.empty? 
     info = YAML::load_file("#{File.dirname(__FILE__)}/../queue/#{queue_dir[0]}") 
     yield stem_info 
    else 
     sleep(30) #since it is empty, we probably don't need to check instantly 
    end 
end 
0

只需添加額外的檢查:

def get_next_in_queue 
    queue_dir = Dir[File.dirname(__FILE__)+'/../queue'] 
    return if queue_dir.empty? 
    info = YAML::load_file(queue_dir[0]) #not sure if this works or not 
    yield info if info 
end 

根據您想要的行爲,您還可以引發異常,記錄錯誤,睡眠N秒等