lib/dockdev/context/rubygems.rb in dockdev-0.3.8 vs lib/dockdev/context/rubygems.rb in dockdev-0.4.0
- old
+ new
@@ -2,10 +2,11 @@
require 'bundler'
module Dockdev
module Context
class Rubygems
+ include TR::CondUtils
def self.init_path(path)
Rubygems.new(path)
end
@@ -21,52 +22,105 @@
def find_gemfile
Dir.glob(File.join(@path,"Gemfile"))
end
- def process_mount(opts = { dir_inside_docker: "/opt" })
+ def apply_context(dockdev_config)
+ ddConf = dockdev_config
- if @mounts.empty?
+ if not_empty?(ddConf)
- dir_inside_docker = opts[:dir_inside_docker]
-
- script = ["#!/bin/bash"]
- #script << "alias be > /dev/null 2>&1 && echo 'alias be=bundle exec' >> ~/.bashrc"
- script << "echo 'alias be=\"bundle exec\"' >> ~/.bashrc"
-
#
# looking at source code
# https://github.com/rubygems/rubygems/blob/master/bundler/lib/bundler/shared_helpers.rb#L246
# seems this is the way to set root for Bundler
#
ENV['BUNDLE_GEMFILE'] = find_gemfile.first
- Bundler.load.dependencies.each do |d|
- if not d.source.nil?
- src = d.source
- if src.path.to_s != "."
- pathInsideDocker = File.join(dir_inside_docker, d.name)
- @mounts[src.path.expand_path.to_s] = pathInsideDocker
- script << "bundle config --global local.#{d.name} #{pathInsideDocker}"
- #res[d.name] = src.path.expand_path.to_s
+ if not_empty?(ENV['BUNDLE_GEMFILE'])
+
+ cmd = ["echo 'alias be = \"bundle exec\"' >> /etc/bash.bashrc"]
+
+ Bundler.load.dependencies.each do |d|
+ if not d.source.nil?
+ src = d.source
+ if src.path.to_s != "."
+ pathInsideDocker = File.join(dir_inside_docker, d.name)
+ ddConf.add_mount(src.path.expand_path.to_s,pathInsideDocker)
+ # following line assumed 'bundle' program already installed inside the image
+ cmd << "bundle config --global local.#{d.name} #{pathInsideDocker}"
+ end
end
end
- end
- scriptOut = File.join(@path,"to-be-executed-once-inside-docker.sh")
- File.open(scriptOut,"w") do |f|
- f.write script.join("\n")
+ if not_empty?(cmd)
+
+ script = ["#!/bin/bash"]
+ script << "if ! command -v bundle &> /dev/null"
+ script << " echo \"Command 'bundle' is available!\""
+ script.concat(cmd.collect { |e| " #{e}"})
+ script << "then"
+ script << " echo \"Command 'bundle' not available\""
+ #script << " exit 1"
+ script << "fi"
+
+ File.open("rubygems_init.sh","w") do |f|
+ f.write script.join("\n")
+ end
+
+ ddConf.append_Dockerfile("COPY rubygems_init.sh /tmp/rubygems_init.sh")
+ ddConf.append_Dockerfile("RUN chmod +x /tmp/rubygems_init.sh && /tmp/rubygems_init.sh")
+ end
+
end
- `chmod +x #{scriptOut}`
end
- @mounts
-
+ ddConf
end
- def process_port(opts = {})
- @ports
- end
+ #def process_mount(opts = { dir_inside_docker: "/opt" })
+
+ # if @mounts.empty?
+
+ # dir_inside_docker = opts[:dir_inside_docker]
+
+ # script = ["#!/bin/bash"]
+ # #script << "alias be > /dev/null 2>&1 && echo 'alias be=bundle exec' >> ~/.bashrc"
+ # script << "echo 'alias be=\"bundle exec\"' >> ~/.bashrc"
+
+ # #
+ # # looking at source code
+ # # https://github.com/rubygems/rubygems/blob/master/bundler/lib/bundler/shared_helpers.rb#L246
+ # # seems this is the way to set root for Bundler
+ # #
+ # ENV['BUNDLE_GEMFILE'] = find_gemfile.first
+ # Bundler.load.dependencies.each do |d|
+ # if not d.source.nil?
+ # src = d.source
+ # if src.path.to_s != "."
+ # pathInsideDocker = File.join(dir_inside_docker, d.name)
+ # @mounts[src.path.expand_path.to_s] = pathInsideDocker
+ # script << "bundle config --global local.#{d.name} #{pathInsideDocker}"
+ # #res[d.name] = src.path.expand_path.to_s
+ # end
+ # end
+ # end
+
+ # scriptOut = File.join(@path,"to-be-executed-once-inside-docker.sh")
+ # File.open(scriptOut,"w") do |f|
+ # f.write script.join("\n")
+ # end
+ # `chmod +x #{scriptOut}`
+
+ # end
+
+ # @mounts
+
+ #end
+
+ #def process_port(opts = {})
+ # @ports
+ #end
end
end
end