20180923082945_change_sqlite_booleans_to_0_and_1.rb 1.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
class ChangeSqliteBooleansTo0And1 < ActiveRecord::Migration[5.2]

  COLUMNS = {
    AuthSource => ['onthefly_register', 'tls'],
    CustomFieldEnumeration => ['active'],
    CustomField => ['is_required', 'is_for_all', 'is_filter', 'searchable', 'editable', 'visible', 'multiple'],
    EmailAddress => ['is_default', 'notify'],
    Enumeration => ['is_default', 'active'],
    Import => ['finished'],
    IssueStatus => ['is_closed'],
    Issue => ['is_private'],
    Journal => ['private_notes'],
    Member => ['mail_notification'],
    Message => ['locked'],
    Project => ['is_public', 'inherit_members'],
    Repository => ['is_default'],
    Role => ['assignable', 'all_roles_managed'],
    Tracker => ['is_in_chlog', 'is_in_roadmap'],
    UserPreference => ['hide_mail'],
    User => ['admin', 'must_change_passwd'],
    WikiPage => ['protected'],
    WorkflowRule => ['assignee', 'author'],
  }

  def up
    if ActiveRecord::Base.connection.adapter_name =~ /sqlite/i
      COLUMNS.each do |klass, columns|
        columns.each do |column|
          klass.where("#{column} = 't'").update_all(column => 1)
          klass.where("#{column} = 'f'").update_all(column => 0)
        end
      end
    end
  end

  def down
    if ActiveRecord::Base.connection.adapter_name =~ /sqlite/i
      COLUMNS.each do |klass, columns|
        columns.each do |column|
          klass.where("#{column} = 1").update_all(column => 't')
          klass.where("#{column} = 0").update_all(column => 'f')
        end
      end
    end
  end
end