Class: Kamaze::DockerImage::Loader::Helper

Inherits:
Object
  • Object
show all
Defined in:
lib/kamaze/docker_image/loader/helper.rb

Overview

Helper for tasks.

Sample of use:

helper = Kamaze::DockerImage::Loader::Helper.new(image)

desc 'Run a command in a new container'

task helper.appoint(:run), [:command] do |task, args|
  helper.call(task, args) { image.run(args[:command]) }
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(image) ⇒ Helper

Returns a new instance of Helper.

Parameters:



26
27
28
# File 'lib/kamaze/docker_image/loader/helper.rb', line 26

def initialize(image)
  @image = image
end

Instance Attribute Details

#imageKamaze::DockerImage (protected)

Returns:



64
65
66
# File 'lib/kamaze/docker_image/loader/helper.rb', line 64

def image
  @image
end

Instance Method Details

#appoint(name) ⇒ String

Make task name using namespace (from image)

Returns:

  • (String)


33
34
35
# File 'lib/kamaze/docker_image/loader/helper.rb', line 33

def appoint(name)
  namer.call(name)
end

#namerProc (protected)

Returns:

  • (Proc)


67
68
69
70
71
# File 'lib/kamaze/docker_image/loader/helper.rb', line 67

def namer
  lambda do |name|
    "#{image.tasks_ns}:#{name}".gsub(/^:/, '')
  end
end

#on_post(task, args) ⇒ Object (protected)

Parameters:

  • task (Rake::Task)


79
80
81
# File 'lib/kamaze/docker_image/loader/helper.rb', line 79

def on_post(task, args)
  task_call(on: :post, from: task, args: args)
end

#on_pre(task, args) ⇒ Object (protected)

Parameters:

  • task (Rake::Task)


74
75
76
# File 'lib/kamaze/docker_image/loader/helper.rb', line 74

def on_pre(task, args)
  task_call(on: :pre, from: task, args: args)
end

#task_call(on:, from:, args:) ⇒ Object (protected)

Call pre/post tasks.

on: pre/post from: task as Rake::Task args: Hash



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/kamaze/docker_image/loader/helper.rb', line 88

def task_call(on:, from:, args:)
  cname = from.name.gsub(/^#{image.tasks_ns}:/, '')
  # @formatter:off
  {
    pre: namer.call("pre_#{cname}"),
    post: namer.call("post_#{cname}"),
  }.fetch(on).tap do |name|
    Rake::Task[name].execute(**args.to_h) if Rake::Task.task_defined?(name)
  end
  # @formatter:on
end

#wrap(task, args = [], &block) ⇒ Object Also known as: call

Execute related pre_ and post_ tasks

Sample of use:

task 'docker:pre_start' do |task, args|
  pp(task, args)
end

task 'docker:post_start' do |task, args|
  pp(task, args)
end

Parameters:

  • task (Rake::Task)
  • args (Hash{Symbol => Object}) (defaults to: [])


53
54
55
56
57
# File 'lib/kamaze/docker_image/loader/helper.rb', line 53

def wrap(task, args = [], &block)
  on_pre(task, args)
  block.call
  on_post(task, args)
end