module Nanoc3
class Path
def initialize(str)
@orig_str = str
end
def components
@components ||= @orig_str.gsub(/^\/+|\/+$/, '').split('/')
end
def to_s
@clean_str ||= ('/' + components.join('/') + '/')
end
def inspect
"<#{self.class}:0x#{self.object_id.to_s(16)} str=#{self.to_s}>"
end
def <=>(other)
self.to_s <=> other.to_s
end
def ==(other)
(self.to_s <=> other.to_s) == 0
end
def eql?(other)
self.class == other.class && self == other
end
def hash
[ self.class, self.to_s ].hash
end
def =~(str)
self == Nanoc3::Path.new(str)
end
end
end
puts '*** These should all be /foo/bar/:'
puts Nanoc3::Path.new('/foo/bar/')
puts Nanoc3::Path.new('/foo/bar')
puts Nanoc3::Path.new('foo/bar/')
puts Nanoc3::Path.new('foo/bar')
puts Nanoc3::Path.new('////foo/bar////')
puts
puts '*** These should all be true (Path-Path comparison):'
puts Nanoc3::Path.new('/foo/bar/') == Nanoc3::Path.new('/foo/bar')
puts Nanoc3::Path.new('foo/bar/') == Nanoc3::Path.new('/foo/bar/')
puts
puts '*** These should all be true (Path-String comparison using ==):'
puts Nanoc3::Path.new('/foo/bar/') == '/foo/bar/'
puts
puts '*** These should all be false (Path-String comparison using ==):'
puts Nanoc3::Path.new('/foo/bar/') == 'foo/bar/'
puts Nanoc3::Path.new('/foo/bar/') == '/foo/bar'
puts
puts '*** These should all be true (Path-String comparison using =~):'
puts Nanoc3::Path.new('/foo/bar/') =~ '/foo/bar/'
puts Nanoc3::Path.new('/foo/bar/') =~ '/foo/bar'
puts