Sha256: 6b0a9bddf0f77150884bcd2ce3ddb5fd4b3b9376c9a8ed954000458c3a1962b0

Contents?: true

Size: 1012 Bytes

Versions: 1

Compression:

Stored size: 1012 Bytes

Contents

module Hako
  class Container
    DEFAULT_CONFIG = {
      'docker_labels' => {},
      'links' => [],
    }.freeze

    def initialize(app, definition)
      @app = app
      @definition = DEFAULT_CONFIG.merge(definition)
    end

    %w[
      image_tag
      docker_labels
      cpu
      memory
      links
    ].each do |name|
      define_method(name) do
        @definition[name]
      end

      define_method("#{name}=") do |val|
        @definition[name] = val
      end
    end

    def env
      @expanded_env ||= expand_env(@definition.fetch('env', {}))
    end

    private

    PROVIDERS_KEY = '$providers'.freeze

    def expand_env(env)
      env = env.dup
      providers = load_providers(env.delete(PROVIDERS_KEY) || [])
      EnvExpander.new(providers).expand(env)
    end

    def load_providers(provider_configs)
      provider_configs.map do |yaml|
        Loader.new(Hako::EnvProviders, 'hako/env_providers').load(yaml.fetch('type')).new(@app.root_path, yaml)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hako-0.6.0 lib/hako/container.rb