class Dir # def self.ascend( dir, inclusive=true, &blk) dir = dir.dup blk.call( dir ) if inclusive ri = dir.rindex('/') while ri dir = dir.slice(0...ri) if dir == "" blk.call( '/' ) ; break end blk.call( dir ) ri = dir.rindex('/') end end end # _____ _ # |_ _|__ ___| |_ # | |/ _ \/ __| __| # | | __/\__ \ |_ # |_|\___||___/\__| # =begin test require 'test/unit' class TCDir < Test::Unit::TestCase def test_ascend_1 c = [] Dir.ascend( "this/path/up" ) do |path| c << path end assert_equal( 'this/path/up', c[0] ) assert_equal( 'this/path', c[1] ) assert_equal( 'this', c[2] ) end def test_ascend_2 c = [] Dir.ascend( "this/path/up", false ) do |path| c << path end assert_equal( 'this/path', c[0] ) assert_equal( 'this', c[1] ) end end =end