Merge pull request #370 from ChrisBr/fix_migration

Assert event not deleted on add_events_per_week migration
This commit is contained in:
Christian Bruckmayer 2014-07-24 11:38:20 +02:00
commit 0ca590a2e2

View file

@ -17,57 +17,61 @@ class AddEventsPerWeekToConference < ActiveRecord::Migration
add_column :conferences, :events_per_week, :text
TempVersion.where(item_type: 'Event').each do |event_version|
event = TempEvent.find(event_version.item_id)
conference = TempConference.find(event.conference_id)
week = event_version.created_at.end_of_week
event = TempEvent.find_by_id(event_version.item_id)
if event
conference = TempConference.find_by_id(event.conference_id)
if conference
week = event_version.created_at.end_of_week
no_events = {
new: 0,
withdrawn: 0,
unconfirmed: 0,
confirmed: 0,
canceled: 0,
rejected: 0,
}
if !conference.events_per_week
conference.events_per_week = {
week => no_events
no_events = {
new: 0,
withdrawn: 0,
unconfirmed: 0,
confirmed: 0,
canceled: 0,
rejected: 0,
}
elsif !conference.events_per_week[week]
conference.events_per_week[week] = no_events
end
if event_version.object_changes &&
event_version.event == 'create'
# Increment the new state
conference.events_per_week[week][:new] += 1
elsif event_version.object_changes &&
event_version.object_changes[:state]
prev_state = event_version.object_changes[:state][0].to_sym
next_state = event_version.object_changes[:state][1].to_sym
# Backward compatibility: deprecated state :review now :new
if prev_state == :review
prev_state = :new
elsif next_state == :review
next_state = :new
if !conference.events_per_week
conference.events_per_week = {
week => no_events
}
elsif !conference.events_per_week[week]
conference.events_per_week[week] = no_events
end
# Increment the next state
conference.events_per_week[week][next_state] += 1
if event_version.object_changes &&
event_version.event == 'create'
# Decrement the previous state
conference.events_per_week[week][prev_state] -= 1
# Increment the new state
conference.events_per_week[week][:new] += 1
elsif event_version.object_changes &&
event_version.object_changes[:state]
prev_state = event_version.object_changes[:state][0].to_sym
next_state = event_version.object_changes[:state][1].to_sym
# Backward compatibility: deprecated state :review now :new
if prev_state == :review
prev_state = :new
elsif next_state == :review
next_state = :new
end
# Increment the next state
conference.events_per_week[week][next_state] += 1
# Decrement the previous state
conference.events_per_week[week][prev_state] -= 1
end
conference.save
end
end
conference.save
end
# Cumulate the previous weeks to get a snapshot
TempConference.all.each do |conference|
hash = conference.events_per_week.sort.to_hash
hash = conference.events_per_week.sort.to_h
previous = nil
hash.each do |week, values|