trabajo-afectivo/db/migrate/20170905140038_cti_log_preferences_migration.rb

62 lines
1.8 KiB
Ruby
Raw Normal View History

2017-09-08 08:28:34 +00:00
# Rails dropped the class
# ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::MysqlDateTime
# via: https://github.com/rails/rails/commit/f1a0fa9e19b7e4ccaea191fc6cf0613880222ee7
# ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer
# via: https://github.com/rails/rails/commit/aafee233fb3b4211ee0bfb1fca776c159bd1067e
2017-09-08 08:28:34 +00:00
# which we use in stored Cti::Log instance preferences.
# Since we don't need the instances but just an Hash we have to:
# - create a dummy class
# - loop over all instances
# - deserialize them in the preferences
# - replace them in the preferences with the Hash version
# create a dummy class
module ActiveRecord
module ConnectionAdapters
class AbstractMysqlAdapter
class MysqlDateTime < Type::DateTime
end
end
end
end
module ActiveRecord
module ConnectionAdapters
module PostgreSQL
module OID
class Integer < Type::Integer
end
end
end
end
end
2017-09-08 08:28:34 +00:00
class CtiLogPreferencesMigration < ActiveRecord::Migration[5.0]
def change
# correct all entries
Cti::Log.all.pluck(:id).each do |item_id|
item = Cti::Log.find(item_id)
2017-09-08 08:28:34 +00:00
next if !item.preferences
next if item.preferences.blank?
# check from and to keys which hold the instances
%w(from to).each do |direction|
next if item.preferences[direction].blank?
# loop over all instances and covert them
# to an Hash via .attributes
updated = item.preferences[direction].each_with_object([]) do |caller_id, new_direction|
next if !caller_id.respond_to?(:attributes)
2017-09-08 08:28:34 +00:00
new_direction.push(caller_id.attributes)
end
# overwrite the old key with the converted data
item.preferences[direction] = updated
end
# update entry
item.save!
end
end
end