diff options
-rw-r--r-- | lib/bundler/dsl.rb | 15 | ||||
-rw-r--r-- | spec/install/gemfile/install_if_spec.rb (renamed from spec/install/gemfile/install_if.rb) | 6 |
2 files changed, 20 insertions, 1 deletions
diff --git a/lib/bundler/dsl.rb b/lib/bundler/dsl.rb index 0436b58f3a..d531a38c04 100644 --- a/lib/bundler/dsl.rb +++ b/lib/bundler/dsl.rb @@ -332,7 +332,20 @@ module Bundler install_if = @install_conditionals.dup install_if.concat Array(opts.delete("install_if")) install_if = install_if.reduce(true) do |memo, val| - memo && (val.respond_to?(:call) ? val.call : val) + memo && case val + when TrueClass, FalseClass, NilClass + val + when Proc + val.call + when String + begin + eval(val) # rubocop:disable Lint/Eval + rescue + true + end + else + true + end end platforms = @platforms.dup diff --git a/spec/install/gemfile/install_if.rb b/spec/install/gemfile/install_if_spec.rb index 080a35b989..0b8bff8442 100644 --- a/spec/install/gemfile/install_if.rb +++ b/spec/install/gemfile/install_if_spec.rb @@ -12,12 +12,16 @@ describe "bundle install with install_if conditionals" do install_if(lambda { false }) do gem "foo" end + install_if "!!false" do + gem "weakling" + end gem "rack" G should_be_installed("rack 1.0", "activesupport 2.3.5") should_not_be_installed("thin") should_not_be_installed("foo") + should_not_be_installed("weakling") lockfile_should_be <<-L GEM @@ -28,6 +32,7 @@ describe "bundle install with install_if conditionals" do rack (1.0.0) thin (1.0) rack + weakling (0.0.3) PLATFORMS ruby @@ -37,6 +42,7 @@ describe "bundle install with install_if conditionals" do foo rack thin + weakling BUNDLED WITH #{Bundler::VERSION} |