Class: Kuby::Docker::Spec

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment) ⇒ Spec

Returns a new instance of Spec.



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

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))
  @metadata = T.let(@metadata, T.nilable(Metadata))

  @distro_spec = T.let(@distro_spec, T.nilable(Distro))
  @cli = T.let(@cli, T.nilable(CLI))
  @remote_client = T.let(@remote_client, T.nilable(::Docker::Remote::Client))
  @tags = T.let(@tags, T.nilable(Tags))
  @layer_stack = T.let(@layer_stack, T.nilable(Kuby::Docker::LayerStack))
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

Instance Method Details

#assets_phaseObject



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

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

#base_image(image_url) ⇒ Object



35
36
37
# File 'lib/kuby/docker/spec.rb', line 35

def base_image(image_url)
  setup_phase.base_image = image_url
end

#bundler_phaseObject



153
154
155
# File 'lib/kuby/docker/spec.rb', line 153

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

#bundler_version(version) ⇒ Object



50
51
52
# File 'lib/kuby/docker/spec.rb', line 50

def bundler_version(version)
  bundler_phase.version = version
end

#cliObject



207
208
209
# File 'lib/kuby/docker/spec.rb', line 207

def cli
  @cli ||= Docker::CLI.new
end

#copy_phaseObject



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

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

#credentials(&block) ⇒ Object



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

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

#delete(name) ⇒ Object



117
118
119
# File 'lib/kuby/docker/spec.rb', line 117

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

#distro(distro_name) ⇒ Object



71
72
73
74
# File 'lib/kuby/docker/spec.rb', line 71

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

#distro_specObject



220
221
222
223
224
225
226
# File 'lib/kuby/docker/spec.rb', line 220

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

#exists?(name) ⇒ Boolean

Returns:

  • (Boolean)


122
123
124
# File 'lib/kuby/docker/spec.rb', line 122

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

#files(path) ⇒ Object



77
78
79
# File 'lib/kuby/docker/spec.rb', line 77

def files(path)
  copy_phase << path
end

#gemfile(path) ⇒ Object



55
56
57
# File 'lib/kuby/docker/spec.rb', line 55

def gemfile(path)
  bundler_phase.gemfile = path
end

#image_url(url) ⇒ Object



87
88
89
# File 'lib/kuby/docker/spec.rb', line 87

def image_url(url)
  .image_url = url
end

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



112
113
114
# File 'lib/kuby/docker/spec.rb', line 112

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

#metadataObject



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

def 
  @metadata ||= Metadata.new(environment)
end

#package(package_name, version = nil) ⇒ Object



66
67
68
# File 'lib/kuby/docker/spec.rb', line 66

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

#package_phaseObject



148
149
150
# File 'lib/kuby/docker/spec.rb', line 148

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

#port(port) ⇒ Object



82
83
84
# File 'lib/kuby/docker/spec.rb', line 82

def port(port)
  webserver_phase.port = port
end

#previous_tag(current_tag) ⇒ Object



196
197
198
199
200
201
202
203
204
# File 'lib/kuby/docker/spec.rb', line 196

def previous_tag(current_tag)
  t = tags.previous_timestamp_tag(current_tag)

  unless t
    raise MissingTagError, 'could not find previous timestamped tag'
  end

  t.to_s
end

#rails_env(env) ⇒ Object



45
46
47
# File 'lib/kuby/docker/spec.rb', line 45

def rails_env(env)
  setup_phase.rails_env = env
end

#remote_clientObject



212
213
214
215
216
217
# File 'lib/kuby/docker/spec.rb', line 212

def remote_client
  @remote_client ||= ::Docker::Remote::Client.new(
    .image_host, .image_repo,
    credentials.username, credentials.password,
  )
end

#setup_phaseObject



143
144
145
# File 'lib/kuby/docker/spec.rb', line 143

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

#tagObject



183
184
185
186
187
188
189
190
191
192
193
# File 'lib/kuby/docker/spec.rb', line 183

def tag
  t = ENV.fetch('KUBY_DOCKER_TAG') do
    tags.latest_timestamp_tag
  end

  unless t
    raise MissingTagError, 'could not find latest timestamped tag'
  end

  t.to_s
end

#tagsObject



229
230
231
# File 'lib/kuby/docker/spec.rb', line 229

def tags
  @tags ||= Tags.new(cli, remote_client, )
end

#to_dockerfileObject



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

def to_dockerfile
  Dockerfile.new.tap do |df|
    layer_stack.each { |layer| layer.apply_to(df) }
  end
end

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



99
100
101
# File 'lib/kuby/docker/spec.rb', line 99

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

#webserver_phaseObject



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

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

#working_dir(dir) ⇒ Object



40
41
42
# File 'lib/kuby/docker/spec.rb', line 40

def working_dir(dir)
  setup_phase.working_dir = dir
end

#yarn_phaseObject



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

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