Class: Kuby::Docker::Spec

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/kuby/docker/spec.rb

Constant Summary collapse

DEFAULT_DISTRO =
:debian

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment) ⇒ Spec

Returns a new instance of Spec.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/kuby/docker/spec.rb', line 17

def initialize(environment)
  @environment = environment

  @credentials = T.let(@credentials, T.nilable(Credentials))
  @setup_phase = T.let(@setup_phase, T.nilable(SetupPhase))
  @package_phase = T.let(@package_phase, T.nilable(PackagePhase))
  @bundler_phase = T.let(@bundler_phase, T.nilable(BundlerPhase))
  @yarn_phase = T.let(@yarn_phase, T.nilable(YarnPhase))
  @copy_phase = T.let(@copy_phase, T.nilable(CopyPhase))
  @assets_phase = T.let(@assets_phase, T.nilable(AssetsPhase))
  @webserver_phase = T.let(@webserver_phase, T.nilable(WebserverPhase))

  @distro_name = T.let(@distro_name, T.nilable(Symbol))
  @distro_spec = T.let(@distro_spec, T.nilable(Distro))
  @layer_stack = T.let(@layer_stack, T.nilable(Kuby::Docker::LayerStack))

  @image_url_str = T.let(@image_url_str, T.nilable(String))
  @image = T.let(@image, T.nilable(Docker::AppImage))
end

Instance Attribute Details

#environmentObject (readonly)

Returns the value of attribute environment.



11
12
13
# File 'lib/kuby/docker/spec.rb', line 11

def environment
  @environment
end

#image_url_strObject (readonly)

Returns the value of attribute image_url_str.



14
15
16
# File 'lib/kuby/docker/spec.rb', line 14

def image_url_str
  @image_url_str
end

Instance Method Details

#assets_phaseObject



182
183
184
# File 'lib/kuby/docker/spec.rb', line 182

def assets_phase
  @assets_phase ||= AssetsPhase.new(environment)
end

#base_image(image_url) ⇒ Object



43
44
45
# File 'lib/kuby/docker/spec.rb', line 43

def base_image(image_url)
  setup_phase.base_image = image_url
end

#bundler_phaseObject



167
168
169
# File 'lib/kuby/docker/spec.rb', line 167

def bundler_phase
  @bundler_phase ||= BundlerPhase.new(environment)
end

#bundler_version(version) ⇒ Object



58
59
60
# File 'lib/kuby/docker/spec.rb', line 58

def bundler_version(version)
  bundler_phase.version = version
end

#copy_phaseObject



177
178
179
# File 'lib/kuby/docker/spec.rb', line 177

def copy_phase
  @copy_phase ||= CopyPhase.new(environment)
end

#credentials(&block) ⇒ Object



137
138
139
140
141
# File 'lib/kuby/docker/spec.rb', line 137

def credentials(&block)
  @credentials ||= Credentials.new
  @credentials.instance_eval(&block) if block
  @credentials
end

#delete(name) ⇒ Object



125
126
127
# File 'lib/kuby/docker/spec.rb', line 125

def delete(name)
  layer_stack.delete(name)
end

#distro(distro_name) ⇒ Object



79
80
81
82
# File 'lib/kuby/docker/spec.rb', line 79

def distro(distro_name)
  @distro_name = distro_name
  @distro_spec = nil
end

#distro_nameObject



38
39
40
# File 'lib/kuby/docker/spec.rb', line 38

def distro_name
  @distro_name || DEFAULT_DISTRO
end

#distro_specObject



192
193
194
195
196
197
198
# File 'lib/kuby/docker/spec.rb', line 192

def distro_spec
  @distro_spec ||= if distro_klass = Kuby.distros[distro_name]
    distro_klass.new(self)
  else
    raise MissingDistroError, "distro '#{distro_name}' hasn't been registered"
  end
end

#exists?(name) ⇒ Boolean

Returns:

  • (Boolean)


130
131
132
# File 'lib/kuby/docker/spec.rb', line 130

def exists?(name)
  layer_stack.includes?(name)
end

#files(path) ⇒ Object



85
86
87
# File 'lib/kuby/docker/spec.rb', line 85

def files(path)
  copy_phase << path
end

#gemfile(path) ⇒ Object



63
64
65
# File 'lib/kuby/docker/spec.rb', line 63

def gemfile(path)
  bundler_phase.gemfile = path
end

#imageObject



144
145
146
147
148
149
150
151
152
153
154
# File 'lib/kuby/docker/spec.rb', line 144

def image
  @image ||= begin
    dockerfile = Dockerfile.new.tap do |df|
      layer_stack.each { |layer| layer.apply_to(df) }
    end

    Docker::AppImage.new(
      dockerfile, T.must(image_url_str), credentials
    )
  end
end

#image_url(url) ⇒ Object



95
96
97
# File 'lib/kuby/docker/spec.rb', line 95

def image_url(url)
  @image_url_str = url
end

#insert(name, layer = nil, options = {}, &block) ⇒ Object



120
121
122
# File 'lib/kuby/docker/spec.rb', line 120

def insert(name, layer = nil, options = {}, &block)
  layer_stack.insert(name, layer, options, &block)
end

#package(package_name, version = nil) ⇒ Object



74
75
76
# File 'lib/kuby/docker/spec.rb', line 74

def package(package_name, version = nil)
  package_phase.add(package_name, version)
end

#package_phaseObject



162
163
164
# File 'lib/kuby/docker/spec.rb', line 162

def package_phase
  @package_phase ||= PackagePhase.new(environment)
end

#port(port) ⇒ Object



90
91
92
# File 'lib/kuby/docker/spec.rb', line 90

def port(port)
  webserver_phase.port = port
end

#rails_env(env) ⇒ Object



53
54
55
# File 'lib/kuby/docker/spec.rb', line 53

def rails_env(env)
  setup_phase.rails_env = env
end

#setup_phaseObject



157
158
159
# File 'lib/kuby/docker/spec.rb', line 157

def setup_phase
  @setup_phase ||= SetupPhase.new(environment, self)
end

#use(name, layer = nil, &block) ⇒ Object



107
108
109
# File 'lib/kuby/docker/spec.rb', line 107

def use(name, layer = nil, &block)
  layer_stack.use(name, layer, &block)
end

#webserver_phaseObject



187
188
189
# File 'lib/kuby/docker/spec.rb', line 187

def webserver_phase
  @webserver_phase ||= WebserverPhase.new(environment)
end

#working_dir(dir) ⇒ Object



48
49
50
# File 'lib/kuby/docker/spec.rb', line 48

def working_dir(dir)
  setup_phase.working_dir = dir
end

#yarn_phaseObject



172
173
174
# File 'lib/kuby/docker/spec.rb', line 172

def yarn_phase
  @yarn_phase ||= YarnPhase.new(environment)
end