lib/bluepill/dsl/process_proxy.rb
module Bluepill
class ProcessProxy
attr_reader :attributes, :watches, :name
def initialize(process_name, attributes, process_block)
@name = process_name
@attributes = attributes
@watches = {}
if process_block.arity.zero?
instance_eval(&process_block)
else
instance_exec(self, &process_block)
end
end
def method_missing(name, *args)
if args.size == 1 && name.to_s =~ /^(.*)=$/
@attributes[Regexp.last_match[1].to_sym] = args.first
elsif args.size == 1
@attributes[name.to_sym] = args.first
elsif args.empty? && name.to_s =~ /^(.*)!$/
@attributes[Regexp.last_match[1].to_sym] = true
elsif args.empty? && @attributes.key?(name.to_sym)
@attributes[name.to_sym]
else
super
end
end
def checks(name, options = {})
@watches[name] = options
end
def monitor_children(&child_process_block)
@attributes[:monitor_children] = true
@attributes[:child_process_block] = child_process_block
end
def to_process
Process.new(@name, @watches, @attributes)
end
end
end