From 9adaec4b4f55c33efe6e358ba8c55bbc7ebbce48 Mon Sep 17 00:00:00 2001 From: Charlie Somerville Date: Wed, 7 Aug 2013 02:37:16 -0700 Subject: [PATCH] fix source_index related shit --- railties/lib/rails/gem_dependency.rb | 8 +++++++- railties/lib/rails_generator/lookup.rb | 15 ++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/railties/lib/rails/gem_dependency.rb b/railties/lib/rails/gem_dependency.rb index 8e9827086c..3b9c5a7373 100644 --- a/railties/lib/rails/gem_dependency.rb +++ b/railties/lib/rails/gem_dependency.rb @@ -4,6 +4,12 @@ module Gem def self.source_index Gem::Specification end + + def self.source_index_search(dep) + Gem::Specification.select { |spec| + dep.matches_spec?(spec) + } + end end module Rails @@ -101,7 +107,7 @@ def specification # code repeated from Gem.activate. Find a matching spec, or the currently loaded version. # error out if loaded version and requested version are incompatible. @spec ||= begin - matches = Gem.source_index.search(self) + matches = Gem.source_index_search(self) matches << @@framework_gems[name] if framework_gem? if Gem.loaded_specs[name] then # This gem is already loaded. If the currently loaded gem is not in the diff --git a/railties/lib/rails_generator/lookup.rb b/railties/lib/rails_generator/lookup.rb index de7b150439..53e590dd7e 100644 --- a/railties/lib/rails_generator/lookup.rb +++ b/railties/lib/rails_generator/lookup.rb @@ -209,7 +209,7 @@ class GemGeneratorSource < AbstractGemSource # Yield latest versions of generator gems. def each dependency = Gem::Dependency.new(/_generator$/, Gem::Requirement.default) - Gem.source_index.search(dependency).inject({}) { |latest, gem| + Gem.source_index_search(dependency).inject({}) { |latest, gem| hem = latest[gem.name] latest[gem.name] = gem if hem.nil? or gem.version > hem.version latest @@ -231,17 +231,14 @@ def each private def generator_full_paths @generator_full_paths ||= - Gem.source_index.inject({}) do |latest, name_gem| - name, gem = name_gem - hem = latest[gem.name] - latest[gem.name] = gem if hem.nil? or gem.version > hem.version - latest - end.values.inject([]) do |mem, gem| + Gem::Specification.each_with_object({}) { |g, latest| + hem = latest[g.name] + latest[g.name] = g if hem.nil? or g.version > hem.version + }.values.each_with_object([]) { |gem, mem| Dir[gem.full_gem_path + '/{rails_,}generators/**/*_generator.rb'].each do |generator| mem << generator end - mem - end + } end end -- GitLab