module Serf::Handler

Constants

Tasks
VERSION

Public Class Methods

event() click to toggle source
# File lib/serf/handler.rb, line 52
def event
  unless @event
    config = Serf::Handler::Cli.new
    @event = Serf::Handler::Event.new( config )
  end

  @event
end
find_serf_handler_directories() click to toggle source
# File lib/serf/handler.rb, line 70
def find_serf_handler_directories
  sources = []
  sources << File.join(Dir.pwd,'.serf-handler')
  sources << File.join(Dir.home, '.serf-handler') if Dir.home rescue nil
  sources << '/etc/serf/handlers/.serf-handler'
  sources.select {|s| FileTest.exist?(s)}
end
load_tasks() click to toggle source
# File lib/serf/handler.rb, line 61
def load_tasks
  sources = []
  sources << ENV['SERF_HANDLER_CONFIG'] if ENV['SERF_HANDLER_CONFIG']
  sources += find_serf_handler_directories
  source = sources.collect {|s| File.join(s, 'config.rb')}.
                   select {|s| FileTest.exist?(s)}.first
  require File.expand_path(source) if source
end
run() click to toggle source
# File lib/serf/handler.rb, line 46
def run
  load_tasks
  result = run_tasks
  STDOUT.write ( result.length > 1 ? result.to_json : result.first )
end
run_tasks() click to toggle source
# File lib/serf/handler.rb, line 78
def run_tasks
  result = []
  Tasks.sort.each do |task|
    next if task.type && task.type != event.type
    begin
      if task.type == :event && ( task.name.to_s.empty? || task.name.to_s == event.name.to_s )
        task.call event
      elsif task.type == :query && ( task.name.to_s.empty? || task.name.to_s == event.name.to_s )
        result << task.call( event )
      end
    rescue Exception => e
      result << "ERROR: #{e}"
    end
  end

  result
end

Public Instance Methods

describe(*strings) click to toggle source
# File lib/serf/handler.rb, line 12
def describe(*strings)
  description = ''
  strings.each do |line|
    if description[-1] =~ /[^\s]/ && line[0] =~ /[^\s]/
      description << " #{line}"
    else
      description << line
    end
  end

  @_handler_description = description
end
on(*args, &block) click to toggle source
# File lib/serf/handler.rb, line 25
def on(*args, &block)
  if Hash === args.first
    type = args[:type]
    name = args[:name]
    order = args[:order]
  else
    type, name, order = *args
  end

  type = :event if type == :user
  type ||= :query
  name ||= nil
  order ||= 0

  desc = @_handler_description
  @_handler_description = ''
  Tasks << Task.new(type, name, order, desc, &block)
end