class Ruboty::Docker::Actions::Run

Public Instance Methods

call() click to toggle source
# File lib/ruboty/docker/actions/run.rb, line 5
def call
    image_name = message[:image_name]

    args = message[:args].gsub(/\"/) { $1 }.split('-')
    args.each do |a|
        if /^v/ === a
            set_volumes(a)
        elsif /^e/ === a
            set_env(a)
        elsif /^link/ === a
            set_link(a)
        elsif /^net/ === a
            set_net(a)
        else
            set_command(a)
        end
    end
    image = ::Docker::Container.create('Image' => image_name, 'Binds' => @volume, 'Env' => @env, 'Cmd' => @command)
    message.reply("Start running the #{image_name}...")
    ::Thread.new { image.tap(&:start).attach do |stream, chunk|
        message.reply stream
        message.reply chunk
    end }
rescue => e
    value = [e.class.name, e.message, e.backtrace].join("\n")
    message.reply value
ensure
end

Private Instance Methods

set_command(a) click to toggle source
# File lib/ruboty/docker/actions/run.rb, line 52
def set_command(a)
    @command = a.split('/\s/')
end
set_env(a) click to toggle source
# File lib/ruboty/docker/actions/run.rb, line 40
def set_env(a)
    @env = a.chop.sub(/e /) { $1 }.split(', ')
end
set_net(a) click to toggle source
# File lib/ruboty/docker/actions/run.rb, line 48
def set_net(a)
    @net = [] << a.sub(/net /) { $1 }
end
set_volumes(a) click to toggle source
# File lib/ruboty/docker/actions/run.rb, line 36
def set_volumes(a)
    @volume = [] << a.sub('v') { $1 }.gsub(' ') { $1 }
end