From 5814ae9ef16863c24da8398bf4159be9ea1606d2 Mon Sep 17 00:00:00 2001 From: Jeffrey Damick Date: Thu, 22 May 2008 10:22:40 -0400 Subject: [PATCH] fixed complex versions in config.gem, gem:unpack, and gem:install --- railties/lib/rails/gem_dependency.rb | 12 +++++++++--- railties/test/gem_dependency_test.rb | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/railties/lib/rails/gem_dependency.rb b/railties/lib/rails/gem_dependency.rb index 2034841..22bab63 100644 --- a/railties/lib/rails/gem_dependency.rb +++ b/railties/lib/rails/gem_dependency.rb @@ -28,7 +28,8 @@ module Rails unpacked_paths = Dir[File.join(self.class.unpacked_path, "#{@name}-#{@version || "*"}")] if unpacked_paths.empty? args = [@name] - args << @requirement.to_s if @requirement + args << @requirement.as_list if @requirement + args.flatten! gem *args else $LOAD_PATH << File.join(unpacked_paths.first, 'lib') @@ -103,15 +104,20 @@ private ################################################################### def install_command cmd = %w(install) << @name cmd << "--version" << "#{@requirement.to_s}" if @requirement cmd << "--source" << @source if @source cmd end def unpack_command cmd = %w(unpack) << @name - cmd << "--version" << "#{@requirement.to_s}" if @requirement + cmd << "--version" << version_requirement if @requirement cmd end + + def version_requirement + selected = Gem::SourceIndex.from_installed_gems.search(/\A#{@name}\z/, @requirement).sort_by { |s| s.version }.last + selected.version.to_s + end end end \ No newline at end of file diff --git a/railties/test/gem_dependency_test.rb b/railties/test/gem_dependency_test.rb index 3ae0189..efc1094 100644 --- a/railties/test/gem_dependency_test.rb +++ b/railties/test/gem_dependency_test.rb @@ -16,7 +16,14 @@ uses_mocha "Plugin Tests" do def test_configuration_adds_gem_dependency config = Rails::Configuration.new config.gem "aws-s3", :lib => "aws/s3", :version => "0.4.0" - assert_equal [["install", "aws-s3", "--version", "= 0.4.0"]], config.gems.collect(&:install_command) + config.gems.first.expects(:version_requirement).returns("0.4.0") + assert_equal [["install", "aws-s3", "--version", "0.4.0"]], config.gems.collect(&:install_command) + end + + def test_configuration_with_complex_version + gem_with_complex_version = Rails::GemDependency.new "json", :version => ['>= 1.1.2', '< 1.1.3'] + gem_with_complex_version.expects(:gem).with("json", '>= 1.1.2', '< 1.1.3') + gem_with_complex_version.add_load_paths end def test_gem_creates_install_command @@ -28,7 +35,8 @@ uses_mocha "Plugin Tests" do end def test_gem_with_version_creates_install_command - assert_equal ["install", "hpricot", "--version", "= 0.6"], @gem_with_version.install_command + @gem_with_version.expects(:version_requirement).returns("0.6") + assert_equal ["install", "hpricot", "--version", "0.6"], @gem_with_version.install_command end def test_gem_creates_unpack_command @@ -36,7 +44,8 @@ uses_mocha "Plugin Tests" do end def test_gem_with_version_unpack_install_command - assert_equal ["unpack", "hpricot", "--version", "= 0.6"], @gem_with_version.unpack_command + @gem_with_version.expects(:version_requirement).returns("0.6") + assert_equal ["unpack", "hpricot", "--version", "0.6"], @gem_with_version.unpack_command end def test_gem_adds_load_paths -- 1.5.4.4