Sha256: 528518e2c6ebccebbb3450dc1ace73ee07124b3b0e2f4f88e696c6c4dc7ba1c6

Contents?: true

Size: 1.23 KB

Versions: 50

Compression:

Stored size: 1.23 KB

Contents

class AddMissingUniqueIndexesForUniqueAttributes < ActiveRecord::Migration[5.0]
  def change
    tables = {
      country: [:name, :iso_name],
      refund_reason: [:name],
      reimbursement_type: [:name],
      return_authorization_reason: [:name],
      role: [:name],
      store: [:code]
    }

    tables.each do |table, columns|
      table_class = "Spree::#{table.to_s.classify}".constantize
      table_name = table_class.table_name

      columns.each do |column|
        unless index_exists?(table_name, column, unique: true)
          attributes = table_class.unscoped.group(column).having('sum(1) > 1').pluck(column)
          instances = table_class.where(column => [nil, attributes])

          instances.find_each do |instance|
            column_value = 'Unique String ' + SecureRandom.urlsafe_base64(8).upcase.delete('/+=_-')[0, 8]
            instance.send("#{column}=", column_value)
            instance.save
          end

          remove_index table_name, column if index_exists?(table_name, column)
          if supports_expression_index?
            add_index table_name, "lower(#{column})", unique: true
          else
            add_index table_name, column, unique: true
          end
        end
      end
    end
  end
end

Version data entries

50 entries across 50 versions & 1 rubygems

Version Path
spree_core-3.7.14.1 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.14 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.13 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.12 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.11 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.4.6 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.10 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.9 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.8 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.7 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.6 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.5 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.4 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.3 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.2 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.1 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.0 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.0.rc3 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.0.rc2 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb
spree_core-3.7.0.rc1 db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb