Sha256: 6d72f39cca1cc9c008d99d3bc747e433835c75b148599c4eb467b619c7611b9a

Contents?: true

Size: 1.31 KB

Versions: 5

Compression:

Stored size: 1.31 KB

Contents

class RenameBookmarksController < ActiveRecord::Migration[5.2]
  def up
    original_controller = 'foreman_tasks_tasks'
    original_bookmarks = Bookmark.where(controller: original_controller)
    original_bookmarks_names = Hash[original_bookmarks.pluck(:name, :id)]
    
    new_controller = 'foreman_tasks/tasks'
    new_bookmarks = Bookmark.where(controller: new_controller)
    new_bookmarks.find_each do |new_bookmark|
      name = new_bookmark.name
      is_name_taken = original_bookmarks_names.key? name

      if is_name_taken
        original_bookmark = original_bookmarks.find(original_bookmarks_names[name])
        is_duplicated = original_bookmark.query == new_bookmark.query &&
                        original_bookmark.owner_id == new_bookmark.owner_id &&
                        original_bookmark.owner_type == new_bookmark.owner_type &&
                        original_bookmark.public == new_bookmark.public

        if is_duplicated
          original_bookmark.destroy     
        else
          modified_name = "#{name}_#{generate_token}"
          original_bookmark.update(name: modified_name)
        end
      end
      # Revert to the original controller name
      new_bookmark.update(controller: original_controller)
    end
  end

  def generate_token
    SecureRandom.base64(5).gsub(/[^0-9a-z ]/i, '')
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
foreman-tasks-2.0.3 db/migrate/20200517215015_rename_bookmarks_controller.rb
foreman-tasks-2.0.2 db/migrate/20200517215015_rename_bookmarks_controller.rb
foreman-tasks-2.0.1 db/migrate/20200517215015_rename_bookmarks_controller.rb
foreman-tasks-2.0.0 db/migrate/20200517215015_rename_bookmarks_controller.rb
foreman-tasks-1.2.0 db/migrate/20200517215015_rename_bookmarks_controller.rb