diff options
author | Andy Delcambre <adelcambre@engineyard.com> | 2010-02-08 23:39:42 -0800 |
---|---|---|
committer | Andy Delcambre <adelcambre@engineyard.com> | 2010-02-09 14:20:04 -0800 |
commit | 6c5a67dc849e7ed4dc1fc05176afcf6ae61ec776 (patch) | |
tree | 0b9e8f0253697efa75b9bf8b1c0e6631c5f65309 | |
parent | b6bee12d9831a82061e6c2f68f21e59a06a3246f (diff) | |
download | bundler-6c5a67dc849e7ed4dc1fc05176afcf6ae61ec776.tar.gz |
Dump full details into Gemfile.lock
* Lock any groups
* Lock :require
* Use these when rehydrating from yml
-rw-r--r-- | lib/bundler/definition.rb | 4 | ||||
-rw-r--r-- | lib/bundler/dependency.rb | 1 | ||||
-rw-r--r-- | lib/bundler/runtime.rb | 12 | ||||
-rw-r--r-- | spec/runtime/require_spec.rb | 40 |
4 files changed, 49 insertions, 8 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index 4fad1de0e7..cbc84328e4 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -83,8 +83,8 @@ module Bundler end def dependencies - @dependencies ||= @details["dependencies"].map do |args| - Bundler::Dependency.new(*args.to_a.flatten) + @dependencies ||= @details["dependencies"].map do |dep, opts| + Bundler::Dependency.new(dep, opts.delete("version"), opts) end end end diff --git a/lib/bundler/dependency.rb b/lib/bundler/dependency.rb index a5b14464ec..e9edc61f9d 100644 --- a/lib/bundler/dependency.rb +++ b/lib/bundler/dependency.rb @@ -3,6 +3,7 @@ require 'rubygems/dependency' module Bundler class Dependency < Gem::Dependency attr_reader :autorequire + attr_reader :groups def initialize(name, version, options = {}, &blk) super(name, version) diff --git a/lib/bundler/runtime.rb b/lib/bundler/runtime.rb index 2ee0ddd085..8925dab975 100644 --- a/lib/bundler/runtime.rb +++ b/lib/bundler/runtime.rb @@ -29,6 +29,10 @@ module Bundler end def dependencies + @definition.dependencies + end + + def actual_dependencies @definition.actual_dependencies end @@ -64,7 +68,7 @@ module Bundler def specs @specs ||= begin source_requirements = {} - dependencies.each do |dep| + actual_dependencies.each do |dep| next unless dep.source && dep.source.respond_to?(:local_specs) source_requirements[dep.name] = dep.source.local_specs end @@ -130,7 +134,11 @@ module Bundler { s.name => options } end - details["dependencies"] = @definition.dependencies.map { |d| {d.name => d.version_requirements.to_s} } + details["dependencies"] = @definition.dependencies.inject({}) do |h,d| + h.merge!({d.name => {"version" => d.version_requirements.to_s, + "group" => d.groups, + "require" => d.autorequire}}) + end details end diff --git a/spec/runtime/require_spec.rb b/spec/runtime/require_spec.rb index d96585cb05..d53e5e4cfd 100644 --- a/spec/runtime/require_spec.rb +++ b/spec/runtime/require_spec.rb @@ -45,15 +45,47 @@ describe "Bundler.require" do it "requires the locked gems" do bundle :lock - env = bundled_app(".bundle/environment.rb") - out = ruby("require '#{env}'; Bundler.setup; Bundler.require") + out = ruby("require 'bundler'; Bundler.setup; Bundler.require") + puts out out.should == "two" - out = ruby("require '#{env}'; Bundler.setup(:bar); Bundler.require(:bar)") + out = ruby("require 'bundler'; Bundler.setup(:bar); Bundler.require(:bar)") out.should == "baz\nqux" - out = ruby("require '#{env}'; Bundler.setup(:default, :bar); Bundler.require(:default, :bar)") + out = ruby("require 'bundler'; Bundler.setup(:default, :bar); Bundler.require(:default, :bar)") out.should == "two\nbaz\nqux" end + + describe "requiring the environment directly" do + it "requires the locked gems" do + bundle :lock + env = bundled_app(".bundle/environment.rb") + + out = ruby("require '#{env}'; Bundler.setup; Bundler.require") + out.should == "two" + + out = ruby("require '#{env}'; Bundler.setup(:bar); Bundler.require(:bar)") + out.should == "baz\nqux" + + out = ruby("require '#{env}'; Bundler.setup(:default, :bar); Bundler.require(:default, :bar)") + out.should == "two\nbaz\nqux" + end + end + + describe "using bundle exec" do + it "requires the locked gems" do + bundle :lock + + bundle "exec ruby -e 'Bundler.require'" + out.should == "two" + + bundle "exec ruby -e 'Bundler.require(:bar)'" + out.should == "baz\nqux" + + bundle "exec ruby -e 'Bundler.require(:default, :bar)'" + out.should == "two\nbaz\nqux" + end + end + end |