lib/cany/recipes/bundler.rb in cany-0.0.2 vs lib/cany/recipes/bundler.rb in cany-0.1.0
- old
+ new
@@ -1,16 +1,34 @@
module Cany
module Recipes
class Bundler < Cany::Recipe
register_as :bundler
+ option :env_vars
def clean
rmtree 'bundler'
# rmtree 'vendor/bundle' -- do not remove gems, increase testing time
inner.clean
end
+ def prepare
+ configure :env_vars, GEM_PATH: 'bundler'
+ end
+
+ def create(creator)
+ require 'bundler'
+ lock_path = File.join(spec.base_dir, 'Gemfile.lock')
+ if File.exists? lock_path
+ lock = ::Bundler::LockfileParser.new File.read lock_path
+ lock.specs.each do |spec|
+ Gem.get(spec.name.to_sym).dependencies.each do |dep|
+ depend dep
+ end
+ end
+ end
+ end
+
def build
ENV['GEM_PATH'] = 'bundler'
ENV['PATH'] = 'bundler/bin:' + ENV['PATH']
ruby_bin 'gem', %w(install bundler --no-ri --no-rdoc --install-dir bundler --bindir bundler/bin)
ruby_bin 'bundle', %w(install --deployment --without development test)
@@ -19,15 +37,20 @@
def binary
install 'bundler', "/usr/share/#{spec.name}"
install '.bundle', "/usr/share/#{spec.name}"
install 'vendor/bundle', "/usr/share/#{spec.name}/vendor"
- install_content "/usr/bin/#{spec.name}", "#!/bin/sh
-cd /usr/share/#{spec.name}
-export GEM_PATH=/usr/share/#{spec.name}/bundler
-exec /usr/share/#{spec.name}/bundler/bin/bundle exec \"$@\"
-"
+ install_content "/usr/bin/#{spec.name}", wrapper_script
inner.binary
+ end
+
+ def wrapper_script
+ content = [ '#!/bin/sh', "cd /usr/share/#{spec.name}" ]
+ option(:env_vars).each do |name, value|
+ content << "export #{name}=\"#{value}\""
+ end
+ content += [ "exec /usr/share/#{spec.name}/bundler/bin/bundle exec \"$@\"", '' ]
+ content.join "\n"
end
end
end
end