summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Delcambre <adelcambre@engineyard.com>2010-02-08 23:39:42 -0800
committerAndy Delcambre <adelcambre@engineyard.com>2010-02-09 14:20:04 -0800
commit6c5a67dc849e7ed4dc1fc05176afcf6ae61ec776 (patch)
tree0b9e8f0253697efa75b9bf8b1c0e6631c5f65309
parentb6bee12d9831a82061e6c2f68f21e59a06a3246f (diff)
downloadbundler-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.rb4
-rw-r--r--lib/bundler/dependency.rb1
-rw-r--r--lib/bundler/runtime.rb12
-rw-r--r--spec/runtime/require_spec.rb40
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