lib/pairtree/path.rb in pairtree-0.0.0 vs lib/pairtree/path.rb in pairtree-0.1.0

- old
+ new

@@ -1,11 +1,50 @@ module Pairtree class Path + @@leaf_proc = lambda { |id| id } + + def self.set_leaf value = nil, &block + if value.nil? + @@leaf_proc = block + else + if value.is_a?(Proc) + @@leaf_proc = value + else + @@leaf_proc = lambda { |id| value } + end + end + end + + def self.leaf id + if @@leaf_proc + Pairtree::Identifier.encode(@@leaf_proc.call(id)) + else + '' + end + end + def self.id_to_path id - File.join(Pairtree::Identifier.encode(id).scan(/..?/)) + path = File.join(Pairtree::Identifier.encode(id).scan(/..?/),self.leaf(id)) + path.sub(%r{#{File::SEPARATOR}+$},'') end def self.path_to_id ppath - Pairtree::Identifier.decode(ppath.split(File::SEPARATOR).join) + parts = ppath.split(File::SEPARATOR) + parts.pop if @@leaf_proc and parts.last.length > Root::SHORTY_LENGTH + Pairtree::Identifier.decode(parts.join) + end + + def self.remove! path + FileUtils.remove_dir(path, true) + parts = path.split(File::SEPARATOR) + parts.pop + while parts.length > 0 and parts.last != 'pairtree_root' + begin + FileUtils.rmdir(parts.join(File::SEPARATOR)) + parts.pop + rescue SystemCallError + break + end + end end end end