From c05b428d8c029d8465beb277c489e23353f8d871 Mon Sep 17 00:00:00 2001 From: Chrisbr Date: Thu, 24 Jul 2014 11:05:03 +0200 Subject: [PATCH] Assert event not deleted on add_events_per_week migration --- ...23203_add_events_per_week_to_conference.rb | 84 ++++++++++--------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/db/migrate/20140701123203_add_events_per_week_to_conference.rb b/db/migrate/20140701123203_add_events_per_week_to_conference.rb index bedf4f58..3a2f3d22 100644 --- a/db/migrate/20140701123203_add_events_per_week_to_conference.rb +++ b/db/migrate/20140701123203_add_events_per_week_to_conference.rb @@ -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|