Class: Kuby::Docker::DevSpec

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment) ⇒ DevSpec

Returns a new instance of DevSpec.



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/kuby/docker/dev_spec.rb', line 38

def initialize(environment)
  @environment = environment

  @setup_phase = T.let(@setup_phase, T.nilable(SetupPhase))
  @package_phase = T.let(@package_phase, T.nilable(PackagePhase))
  @webserver_phase = T.let(@webserver_phase, T.nilable(WebserverDevPhase))
  @metadata = T.let(@metadata, T.nilable(Metadata))
  @distro_spec = T.let(@distro_spec, T.nilable(Distro))
  @cli = T.let(@cli, T.nilable(CLI))
  @tags = T.let(@tags, T.nilable(LocalTags))
  @layer_stack = T.let(@layer_stack, T.nilable(Docker::LayerStack))
end

Instance Attribute Details

#environmentObject (readonly)

Returns the value of attribute environment.



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

def environment
  @environment
end

Instance Method Details

#cliObject



174
175
176
# File 'lib/kuby/docker/dev_spec.rb', line 174

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

#delete(name) ⇒ Object



109
110
111
# File 'lib/kuby/docker/dev_spec.rb', line 109

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

#distro(distro_name) ⇒ Object



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

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

#distro_specObject



147
148
149
150
151
152
153
# File 'lib/kuby/docker/dev_spec.rb', line 147

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)


114
115
116
# File 'lib/kuby/docker/dev_spec.rb', line 114

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

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



104
105
106
# File 'lib/kuby/docker/dev_spec.rb', line 104

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

#metadataObject



142
143
144
# File 'lib/kuby/docker/dev_spec.rb', line 142

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

#package(package_name, version = nil) ⇒ Object



68
69
70
# File 'lib/kuby/docker/dev_spec.rb', line 68

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

#package_phaseObject



132
133
134
# File 'lib/kuby/docker/dev_spec.rb', line 132

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

#port(port) ⇒ Object



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

def port(port)
  webserver_phase.port = port
end

#previous_tag(current_tag) ⇒ Object

Raises:



169
170
171
# File 'lib/kuby/docker/dev_spec.rb', line 169

def previous_tag(current_tag)
  raise MissingTagError, 'cannot roll back in the development environment'
end

#rails_env(env) ⇒ Object



57
58
59
# File 'lib/kuby/docker/dev_spec.rb', line 57

def rails_env(env)
  setup_phase.rails_env = env
end

#setup_phaseObject



127
128
129
# File 'lib/kuby/docker/dev_spec.rb', line 127

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

#tagObject



156
157
158
159
160
161
162
163
164
165
166
# File 'lib/kuby/docker/dev_spec.rb', line 156

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

#to_dockerfileObject



119
120
121
122
123
124
# File 'lib/kuby/docker/dev_spec.rb', line 119

def to_dockerfile
  Dockerfile.new.tap do |df|
    layer_stack.each { |layer| layer.apply_to(df) }
    df.cmd("#{distro_spec.shell_exe} -c 'while test 1; do sleep 5; done'")
  end
end

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



91
92
93
# File 'lib/kuby/docker/dev_spec.rb', line 91

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

#webserver_phaseObject



137
138
139
# File 'lib/kuby/docker/dev_spec.rb', line 137

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

#working_dir(dir) ⇒ Object



52
53
54
# File 'lib/kuby/docker/dev_spec.rb', line 52

def working_dir(dir)
  setup_phase.working_dir = dir
end