Method: FSDB::Database#fetch
- Defined in:
- lib/fsdb/database.rb
#fetch(path = "/") ⇒ Object Also known as: []
Fetch a copy of the object at the path for private use by the current thread/process. (The copy is a deep copy.)
Note that this is inherently less efficient than #browse, because #browse leaves the object in the cache, but, for safety, #fetch can only return a copy and wipe the cache, since the copy is going to be used outside of any transaction. Subsequent transactions will have to read the object again.
735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 |
# File 'lib/fsdb/database.rb', line 735 def fetch(path = "/") abs_path = absolute(path) file_id = get_file_id(abs_path) object_exclusive file_id do |cache_entry| open_read_lock(path) do |f| object = cache_object(f, cache_entry) cache_entry.stale! object end end rescue NotDirError raise NotDirError, "Not a directory - #{path} in #{inspect}" rescue MissingFileError if PLATFORM_IS_WINDOWS_ME and File.directory?(abs_path) return Formats::DIR_LOAD_FROM_PATH[abs_path] end clear_entry(file_id) default_fetch(path) rescue Errno::EACCES raise if File::CAN_OPEN_DIR raise unless File.directory?(abs_path) # on some platforms, opening a dir raises EACCESS return Formats::DIR_LOAD_FROM_PATH[abs_path] ensure clear_entry(file_id) # the entry was recently marked stale anyway end |