Class: Bundler::Index
- Inherits:
-
Object
- Object
- Bundler::Index
- Includes:
- Enumerable
- Defined in:
- lib/bundler/index.rb
Instance Attribute Summary collapse
-
#sources ⇒ Object
readonly
Returns the value of attribute sources.
Class Method Summary collapse
Instance Method Summary collapse
- #<<(spec) ⇒ Object
- #==(o) ⇒ Object
- #add_source(index) ⇒ Object
- #dependency_names ⇒ Object
- #each(&blk) ⇒ Object
- #empty? ⇒ Boolean
-
#initialize ⇒ Index
constructor
A new instance of Index.
- #initialize_copy(o) ⇒ Object
- #inspect ⇒ Object
- #local_search(query, base = nil) ⇒ Object
-
#search(query, base = nil) ⇒ Object
(also: #[])
Search this index’s specs, and any source indexes that this index knows about, returning all of the results.
- #search_all(name) ⇒ Object
- #size ⇒ Object
-
#unmet_dependency_names ⇒ Object
returns a list of the dependencies.
- #use(other, override_dupes = false) ⇒ Object
Constructor Details
#initialize ⇒ Index
Returns a new instance of Index.
16 17 18 19 20 21 |
# File 'lib/bundler/index.rb', line 16 def initialize @sources = [] @cache = {} @specs = Hash.new { |h,k| h[k] = Hash.new } @all_specs = Hash.new { |h,k| h[k] = [] } end |
Instance Attribute Details
#sources ⇒ Object (readonly)
Returns the value of attribute sources.
13 14 15 |
# File 'lib/bundler/index.rb', line 13 def sources @sources end |
Class Method Details
.build {|i| ... } ⇒ Object
7 8 9 10 11 |
# File 'lib/bundler/index.rb', line 7 def self.build i = new yield i i end |
Instance Method Details
#<<(spec) ⇒ Object
86 87 88 89 90 |
# File 'lib/bundler/index.rb', line 86 def <<(spec) @specs[spec.name]["#{spec.version}-#{spec.platform}"] = spec spec end |
#==(o) ⇒ Object
130 131 132 133 134 135 |
# File 'lib/bundler/index.rb', line 130 def ==(o) all? do |spec| other_spec = o[spec].first (spec.dependencies & other_spec.dependencies).empty? && spec.source == other_spec.source end end |
#add_source(index) ⇒ Object
137 138 139 140 141 142 143 144 |
# File 'lib/bundler/index.rb', line 137 def add_source(index) if index.is_a?(Index) @sources << index @sources.uniq! # need to use uniq! here instead of checking for the item before adding else raise ArgumentError, "Source must be an index, not #{index.class}" end end |
#dependency_names ⇒ Object
105 106 107 108 109 |
# File 'lib/bundler/index.rb', line 105 def dependency_names names = [] each{|s| names.push(*s.dependencies.map{|d| d.name }) } names.uniq end |
#each(&blk) ⇒ Object
92 93 94 95 96 |
# File 'lib/bundler/index.rb', line 92 def each(&blk) specs.values.each do |spec_sets| spec_sets.values.each(&blk) end end |
#empty? ⇒ Boolean
42 43 44 45 |
# File 'lib/bundler/index.rb', line 42 def empty? each { return false } true end |
#initialize_copy(o) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/bundler/index.rb', line 23 def initialize_copy(o) super @sources = @sources.dup @cache = {} @specs = Hash.new { |h,k| h[k] = Hash.new } @all_specs = Hash.new { |h,k| h[k] = [] } o.specs.each do |name, hash| @specs[name] = hash.dup end o.all_specs.each do |name, array| @all_specs[name] = array.dup end end |
#inspect ⇒ Object
38 39 40 |
# File 'lib/bundler/index.rb', line 38 def inspect "#<#{self.class}:0x#{object_id} sources=#{sources.map{|s| s.inspect}} specs.size=#{specs.size}>" end |
#local_search(query, base = nil) ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/bundler/index.rb', line 74 def local_search(query, base = nil) case query when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query) when String then specs_by_name(query) when Gem::Dependency then search_by_dependency(query, base) else raise "You can't search for a #{query.inspect}." end end |
#search(query, base = nil) ⇒ Object Also known as: []
Search this index’s specs, and any source indexes that this index knows about, returning all of the results.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/bundler/index.rb', line 57 def search(query, base = nil) results = local_search(query, base) seen = Set.new(results.map { |spec| [spec.name, spec.version, spec.platform] }) @sources.each do |source| source.search(query, base).each do |spec| lookup = [spec.name, spec.version, spec.platform] unless seen.include?(lookup) results << spec seen << lookup end end end results.sort_by {|s| [s.version, s.platform.to_s == 'ruby' ? "\0" : s.platform.to_s] } end |
#search_all(name) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/bundler/index.rb', line 47 def search_all(name) all_matches = @all_specs[name] + local_search(name) @sources.each do |source| all_matches.concat(source.search_all(name)) end all_matches end |
#size ⇒ Object
124 125 126 127 128 |
# File 'lib/bundler/index.rb', line 124 def size @sources.inject(@specs.size) do |size, source| size += source.size end end |
#unmet_dependency_names ⇒ Object
returns a list of the dependencies
99 100 101 102 103 |
# File 'lib/bundler/index.rb', line 99 def unmet_dependency_names names = dependency_names names.delete_if{|n| n == "bundler" } names.select{|n| search(n).empty? } end |
#use(other, override_dupes = false) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/bundler/index.rb', line 111 def use(other, override_dupes = false) return unless other other.each do |s| if (dupes = search_by_spec(s)) && dupes.any? @all_specs[s.name] = [s] + dupes next unless override_dupes self << s end self << s end self end |