class ResqueJobsTree::Definitions::Node

Attributes

name[RW]
node_childs[RW]
options[RW]
parent[RW]
tree[RW]

Public Class Methods

new(name, tree, parent=nil) click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 5
def initialize name, tree, parent=nil
  @tree        = tree
  @name        = name.to_s
  @parent      = parent
  @node_childs = []
  @options     = {}
end

Public Instance Methods

childs(&block) click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 29
def childs &block
  @childs ||= block
end
find(_name, first=true) click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 49
def find _name, first=true
  return self if name == _name.to_s
  node_childs.inject(nil){|result,node| result ||= node.find(_name, false) } ||
    (first && raise(ResqueJobsTree::TreeDefinitionInvalid, "Cannot find node #{_name} in #{tree.name}"))
end
inspect() click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 89
def inspect
  "<ResqueJobsTree::Node @name=#{name}>"
end
leaf?() click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 37
def leaf?
              @node_childs.empty?
end
node(name, options={}) click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 13
def node name, options={}, &block
  ResqueJobsTree::Definitions::Node.new(name, tree, self).tap do |node|
    node.options = options
    @node_childs << node
    if block_given?
      node.instance_eval &block
    elsif options.has_key? :triggerable
      node.perform {}
    end
  end
end
nodes() click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 85
def nodes
  node_childs+node_childs.map(&:nodes)
end
perform(&block) click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 33
    def perform &block
@perform ||= block
    end
root?() click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 41
def root?
  parent.nil?
end
siblings() click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 45
def siblings
  root? ? [] : (parent.node_childs - [self])
end
spawn(resources, parent=nil) click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 25
def spawn resources, parent=nil
        ResqueJobsTree::Node.new self, resources, parent
end
validate!() click to toggle source
# File lib/resque_jobs_tree/definitions/node.rb, line 55
def validate!
  # Should have a child's naming [:job1, ...] and node childs Proc implementation associated
  # node :job1 do
  #  perform {}
  # end
  # ...
  if (childs.kind_of?(Proc) && node_childs.empty?) || (childs.nil? && !node_childs.empty?)
    raise ResqueJobsTree::NodeDefinitionInvalid,
      "node `#{name}` from tree `#{tree.name}` should defines childs and child nodes"
  end

  # Should have an implementation
  # node :job1 do
  #  perform {}
  # end
  if !perform.kind_of? Proc and !options.has_key? :triggerable
    raise ResqueJobsTree::NodeDefinitionInvalid,
      "node `#{name}` from tree `#{tree.name}` has no perform block"
  end

  # Naming Should be uniq
  if (tree.nodes - [self]).map(&:name).include? name
    raise ResqueJobsTree::NodeDefinitionInvalid,
      "node name `#{name}` is already taken in tree `#{tree.name}`"
  end

  # Recursive call for validate all of tree
  node_childs.each &:validate!
end