diff options
author | Samuel Giddins <segiddins@segiddins.me> | 2016-07-14 22:05:55 -0500 |
---|---|---|
committer | Samuel Giddins <segiddins@segiddins.me> | 2016-07-19 16:57:55 -0500 |
commit | 6a45eccbfec85726c9195be41a7c4d905b6811b8 (patch) | |
tree | 1b1b7ca8ec5e07a1d93eb149e62e8bb47ac2abdb | |
parent | 5515464bfc38dda105496c4db3dc21cd223cc33e (diff) | |
download | bundler-seg-install-if-eval.tar.gz |
[DSL] Add support for eval’ed strings in install_ifseg-install-if-eval
-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} |