Skip to content

Instantly share code, notes, and snippets.

@tylerjohnst
Last active June 15, 2017 15:42
Show Gist options
  • Save tylerjohnst/aa338d96437a0d509273e7ba4415977b to your computer and use it in GitHub Desktop.
Save tylerjohnst/aa338d96437a0d509273e7ba4415977b to your computer and use it in GitHub Desktop.
class Command
def initialize(command, target, script, uses_bash)
@command, @target, @script, @uses_bash = command, target, script, uses_bash
end
def result
command == :exec ? exec_command : run_command
end
def exec_command
"docker exec -it `docker-compose ps -q #{target}` #{script}"
end
def run_command
"docker run -it #{volumes} #{links} #{environment} #{image} #{script}"
end
private
attr_reader :target, :uses_bash, :command
def script
uses_bash ? "bash -l -c \"#{script_with_working_dir.gsub('"', '\"')}\"" : @script
end
def script_with_working_dir
working_dir ? "cd #{working_dir} && #{@script}" : @script
end
def image
service["image"]
end
def working_dir
service["working_dir"]
end
def volumes
service['volumes'].map do |volume|
"-v " + volume \
.gsub('./', Dir.pwd + "/") \
.gsub(named_volumes_regexp, 'fulcrumdocker_\1')
end.join(' ')
end
def links
service['depends_on'].map { |l| "--link #{l}" }.join(' ')
end
def environment
service['environment'].map { |key, value| "-e #{key}='#{value}'" }.join(' ')
end
def named_volumes_regexp
/(#{docker_compose_config['volumes'].keys.join('|')})/
end
def service
docker_compose_config['services'][target.to_s]
end
def docker_compose_config
@docker_compose_config ||= YAML.load(File.read 'docker-compose.yml')
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment