lib/bagit/bag.rb in bagit-0.1.0 vs lib/bagit/bag.rb in bagit-0.2.0

- old
+ new

@@ -7,11 +7,10 @@ module BagIt # Represents the state of a bag on a filesystem class Bag - attr_reader :bag_dir include Validity # Validity functionality include Info # bagit & bag info functionality include Manifest # manifest related functionality @@ -22,20 +21,19 @@ @bag_dir = path # make the dir structure if it doesn't exist FileUtils::mkdir bag_dir unless File.directory? bag_dir FileUtils::mkdir data_dir unless File.directory? data_dir - + # write some tag info if its not there unless File.exist? bagit_txt_file write_bagit("BagIt-Version" => SPEC_VERSION, "Tag-File-Character-Encoding" => "UTF-8") end unless File.exist? bag_info_txt_file write_bag_info('Bag-Software-Agent' => "BagIt Ruby Gem (http://bagit.rubyforge.org)") end - end # Return the path to the data directory def data_dir File.join @bag_dir, 'data' @@ -60,32 +58,42 @@ if src_path.nil? open(path, 'w') { |io| yield io } else FileUtils::cp src_path, path end - end - + # Remove a bag file def remove_file(base_path) path = File.join(data_dir, base_path) raise "Bag file does not exist: #{base_path}" unless File.exist? path FileUtils::rm path end - + + # Retrieve the IO handle for a file in the bag + def get(base_path) + path = File.join(data_dir, base_path) + return nil unless File.exist?(path) + File.open(path) + end + + # Test if this bag is empty (no files) + def empty? + self.bag_files.empty? + end + + # Get all bag file paths relative to the data dir + def paths + self.bag_files.collect { |f| f.sub(data_dir + '/', '') } + end + # Remove all empty directory trees from the bag def gc! - Dir.entries(data_dir).each do |f| - unless %w{.. .}.include? f abs_path = File.join data_dir, f File.clean abs_path end - end - end - end - end