class Devup::Compose

Attributes

logger[R]
path[R]
project[R]
shell[R]

Public Class Methods

new(path, project: "devup", logger:, shell:) click to toggle source
# File lib/devup/compose.rb, line 11
def initialize(path, project: "devup", logger:, shell:)
  @path = path
  @project = project
  @logger = logger
  @shell = shell
end

Public Instance Methods

check() click to toggle source
# File lib/devup/compose.rb, line 18
def check
  true
end
port_mapping(port) click to toggle source
# File lib/devup/compose.rb, line 32
def port_mapping(port)
  ComposeHelpers::Ps.new(exec_ps_cached).port_mapping(port)
end
rm() click to toggle source
# File lib/devup/compose.rb, line 46
def rm
  exec "rm -f"
end
service_ports(name) click to toggle source
# File lib/devup/compose.rb, line 26
def service_ports(name)
  return [] if config["services"][name]["ports"].nil?

  config["services"][name]["ports"].map { |el| el.to_s.split(":")[-1].to_i }
end
services() click to toggle source
# File lib/devup/compose.rb, line 22
def services
  config["services"].keys
end
stop() click to toggle source
# File lib/devup/compose.rb, line 42
def stop
  exec "stop"
end
up() click to toggle source
# File lib/devup/compose.rb, line 36
def up
  exec "up -d --remove-orphans"

  wait_alive 3
end

Private Instance Methods

alive?() click to toggle source
# File lib/devup/compose.rb, line 66
def alive?
  ComposeHelpers::Ps.new(exec_ps).up?
end
config() click to toggle source
# File lib/devup/compose.rb, line 86
def config
  YAML.safe_load(config_content)
end
config_content() click to toggle source
# File lib/devup/compose.rb, line 90
def config_content
  File.read(path)
end
exec(cmd) click to toggle source
# File lib/devup/compose.rb, line 78
def exec(cmd)
  resp = shell.exec "docker-compose -p #{project} -f #{path} #{cmd}"

  raise(Error) unless resp.success?

  resp.data
end
exec_ps() click to toggle source
# File lib/devup/compose.rb, line 70
def exec_ps
  @exec_ps_output = exec("ps")
end
exec_ps_cached() click to toggle source
# File lib/devup/compose.rb, line 74
def exec_ps_cached
  @exec_ps_output ||= exec("ps")
end
wait_alive(timeout, retry_sleep: 0.3) click to toggle source
# File lib/devup/compose.rb, line 52
def wait_alive(timeout, retry_sleep: 0.3)
  start = Time.now

  loop {
    break if alive?

    if Time.now - start > timeout
      logger.error "can't run services"
      break
    end
    sleep retry_sleep
  }
end