Sha256: 26c684c79727de5bcbd3815ba23e454dd88b4e9bc94ce29fa709808da1766f48

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

module TarvitHelpers

  class RecursiveLoader
    attr_reader :method

    def initialize(method=:require)
      raise "Method #{method} is invalid, must be :require or :load" unless [ :require, :load ].include?(method)
      @method = method
    end

    def load_modules(dir, priorities=[])
      load_ruby_files(dir, priorities)
      prioritize(global_dirs(dir), priorities).each do |subdir|
        load_modules dir.join(subdir), priorities
      end
    end

    def load_modules_in(dir)
      load_ruby_files(dir)
      valid_directories(dir).each do |subdir|
        load_modules_in dir.join(subdir)
      end
    end

    module Context
      def load_modules(dir, priorities=[], method=:require)
        RecursiveLoader.new(method).load_modules(dir, priorities)
      end
    end

    extend Context

    private

    def global_dirs(dir)
      (valid_directories(dir)).uniq.sort
    end

    def valid_directories(dir)
      Dir.open(dir).entries.select do |entry|
        !%w{ . .. }.include?(entry) && File.directory?(dir.join(entry))
      end
    end

    def load_ruby_files(dir, priorities=[])
      prioritize_files(ruby_files(dir), priorities).each do |rb|
        send(method, dir.join(rb))
      end
    end

    RB_EXT = '.rb'

    def ruby_files(dir)
      Dir.open(dir).entries.select do |entry|
        entry.ends_with? RB_EXT
      end.sort
    end

    def prioritize(list, priorities)
      (priorities.select{|p| list.include?(p) } + list ).uniq
    end

    def prioritize_files(files, priorities)
      files_priorities = priorities.map do |p|
        p.include?(RB_EXT) ? p : (p+RB_EXT)
      end
      prioritize(files, files_priorities)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tarvit-helpers-0.0.23 lib/tarvit-helpers/modules/recursive_loader.rb