class Matrixeval::DockerCompose::File

Attributes

context[R]

Public Class Methods

create_all() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 6
def create_all
  FileUtils.mkdir_p folder

  Context.all.each do |context|
    new(context).create
  end
end
new(context) click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 23
def initialize(context)
  @context = context
end

Private Class Methods

folder() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 16
def folder
  Matrixeval.working_dir.join(".matrixeval/docker-compose")
end

Public Instance Methods

create() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 27
def create
  ::File.open(docker_compose_file_path, 'w+') do |file|
    file.puts build_content
  end
end

Private Instance Methods

build_content() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 39
def build_content
  {
    "version" => "3",
    "services" => services_json,
    "volumes" => volumes_json
  }.to_yaml.sub(/---\n/, "")
end
depends_on() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 74
def depends_on
  if docker_compose_extend.services.keys.empty?
    {}
  else
    { "depends_on" => docker_compose_extend.services.keys }
  end
end
docker_compose_extend() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 104
def docker_compose_extend
  @docker_compose_extend ||= context.docker_compose_extend
end
docker_compose_file_path() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 35
def docker_compose_file_path
  context.docker_compose_file_path
end
env() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 66
def env
  target.env(context).merge(
    Config.env,
    main_variant.container.env,
    context.env
  )
end
extra_mounts() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 90
def extra_mounts
  mounts = Config.mounts + context.variants.map(&:mounts).flatten
  mounts.map do |mount|
    local_path, in_docker_path = mount.split(':')
    next mount if Pathname.new(local_path).absolute?

    local_path = Matrixeval.working_dir.join(local_path)
    docker_compose_folder_path = Matrixeval.working_dir.join(".matrixeval/docker-compose")
    local_path = local_path.relative_path_from docker_compose_folder_path

    "#{local_path}:#{in_docker_path}"
  end
end
main_variant() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 82
def main_variant
  context.main_variant
end
mounts() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 86
def mounts
  ["../..:/app:cached"] + target.mounts(context) + extra_mounts
end
project_name() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 112
def project_name
  Config.project_name.gsub(/[^A-Za-z0-9-]/,'_').downcase
end
services_json() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 47
def services_json
  services = {}

  services[main_variant.docker_compose_service_name] = {
    "image" => main_variant.container.image,
    "volumes" => mounts,
    "environment" => env,
    "working_dir" => "/app"
  }.merge(depends_on)

  services.merge(docker_compose_extend.services)
end
target() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 116
def target
  Config.target
end
volumes_json() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 60
def volumes_json
  target.volumes(context).merge(
    docker_compose_extend.volumes
  )
end
working_dir_name() click to toggle source
# File lib/matrixeval/docker_compose/file.rb, line 108
def working_dir_name
  Matrixeval.working_dir.basename
end