class Metaparticle::Package

Public Class Methods

containerize(config, &block) click to toggle source
# File lib/metaparticle/package.rb, line 9
def self.containerize(config, &block)
  new(config, &block)
end
new(config, &block) click to toggle source
# File lib/metaparticle/package.rb, line 13
def initialize(config, &block)
  @config = OpenStruct.new(config)
  @app = block
  run!
end

Private Instance Methods

builder() click to toggle source
# File lib/metaparticle/package.rb, line 43
def builder
  klass = @config.builder || 'docker'
  @builder ||= classify("#{klass}_builder").new(@config)
end
classify(name) click to toggle source
# File lib/metaparticle/package.rb, line 53
def classify(name)
  Object.const_get("Metaparticle::"+name.split('_').collect!{ |w| w.capitalize }.join)
end
docker() click to toggle source
# File lib/metaparticle/package.rb, line 39
def docker
  @docker ||= Docker.new
end
run!() click to toggle source
# File lib/metaparticle/package.rb, line 57
def run!
  if docker.in_docker_container?
    @app.call
  end
  @config.image = "#{@config.repository}/#{@config.name}"
  write_dockerfile
  builder.build
  builder.push
  runner.run
  return true
end
runner() click to toggle source
# File lib/metaparticle/package.rb, line 48
def runner
  klass = @config.runner || 'docker'
  @runner ||= classify("#{klass}_runner").new(@config)
end
write_dockerfile() click to toggle source
# File lib/metaparticle/package.rb, line 20
    def write_dockerfile
      dockerfile = <<-DOCKERFILE
FROM ruby:2.4-alpine

RUN mkdir -p /#{@config.name}
WORKDIR /#{@config.name}

COPY Gemfile /#{@config.name}/
COPY Gemfile.lock /#{@config.name}/
RUN bundle install

COPY . /#{@config.name}/
CMD ruby app.rb
      DOCKERFILE
      File.open("Dockerfile", "w") do |f|
        f.write(dockerfile)
      end
    end