Sha256: 7a76a2edf4efb407899e36ce08b3d22ea23e1c0e261f293f6b545157446dfc99

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

module Alchemy::Upgrader::Tasks
  class CellsMigration
    class Cell < ActiveRecord::Base
      self.table_name = 'alchemy_cells'
      belongs_to :page, class_name: 'Alchemy::Page'
    end

    def migrate_cells
      if ActiveRecord::Base.connection.data_source_exists?('alchemy_cells')
        cells = Cell.all
        @fixed_element_name_finder = FixedElementNameFinder.new

        if cells.any?
          cells.each do |cell|
            migrate_cell!(cell)
          end
        else
          puts "No cells found. Skip"
        end
      else
        puts "Cells table does not exist. Skip"
      end
    end

    private

    def migrate_cell!(cell)
      # bust element definitions insta cache
      Alchemy::Element.instance_variable_set('@definitions', nil)
      fixed_element = Alchemy::Element.find_or_initialize_by(fixed: true, name: @fixed_element_name_finder.call(cell.name), page: cell.page)
      elements = Alchemy::Element.where(cell_id: cell.id).order(position: :asc)

      if fixed_element.new_record?
        fixed_element.autogenerate_nested_elements = false
        fixed_element.save!
        Alchemy::Element.acts_as_list_no_update do
          elements.update_all(parent_element_id: fixed_element.id)
        end
        puts "Created new fixed element '#{fixed_element.name}' for cell '#{cell.name}'."
      else
        puts "Element for cell '#{cell.name}' already present. Skip"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
alchemy_cms-4.6.7 lib/alchemy/upgrader/tasks/cells_migration.rb