Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
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
This paste will be private.
From the Design Piracy series on my blog: