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)


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

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)


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

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



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

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)


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

def format_payload(message)
  content = Smash.new
  g_payload = message[:message][:body]
  g_headers = message[:message][:headers] || {}
  g_query = message[:message][:query] || {}
  content[:github] = g_payload.merge(
    Smash.new(
      :event => g_headers[:x_github_event],
      :query => g_query,
      :headers => g_headers,
      :url_path => 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



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

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)


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

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
# File 'lib/jackal-github/eventer.rb', line 12

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