Class: Kuby::Docker::Spec
- Inherits:
-
Object
- Object
- Kuby::Docker::Spec
- Extended by:
- T::Sig
- Defined in:
- lib/kuby/docker/spec.rb
Constant Summary collapse
- DEFAULT_DISTRO =
:debian
Instance Attribute Summary collapse
-
#environment ⇒ Object
readonly
Returns the value of attribute environment.
-
#image_url_str ⇒ Object
readonly
Returns the value of attribute image_url_str.
Instance Method Summary collapse
- #assets_phase ⇒ Object
- #base_image(image_url) ⇒ Object
- #bundler_phase ⇒ Object
- #bundler_version(version) ⇒ Object
- #copy_phase ⇒ Object
- #credentials(&block) ⇒ Object
- #delete(name) ⇒ Object
- #distro(distro_name) ⇒ Object
- #distro_name ⇒ Object
- #distro_spec ⇒ Object
- #exists?(name) ⇒ Boolean
- #files(path) ⇒ Object
- #gemfile(path) ⇒ Object
- #image ⇒ Object
- #image_url(url) ⇒ Object
-
#initialize(environment) ⇒ Spec
constructor
A new instance of Spec.
- #insert(name, layer = nil, options = {}, &block) ⇒ Object
- #package(package_name, version = nil) ⇒ Object
- #package_phase ⇒ Object
- #port(port) ⇒ Object
- #rails_env(env) ⇒ Object
- #setup_phase ⇒ 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.
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
#environment ⇒ Object (readonly)
Returns the value of attribute environment.
11 12 13 |
# File 'lib/kuby/docker/spec.rb', line 11 def environment @environment end |
#image_url_str ⇒ Object (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_phase ⇒ Object
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_phase ⇒ Object
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_phase ⇒ Object
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_name ⇒ Object
38 39 40 |
# File 'lib/kuby/docker/spec.rb', line 38 def distro_name @distro_name || DEFAULT_DISTRO end |
#distro_spec ⇒ Object
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
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 |
#image ⇒ Object
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, = {}, &block) layer_stack.insert(name, layer, , &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_phase ⇒ Object
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_phase ⇒ Object
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_phase ⇒ Object
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 |