travis-api/lib/travis/event/handler.rb
Aakriti Gupta 65f1a29d86 Move travis-core files from /vendor to /lib.
- Re-factor
- Remove code for notifications
- Remove addons
- Remove travis-core gem.
- Ignore logs directory only
- Move core tests to spec/lib
2016-07-20 11:22:25 +02:00

82 lines
2.0 KiB
Ruby

require 'active_support/core_ext/object/blank'
require 'travis/support/logging'
require 'travis/support/instrumentation'
require 'travis/support/exceptions/handling'
require 'travis/event/config'
require 'travis/model/build'
require 'travis/api/serialize'
module Travis
module Event
class Handler
require 'travis/event/handler/metrics'
require 'travis/event/handler/trail'
include Logging
extend Instrumentation, Exceptions::Handling
class << self
def notify(event, object, data = {})
payload = Travis::Api::Serialize.data(object, for: 'event', version: 'v0', params: data) if object.is_a?(Build)
handler = new(event, object, data, payload)
handler.notify if handler.handle?
end
end
attr_reader :event, :object, :data, :payload
def initialize(event, object, data = {}, payload = {})
@event = event
@object = object
@data = data
@payload = payload
end
def notify
handle
end
# TODO disable instrumentation in tests
instrument :notify
rescues :notify, from: Exception
private
def config
# TODO: we should decrypt things in tasks, not in event handler,
# secure_key should be passed to the task and then it should
# decrypt the values, which task needs
@config ||= Config.new(payload, secure_key)
end
def repository
@repository ||= payload['repository']
end
def job
@job ||= payload['job']
end
def build
@build ||= payload['build']
end
def request
@request ||= payload['request']
end
def commit
@commit ||= payload['commit']
end
def secure_key
object.respond_to?(:repository) ? object.repository.key : nil
end
def pull_request?
build['pull_request']
end
end
end
end