Class: Bankai::Docker::Package

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/bankai/docker/package.rb

Overview

The package manager

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePackage

Returns a new instance of Package.



38
39
40
41
42
43
44
45
46
# File 'lib/bankai/docker/package.rb', line 38

def initialize
  # TODO: Support more package manager
  @command = 'apk add --no-cache %<packages>s'
  @mutex = Mutex.new
  @stages = {}
  @autos = {}

  @current_stage = :main
end

Instance Attribute Details

#commandObject (readonly)

Returns the value of attribute command.



36
37
38
# File 'lib/bankai/docker/package.rb', line 36

def command
  @command
end

#stagesObject (readonly)

Returns the value of attribute stages.



36
37
38
# File 'lib/bankai/docker/package.rb', line 36

def stages
  @stages
end

Class Method Details

.any?(name) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/bankai/docker/package.rb', line 22

def any?(name)
  !instance.stages[name.to_sym].nil?
end

.command_for(name) ⇒ Object



26
27
28
29
30
31
# File 'lib/bankai/docker/package.rb', line 26

def command_for(name)
  format(
    instance.command,
    packages: (instance.stages[name.to_sym] || []).uniq.join(' ')
  )
end

.detectObject



18
19
20
# File 'lib/bankai/docker/package.rb', line 18

def detect
  instance.detect
end

.register(name, stage, &block) ⇒ Object



14
15
16
# File 'lib/bankai/docker/package.rb', line 14

def register(name, stage, &block)
  instance.register(name, stage, &block)
end

.use(name, &block) ⇒ Object



10
11
12
# File 'lib/bankai/docker/package.rb', line 10

def use(name, &block)
  instance.switch(name, &block)
end

Instance Method Details

#add_dependency(*packages, runtime: true) ⇒ Object



48
49
50
51
# File 'lib/bankai/docker/package.rb', line 48

def add_dependency(*packages, runtime: true)
  current_stage.concat(packages)
  stage(:main).concat(packages) if runtime
end

#add_runtime_dependency(*packages) ⇒ Object



53
54
55
# File 'lib/bankai/docker/package.rb', line 53

def add_runtime_dependency(*packages)
  stage(:main).concat(packages)
end

#current_stageObject



66
67
68
# File 'lib/bankai/docker/package.rb', line 66

def current_stage
  stage(@current_stage)
end

#detectObject



74
75
76
77
78
# File 'lib/bankai/docker/package.rb', line 74

def detect
  @autos.each do |_, (stage, fn)|
    switch(stage, &fn)
  end
end

#register(name, stage, &block) ⇒ Object



70
71
72
# File 'lib/bankai/docker/package.rb', line 70

def register(name, stage, &block)
  @autos[name.to_sym] = [stage.to_sym, block]
end

#stage(name) ⇒ Object



80
81
82
83
84
# File 'lib/bankai/docker/package.rb', line 80

def stage(name)
  name = name.to_sym
  @stages[name] ||= []
  @stages[name]
end

#switch(stage_name, &_block) ⇒ Object



57
58
59
60
61
62
63
64
# File 'lib/bankai/docker/package.rb', line 57

def switch(stage_name, &_block)
  prev = @current_stage
  @mutex.synchronize do
    @current_stage = stage_name.to_s
    yield self
    @current_stage = prev
  end
end