Module: Serf::Handler

Defined in:
lib/serf/handler.rb,
lib/serf/handler/cli.rb,
lib/serf/handler/task.rb,
lib/serf/handler/event.rb,
lib/serf/handler/version.rb,
lib/serf/handler/tasklist.rb

Defined Under Namespace

Classes: Cli, Event, Task, TaskList

Constant Summary collapse

Tasks =
TaskList.new
VERSION =
"1.1.2"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.eventObject



52
53
54
55
56
57
58
59
# 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_directoriesObject



70
71
72
73
74
75
76
# 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_tasksObject



61
62
63
64
65
66
67
68
# 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

.runObject



46
47
48
49
50
# 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_tasksObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# 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

Instance Method Details

#describe(*strings) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# 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) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 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