Class: Kuby::Docker::Spec
- Inherits:
-
Object
- Object
- Kuby::Docker::Spec
- Extended by:
- T::Sig
- Defined in:
- lib/kuby/docker/spec.rb
Instance Attribute Summary collapse
-
#environment ⇒ Object
readonly
Returns the value of attribute environment.
Instance Method Summary collapse
- #assets_phase ⇒ Object
- #base_image(image_url) ⇒ Object
- #bundler_phase ⇒ Object
- #bundler_version(version) ⇒ Object
- #cli ⇒ Object
- #copy_phase ⇒ Object
- #credentials(&block) ⇒ Object
- #delete(name) ⇒ Object
- #distro(distro_name) ⇒ Object
- #distro_spec ⇒ Object
- #exists?(name) ⇒ Boolean
- #files(path) ⇒ Object
- #gemfile(path) ⇒ Object
- #image_url(url) ⇒ Object
-
#initialize(environment) ⇒ Spec
constructor
A new instance of Spec.
- #insert(name, layer = nil, options = {}, &block) ⇒ Object
- #metadata ⇒ Object
- #package(package_name, version = nil) ⇒ Object
- #package_phase ⇒ Object
- #port(port) ⇒ Object
- #previous_tag(current_tag) ⇒ Object
- #rails_env(env) ⇒ Object
- #remote_client ⇒ Object
- #setup_phase ⇒ Object
- #tag ⇒ Object
- #tags ⇒ Object
- #to_dockerfile ⇒ Object
- #use(name, layer = nil, &block) ⇒ Object
- #webserver_phase ⇒ Object
- #working_dir(dir) ⇒ Object
- #yarn_phase ⇒ Object
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
#environment ⇒ Object (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_phase ⇒ Object
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_phase ⇒ Object
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 |
#cli ⇒ Object
207 208 209 |
# File 'lib/kuby/docker/spec.rb', line 207 def cli @cli ||= Docker::CLI.new end |
#copy_phase ⇒ Object
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_spec ⇒ Object
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
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, = {}, &block) layer_stack.insert(name, layer, , &block) end |
#metadata ⇒ Object
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_phase ⇒ Object
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 = .(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_client ⇒ Object
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_phase ⇒ Object
143 144 145 |
# File 'lib/kuby/docker/spec.rb', line 143 def setup_phase @setup_phase ||= SetupPhase.new(environment) end |
#tag ⇒ Object
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 . end unless t raise MissingTagError, 'could not find latest timestamped tag' end t.to_s end |
#tags ⇒ Object
229 230 231 |
# File 'lib/kuby/docker/spec.rb', line 229 def @tags ||= Tags.new(cli, remote_client, ) end |
#to_dockerfile ⇒ Object
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_phase ⇒ Object
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 |