class Dockerkit::Base

Public Instance Methods

alias(name = nil, *cmds) click to toggle source
# File lib/dockerkit.rb, line 45
def alias(name = nil, *cmds)
  return say((Alias.all[name] || "No such Alias:#{name}").red) if options['help']
  return Alias.list_alias unless name
  return Alias.delete_alias(name) if name && options['delete']
  return Alias.create_alias(name, cmds) if cmds
end
init() click to toggle source
# File lib/dockerkit.rb, line 61
def init
  dir = options['dir']
  load_config(dir) do |config|
    config[:image_name] = ask_with_default('Image name?', "#{File.basename(Dir.getwd)}:latest")
    config[:repository_urls] = multi_ask('Add new repository_url?')
  end
  inside(dir) do
    init_dockerfile if file_not_exist?(DOCKER_FILE.to_s) && ask('Need Create Dockerfile?'.red, limited_to: %w[y n]) == 'y'
    init_docker_compose_file if file_not_exist?(DOCKER_COMPOSE_FILE.to_s) && ask('Need Create docker-compose file?'.red, limited_to: %w[y n]) == 'y'
  end
end
method_missing(method, *args) click to toggle source
# File lib/dockerkit.rb, line 76
def method_missing(method, *args)
  return Alias.run(method.to_s, args) if Alias.all.key?(method.to_s)
  return send(:docker, *args.unshift(method.to_s.gsub(/^_/, ''))) if method.to_s.start_with?('_')
end

Private Instance Methods

ask_with_default(question, default) click to toggle source
# File lib/dockerkit.rb, line 115
def ask_with_default(question, default)
  answer = ask("#{question.red} [default:#{default.blue}]:").chomp
  answer.empty? ? default : answer
end
docker(*args) click to toggle source
# File lib/dockerkit.rb, line 145
def docker(*args)
  hammer.run("docker #{args.join(' ')}")
end
file_not_exist?(file) click to toggle source
# File lib/dockerkit.rb, line 131
def file_not_exist?(file)
  !File.exist?(file)
end
init_docker_compose_file(dir = '.') click to toggle source
# File lib/dockerkit.rb, line 93
def init_docker_compose_file(dir = '.')
  load_config(dir) do |config|
    config[:service_name] = ask_with_default('Service Name is ?', 'app')
    @config = config
    template("#{self.class.source_root}/templates/docker-compose.yml", DOCKER_COMPOSE_FILE)
  end
end
init_dockerfile(dir = '.') click to toggle source
# File lib/dockerkit.rb, line 83
def init_dockerfile(dir = '.')
  load_config(dir) do |config|
    config[:author] = ask_with_default('Author is ?', ENV['USER'].camelize)
    config[:base_image] = ask_with_default('Base Image?', 'alpine')
    config[:deamon_cmd] = ask_with_default('Deamon CMD?', 'tail -f /dev/null')
    @config = config
    template("#{self.class.source_root}/templates/Dockerfile", DOCKER_FILE)
  end
end
load_config(dir) { |config| ... } click to toggle source
# File lib/dockerkit.rb, line 120
def load_config(dir)
  inside dir do
    create_file(DOCKER_CONFIG_FILE) unless File.exist?(DOCKER_CONFIG_FILE)
    config = YAML.load_file(DOCKER_CONFIG_FILE) || {}
    if block_given?
      yield config
      create_file(DOCKER_CONFIG_FILE, config.to_yaml)
    end
  end
end
multi_ask(question, **opt) click to toggle source
# File lib/dockerkit.rb, line 135
def multi_ask(question, **opt)
  ret = []
  answer = 'start'
  until answer.empty?
    answer = ask("#{question.red},(null input to end the question)", opt).chomp
    ret.push answer unless answer.empty?
  end
  ret
end
precheck() click to toggle source
# File lib/dockerkit.rb, line 149
def precheck
  true
end
search_with_ask(name, klass, question) click to toggle source
# File lib/dockerkit.rb, line 101
def search_with_ask(name, klass, question)
  ret = klass.search(name)
  return ret.first if ret.size == 1
  unless ret.empty?
    q = ret.each_with_index.map { |image, i| "[#{i + 1}] #{image}" }
    q.unshift(klass.headers)
    # print_table(q)
    say(q.join(''))
    answer = ask(question, limited_to: ('1'..ret.size.to_s).to_a.unshift('q'))
    return if answer == 'q'
    ret[answer.to_i - 1]
  end
end