Sha256: 8f3d8fccbc9a3ffd435d98d6cd6c7c16ec18ef0fa2e14b5b6e9fc39ef8ff1d4c

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

class Kubes::Compiler::Strategy
  class Dispatcher < Base
    def dispatch
      result = render(@path) # main
      results = [result].flatten # ensure array
      data = results.map! do |main|
        hash = pre_layer.deeper_merge!(main) # need the ! or deep_merge returns original hash
        hash.deeper_merge!(post_layer)
      end
      Result.new(@save_file, data)
    end

    # Render via to Erb or one of the DSL syntax classes or Core/Blocks class
    def render(path)
      if path.include?('.rb')
        klass = dsl_class(path) # IE: Kubes::Compiler::Dsl::Syntax::Deployment or Kubes::Compiler::Dsl::Core::Blocks
        klass.new(@options.merge(path: path, data: @data)).run
      else
        Erb.new(@options.merge(data: @data)).render_result(path)
      end
    end

    # Must be defined here in case coming from Kubes::Compiler::Strategy::Erb#render
    def dsl_class(path)
      if block_form?(path)
        Kubes::Compiler::Dsl::Core::Blocks
      else
        syntax_class
      end
    end

    def syntax_class
      klass_name = normalize_kind(@save_file) # IE: @save_file: web/service.yaml
      "Kubes::Compiler::Dsl::Syntax::#{klass_name}".constantize
    rescue NameError
      logger.debug "Using default resource for: #{klass_name}"
      Kubes::Compiler::Dsl::Syntax::Resource # default
    end

    def block_form?(path)
      type = extract_type(path)
      type.pluralize == type
    end

    def pre_layer
      merge_layers(pre_layers)
    end

    def post_layer
      merge_layers(post_layers)
    end

    def merge_layers(layers)
      layers.inject({}) do |hash, layer|
        render(layer)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kubes-0.7.0 lib/kubes/compiler/strategy/dispatcher.rb