2010-05-09 87 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秒等