Sha256: a9ea09d8e3c296674bbc714a80647e2380dfbd1b02d872f92973fae9898c1d98
Contents?: true
Size: 1.78 KB
Versions: 2
Compression:
Stored size: 1.78 KB
Contents
module Bundler class Index def self.from_installed_gems Source::SystemGems.new.specs end def initialize @cache = {} @specs = Hash.new { |h,k| h[k] = [] } end def initialize_copy(o) super @cache = {} @specs = Hash.new { |h,k| h[k] = [] } merge!(o) end def empty? @specs.values.flatten.empty? end def search(query) case query when Gem::Specification, RemoteSpecification then search_by_spec(query) when String then @specs[query] else search_by_dependency(query) end end alias [] search def <<(spec) arr = @specs[spec.name] arr.delete_if do |s| s.version == spec.version && s.platform == spec.platform end arr << spec spec end def each @specs.values.flatten.each do |spec| yield spec end end def merge!(other) other.each do |spec| self << spec end self end def merge(other) dup.merge!(other) end def freeze @specs.each do |k,v| v.freeze end super end private def search_by_spec(spec) @specs[spec.name].select { |s| s.version == spec.version } end def search_by_dependency(dependency) @cache[dependency.hash] ||= begin specs = @specs[dependency.name] wants_prerelease = dependency.version_requirements.prerelease? only_prerelease = specs.all? {|spec| spec.version.prerelease? } found = specs.select { |spec| dependency =~ spec } unless wants_prerelease || only_prerelease found.reject! { |spec| spec.version.prerelease? } end found.sort_by {|s| [s.version, s.platform.to_s == 'ruby' ? "\0" : s.platform.to_s] } end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
bundler-0.9.0.pre5 | lib/bundler/index.rb |
bundler-0.9.0.pre4 | lib/bundler/index.rb |