Sha256: 30f3fd4f37246f5603e9a93d46bf6bca6be72171486af8ef35f7bc558db3e61d

Contents?: true

Size: 1.58 KB

Versions: 3

Compression:

Stored size: 1.58 KB

Contents

# Copyright: Copyright (c) 2004  Nicolas Despres. All rights reserved.
# Author: Nicolas Despres  <polrop@lrde.epita.fr>.
# License: Gnu General Public License.

# $LastChangedBy: ertai $
# $Id: autoload_tree.rb 186 2005-04-03 00:07:45Z ertai $


require 'pathname'


class Module

  def autoload_tree(dir, recursive=true, &block)
    pdir = Pathname.new(dir)
    pdir.each_entry do |p|
      next if p.to_s =~ /^\./
      pfull = pdir + p
      if pfull.directory? and recursive
        name = p.to_s.capitalize!
        const_set(name, Module.new) unless const_defined?(name)
        const_get(name).autoload_tree(pfull, recursive, &block)
      elsif pfull.file? and p.to_s =~ /\.rb$/
        autoload(name.to_s, pfull.to_s) if name = block[p]
      end
    end
  end

end # class Module


if (not defined? AUTOLOAD_TREE_TESTED) and
    (defined? TEST_MODE or __FILE__ == $0)
AUTOLOAD_TREE_TESTED = true

require 'test/unit/ui/console/testrunner'


class AutoloadTreeTest < Test::Unit::TestCase

  if defined? SRC_DIR
    REPO_DIR = SRC_DIR + Pathname.new('../test/resources/autoload_tree')
  else
    REPO_DIR = Pathname.new(__FILE__).dirname +
               Pathname.new('../../test/resources/autoload_tree')
  end

  module AutoloadTree; end

  #
  # Test
  #
  def test_autoload_tree
    $: << REPO_DIR
    AutoloadTree.autoload_tree(REPO_DIR) { |p| p.to_s.sub!(/\.rb$/, '') }
    ["Foo", "B", "A"].each do |x|
      assert(AutoloadTree.constants.include?(x), "#{x} is missing")
    end
    assert_equal(["C"], AutoloadTree::Foo.constants)
    $:.delete(REPO_DIR)
  end

end # class AutoloadTreeTest


end


Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ttk-0.1.576 ruby_ex/module/autoload_tree.rb
ttk-0.1.579 ruby_ex/module/autoload_tree.rb
ttk-0.1.580 ruby_ex/module/autoload_tree.rb