summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2016-07-14 22:05:55 -0500
committerSamuel Giddins <segiddins@segiddins.me>2016-07-19 16:57:55 -0500
commit6a45eccbfec85726c9195be41a7c4d905b6811b8 (patch)
tree1b1b7ca8ec5e07a1d93eb149e62e8bb47ac2abdb
parent5515464bfc38dda105496c4db3dc21cd223cc33e (diff)
downloadbundler-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.rb15
-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}