Class: Jackal::Github::Eventer

Inherits:
Callback
  • Object
show all
Defined in:
lib/jackal-github/eventer.rb

Overview

Process events

Instance Method Summary collapse

Instance Method Details

#allowed_events(payload) ⇒ Array, NilClass

Event types allowed to be dropped into pipeline

Parameters:

  • payload (Smash)

Returns:

  • (Array, NilClass)


60
61
62
63
64
65
66
# File 'lib/jackal-github/eventer.rb', line 60

def allowed_events(payload)
  a_events = config.fetch(:events, :allowed, [])
  a_events += payload.fetch(:data, :github, :query, {}).map do |k,v|
    k if v == 'enabled'
  end.compact
  a_events.empty? ? nil : a_events
end

#execute(message) ⇒ Object

Format payload based on event type recevied

Parameters:

  • message (Carnivore::Message)


22
23
24
25
26
27
28
29
30
# File 'lib/jackal-github/eventer.rb', line 22

def execute(message)
  failure_wrap(message) do |_|
    content = format_payload(message)
    payload = new_payload(name_for_payload(content), content)
    filter(message, payload) do
      job_completed(:github, payload, message)
    end
  end
end

#filter(message, payload) { ... } ⇒ Object

Apply filters to payload. If filters are enabled and no filter matches, discard payload

Parameters:

  • message (Carnivore::Message)
  • payload (Smash)

Yields:

  • block to execute if payload is allowed



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/jackal-github/eventer.rb', line 38

def filter(message, payload)
  valid = true
  a_events = allowed_events(payload)
  r_events = restricted_events(payload)
  if(a_events && !a_events.include?(payload.get(:data, :github, :event)))
    valid = false
  end
  if(r_events && r_events.include?(payload.get(:data, :github, :event)))
    valid = false
  end
  if(valid)
    yield
  else
    warn "Message has been filtered and is restricted from entering pipeline (#{message})"
    message.confirm!
  end
end

#format_payload(message) ⇒ Smash

Format the github event to store within the payload

Parameters:

  • message (Carnivore::Message)

Returns:

  • (Smash)


84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/jackal-github/eventer.rb', line 84

def format_payload(message)
  content = Smash.new
  g_payload = unpack(message) #message[:message][:body]
  g_headers = message[:message][:headers] || {}
  g_query = message[:message][:query] || {}
  content[:github] = g_payload.merge(
    Smash.new(
      :event => g_headers.fetch(:x_github_event, 'push'),
      :query => g_query,
      :headers => g_headers,
      :url_path => (message[:message][:request] && message[:message][:request].path)
    )
  )
  content
end

#name_for_payload(event) ⇒ String

Note:

defaults to ‘github`

Provide payload name for given event

Parameters:

  • event (String)

    github event

Returns:

  • (String)

    payload name



105
106
107
108
109
# File 'lib/jackal-github/eventer.rb', line 105

def name_for_payload(event)
  config.fetch(:names, event,
    config.fetch(:names, :default, :github)
  )
end

#restricted_events(payload) ⇒ Array, NilClass

Event types restricted from being dropped into pipeline

Parameters:

  • payload (Smash)

Returns:

  • (Array, NilClass)


72
73
74
75
76
77
78
# File 'lib/jackal-github/eventer.rb', line 72

def restricted_events(payload)
  r_events = config.fetch(:events, :restricted, [])
  r_events += payload.fetch(:data, :github, :query, {}).map do |k,v|
    k if v == 'disabled'
  end.compact
  r_events.empty? ? nil : a_events
end

#valid?(message) ⇒ Truthy, Falsey

Validity of message

Parameters:

  • message (Carnivore::Message)

Returns:

  • (Truthy, Falsey)


12
13
14
15
16
17
# File 'lib/jackal-github/eventer.rb', line 12

def valid?(message)
  super do |payload|
    payload.get(:pusher) ||
      message[:message].get(:headers, :x_github_event)
  end
end