lib/vfs/path.rb in vfs-0.3.12 vs lib/vfs/path.rb in vfs-0.3.13

- old
+ new

@@ -8,47 +8,47 @@ Path.validate! path path, probably_dir = Path.normalize_to_string path raise "invalid path '#{path}' (you are outside of the root)!" unless path super path @probably_dir = probably_dir - end + end end - + def + path = '' path = path.to_s Path.validate! path, false - + if Path.absolute?(path) Path.normalize path elsif path.empty? self else Path.normalize "#{self}#{'/' unless self == '/'}#{path}" end end - + def parent self + '..' end - + def probably_dir? !!@probably_dir end - + def name unless @name root = self[0..0] @name ||= split('/').last || root end @name end - + class << self def absolute? path path =~ /^[\/~\/]|^\.$|^\.\// end - + def valid? path, forbid_relative = true, &block result, err = if forbid_relative and !absolute?(path) [false, "path must be started with '/', or '.'"] elsif path =~ /.+\/~$|.+\/$|\/\.$/ [false, "path can't be ended with '/', '/~', or '/.'"] @@ -57,32 +57,32 @@ # elsif path =~ /.+[~]|\/\.\// # [false, "'~', or '.' can be present only at the begining of string"] else [true, nil] end - + block.call err if block and !result and err result end - + def normalize path path, probably_dir = normalize_to_string path - unless path + unless path nil else Path.new(path, skip_normalization: true, probably_dir: probably_dir) end end - + def validate! path, forbid_relative = true valid?(path, forbid_relative){|error| raise "invalid path '#{path}' (#{error})!"} end - + def normalize_to_string path - root = path[0..0] + root = path[0..0] result, probably_dir = [], false - + parts = path.split('/')[1..-1] if parts parts.each do |part| if part == '..' and root != '.' return nil, false unless result.size > 0 @@ -93,32 +93,32 @@ else result << part probably_dir &&= false end end - end - normalized_path = result.join('/') - + end + normalized_path = result.join('/') + probably_dir ||= true if normalized_path.empty? return "#{root}#{'/' unless root == '/' or normalized_path.empty?}#{normalized_path}", probably_dir end - end - - # protected + end + + # protected # def delete_dir_mark # path = path.to_s.sub(%r{/$}, '') # end - # - # + # + # # def root_path? path # path =~ /^[#{ROOT_SYMBOLS}]$/ # end - # + # # def split_path path # path.split(/#{ROOT_SYMBOLS}/) # end - # + # # def dir_mark? path # path =~ %r{/$} # end end end \ No newline at end of file