Sha256: e0fd5ff7bfc56eea1bcb30fb13f11456994c7ce7298fdc91e3bd644cfb0fda22

Contents?: true

Size: 1.39 KB

Versions: 4

Compression:

Stored size: 1.39 KB

Contents

class Woodhouse::LayoutBuilder

  attr_reader :layout

  class NodeBuilder
    
    def initialize(config, node)
      @config = config
      @node = node
    end

    def all_workers(options = {})
      @node.default_configuration! @config, options
    end

    def add(class_name, job_method, opts = {})
      if job_method.kind_of?(Hash)
        # Two-argument invocation
        opts = job_method
        job_method = nil
        methods = @config.registry[class_name].public_instance_methods(false)
      else
        methods = [job_method]
      end
      remove(class_name, job_method, opts.empty? ? nil : opts)
      methods.each do |method|
        @node.add_worker Woodhouse::Layout::Worker.new(class_name, method, opts)
      end
    end

    def remove(class_name, job_method = nil, opts = nil)
      @node.workers.select{|worker|
        worker.worker_class_name == class_name &&
          (job_method.nil? || worker.job_method == job_method) &&
          (opts.nil? || worker.criteria.criteria == opts[:only])
      }.each do |worker|
        @node.remove_worker(worker)
      end
    end

  end

  def initialize(config, layout = nil)
    @config = config
    @layout = layout || Woodhouse::Layout.new
    @nodes ||= {}
    yield self if block_given?
  end

  def node(name)
    @layout.node(name) || @layout.add_node(name)
    yield(@nodes[name] ||= NodeBuilder.new(@config, @layout.node(name)))
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
woodhouse-1.0.0 lib/woodhouse/layout_builder.rb
woodhouse-0.1.5 lib/woodhouse/layout_builder.rb
woodhouse-0.1.2 lib/woodhouse/layout_builder.rb
woodhouse-0.1.1 lib/woodhouse/layout_builder.rb