Class: HistoryFile::FileDelegator
- Inherits:
-
Object
- Object
- HistoryFile::FileDelegator
- Defined in:
- lib/history_file/file_delegator.rb
Overview
This class delegates all method calls to the File class.
The generic methods that don't revolve around one specific
file, File.join for example, are just passed on. These
methods are defined in
EXCLUDED_METHODS.
The methods that revolve around doing something with one specific file, however, will be called with an altered Filename. Consider this example:
> fd = HistoryFile::FileDelegator.new("some_prefix")
> fd.open("/path/to/my_file.txt", "w") do |io|
> io.puts "hello there"
> end
> puts fd.read("/path/to/my_file.txt")
=> hello there
This will pass on your block to File.open, but with a
prefixed the filename. So what's really called is:
File.open("/path/to/some_prefix-my_file.txt")
For methods that get a bunch of filenames, but only filenames, as arguments, all of the filenames are patched to include the date prefix. These methods are defined in BULK_METHODS
You shouldn't need to instanciate this class directly, HistoryFile wraps this for you.
Constant Summary collapse
- EXCLUDED_METHODS =
[ :absolute_path, :basename, :catname, :chmod, :chown, :compare, :copy, :directory?, :dirname, :expand_path, :extname, :fnmatch, :fnmatch?, :identical?, :install, :join, :lchown, :link, :makedirs, :move, :path, :realdirpath, :realpath, :rename, :split, :umask, :utime ]
- BULK_METHODS =
[ :delete, :unlink, :safe_unlink ]
- POTENTIALLY_FILE_CREATING_METHODS =
[ :new, :open ]
Instance Method Summary collapse
-
#delegate(*args, &block) ⇒ Object
Either - passes on the call directly to File (why am I not removing this feature?) or - adds the date prefix to the first argument or - adds the date prefix to all arguments.
-
#initialize(opts) ⇒ FileDelegator
constructor
A new instance of FileDelegator.
- #prefixed_filename(f) ⇒ Object
Constructor Details
#initialize(opts) ⇒ FileDelegator
Returns a new instance of FileDelegator.
79 80 81 82 83 |
# File 'lib/history_file/file_delegator.rb', line 79 def initialize(opts) @prefix = opts[:prefix] or raise ArgumentError,":prefix needed" @fallback_glob = opts[:fallback_glob] @subdir = opts[:use_subdirs] end |
Instance Method Details
#delegate(*args, &block) ⇒ Object
Either
- passes on the call directly to File (why am I not removing this feature?) or
- adds the date prefix to the first argument or
- adds the date prefix to all arguments
90 91 92 93 94 95 96 97 98 99 |
# File 'lib/history_file/file_delegator.rb', line 90 def delegate(*args, &block) method = args.slice!(0,1).first if EXCLUDED_METHODS.include?(method) File.send(method, *args, &block) elsif BULK_METHODS.include?(method) delegate_with_patched_filenames(method, *args, &block) else delegate_with_patched_filename(method, *args, &block) end end |
#prefixed_filename(f) ⇒ Object
101 102 103 104 105 106 107 108 109 |
# File 'lib/history_file/file_delegator.rb', line 101 def prefixed_filename(f) dir = File.dirname(f.to_s) file = File.basename(f.to_s) if @subdir File.join(dir, @prefix, file) else File.join(dir, "#{@prefix}-#{file}") end end |