Class: Bundler::Finder

Inherits:
Object
  • Object
show all
Defined in:
lib/bundler08/finder.rb

Overview

Finder behaves like a rubygems source index in that it responds to #search. It also resolves a list of dependencies finding the best possible configuration of gems that satisifes all requirements without causing any gem activation errors.

Instance Method Summary collapse

Constructor Details

#initialize(*sources) ⇒ Finder

Takes an array of gem sources and fetches the full index of gems from each one. It then combines the indexes together keeping track of the original source so that any resolved gem can be fetched from the correct source.

Parameters

*sources<String>

URI pointing to the gem repository



15
16
17
18
19
# File 'lib/bundler08/finder.rb', line 15

def initialize(*sources)
  @cache   = {}
  @index   = {}
  @sources = sources
end

Instance Method Details

#search(dependency) ⇒ Object

Searches for a gem that matches the dependency

Parameters

dependency<Gem::Dependency>

The gem dependency to search for

Returns

[Gem::Specification]

A collection of gem specifications

matching the search


29
30
31
32
33
34
35
# File 'lib/bundler08/finder.rb', line 29

def search(dependency)
  @cache[dependency.hash] ||= begin
    find_by_name(dependency.name).select do |spec|
      dependency =~ spec
    end.sort_by {|s| s.version }
  end
end