HistoryFile
Behaves like a File class and does some convenience stuff
around a HistoryFile::FileDelegator instance. It lets you
version files by dates. A date prefix is added to the file
name.
If you want to write a file to store data from yesterday, you could write:
> f = HistoryFile[1.day.ago].new("/tmp/foo.txt", "w")
=> #<File:/tmp/2012.11.02-foo.txt>
The returned HistoryFile::FileDelegator object supports all
methods that File has, but adds a date prefix to those methods
that revolve around a single file (reading, writing, etc.)
If a file for a given date is not available, HistoryFile falls
back to the freshest file that is older than the given date.
> f = HistoryFile[3.days.ago].new("test.txt", "w")
=> #<File:./2012.11.12-test.txt>
> f.write("I am old")
=> 8
> f.close
=> nil
> HistoryFile[Date.today].read("test.txt")
=> "I am old"
> HistoryFile[10.days.ago].read("test.txt")
Errno::ENOENT: No such file or directory - ./2012.11.05-test.txt
It does this for every method where a prefix is added and when
an Errno::ENOENT is thrown.
Methods that patch all arguments with a date prefix
You can pass an arbitrary amount of arguments to these methods, but all of them are file names. So we'll go ahead and prefix all of them:
deleteunlinksafe_unlink
Methods that patch nothing and just delegate to File
These are mostly methods that are either not HistoryFile specific
(i.e. File.join to join components with the OS dependant path
separator) or where one can't dumbly prefix filenames.
absolute_pathbasenamecatnamechmodchowncomparecopydirectory?dirnameexpand_pathextnamefnmatchfnmatch?identical?installjoinlchownlinkmakedirsmovepathrealdirpathrealpathrenamesplitumaskutime
Methods that add a prefix to the filename
All methods not mentioned in the previous two sections
Methods that automatically create a sub directory
If you set HistoryFile.mode = :subdir and you call one of the
following methods, Historyfile will create a sub directory for the given
date if it does not exist already
newopen
