travis-api/lib/travis/model/build/denormalize.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

35 lines
1.1 KiB
Ruby

class Build
# The build's start and finish events (state changes) trigger denormalization
# of certain attributes to the repository in order to disburden the db a bit.
#
# E.g. on `start` the `started_at` attribute of a build gets set to its
# repository's `last_started_at` attribute. Likewise on `finish` the
# `finished_at` and `state` attributes are set to `last_build_finished_at` and
# `last_build_state` on the repository.
#
# These attributes are used in the repositories list and thus read frequently.
module Denormalize
def denormalize(event, *args)
repository.update_attributes!(denormalize_attributes_for(event)) if denormalize?(event)
end
DENORMALIZE = {
start: %w(id number state duration started_at finished_at),
finish: %w(state duration finished_at),
reset: %w(state duration started_at finished_at),
cancel: %w(state duration finished_at)
}
def denormalize?(event)
DENORMALIZE.key?(event)
end
def denormalize_attributes_for(event)
DENORMALIZE[event].inject({}) do |result, key|
result.merge(:"last_build_#{key}" => send(key))
end
end
end
end