构建自己的DSL之三 抓取文件管理
转载请标明出处:http://fuliang.iteye.com/blog/1127437
我们抓取的网页抽取的结果是带有日期的文件,经常需要操作某个日期范围的文件,来进行统计,抽样,入库,所有需要一个方便的DSL来处理这件事情。
我们希望制定几个条件就可以得到符合条件的文件,比如:
data_set = CrawlerDataSet.with_cond do |cond| cond.dir("/mydir"). from_date("2011-05-01"). to_date("2011-07-08")enddata_set.file_names
data_set.each do |file| puts file.versionend
#!/usr/bin/env rubyrequire 'date'require 'crawler_file'class CrawlerDataSetclass << self def with_condreturn yield CrawlerDataSet.newendenddef initialize@files = []enddef dir(dir)@dir = dirselfenddef from_date(from_date)@from_date = Date.parse(from_date)selfenddef to_date(to_date=nil)@to_date = if to_date.nil? then Date.today else Date.parse(to_date) endselfend#use the date rangedef file_names(@from_date.. @to_date).each do |date|date_str = date.strftime("%Y%m%d")Dir.glob("#@dir/#{date_str}-*dedup").each do |file|@files << fileendend@filesenddef eachfile_names.each do |file_name|begincrawler_file = CrawlerFile.new(file_name)yield crawler_fileensurecrawler_file.closeendendenddef each_with_namefile_names.each do |file_name|begincrawler_file = CrawlerFile.new(file_name)yield crawler_file, file_nameensurecrawler_file.closeendendendend