Sha256: fbb3cef313ada00b13d5c39dcbef61e72061c4842c3d90e92e78bfa10572ec02

Contents?: true

Size: 1.94 KB

Versions: 3

Compression:

Stored size: 1.94 KB

Contents

module Jim
  # Index managages a list of directories which are searched to find requirements
  class Index
    attr_reader :directories
    
    def initialize(*directories)
      @directories = [directories].flatten.compact
      @jimhome_re  = /#{Pathname.new(@directories.first).expand_path.to_s}/
    end

    def add(directory)
      @directories.unshift directory
    end
    
    def list(search = nil)
      list = {}
      each_file_in_index('.js') do |filename|
        if /lib\/([^\/\-]+)-([\d\w\.\-]+)\/.+/.match filename
          name    = $1
          version = $2
        else
          name, version = Jim::VersionParser.parse_filename(filename)
        end
        if name && version
          list[name] ||= []
          list[name] << [version, filename]
        end
      end
      if search
        search = /#{search}/i
        list = list.find_all {|lib| lib[0] =~ search }
      end
      list.sort
    end

    def find(name, version = nil)
      name     = Pathname.new(name)
      stem     = name.basename
      ext      = '.js'
      possible_paths = if version
        [
          /#{stem}-#{version}\/#{name}#{ext}$/,
         /#{name}-#{version}#{ext}$/
        ]
      else
        [
          /#{name}#{ext}/,
          /#{name}-[\d\w\.\-]+#{ext}/
        ]
      end
      final = false
      each_file_in_index(ext) do |filename|
        possible_paths.each do |p|
          if File.file?(filename) && p.match(filename)
            final = Pathname.new(filename).expand_path
            block_given? ? yield(final) : break
          end
        end
        break if final && !block_given?
      end
      final
    end
    
    def in_jimhome?(path)
      !!(path.to_s =~ @jimhome_re)
    end
    
    def find_all(name, version = nil)
      matched = []
      find(name, version) {|p| matched << p }
      matched
    end
    
    def each_file_in_index(ext, &block)
      Jim.each_path_in_directories(@directories, ext, [], &block)
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
jim-0.2.3 lib/jim/index.rb
jim-0.2.2 lib/jim/index.rb
jim-0.2.1 lib/jim/index.rb