diff --git a/db/migrate/20200226213334_alchemy_four_point_four.rb b/db/migrate/20200226213334_alchemy_four_point_four.rb deleted file mode 100644 index 16da133252..0000000000 --- a/db/migrate/20200226213334_alchemy_four_point_four.rb +++ /dev/null @@ -1,200 +0,0 @@ -# frozen_string_literal: true - -class AlchemyFourPointFour < ActiveRecord::Migration[6.0] - def up - unless table_exists?("alchemy_attachments") - create_table "alchemy_attachments" do |t| - t.string "name" - t.string "file_name" - t.string "file_mime_type" - t.integer "file_size" - t.references "creator" - t.references "updater" - t.timestamps - t.string "file_uid" - t.index ["file_uid"], name: "index_alchemy_attachments_on_file_uid" - end - end - - unless table_exists?("alchemy_elements") - create_table "alchemy_elements" do |t| - t.string "name" - t.integer "position" - t.references "page", null: false, index: false - t.boolean "public", default: true - t.boolean "folded", default: false - t.boolean "unique", default: false - t.timestamps - t.references "creator" - t.references "updater" - t.references "parent_element", index: false - t.boolean "fixed", default: false, null: false - t.index ["fixed"], name: "index_alchemy_elements_on_fixed" - t.index ["page_id", "parent_element_id"], name: "index_alchemy_elements_on_page_id_and_parent_element_id" - t.index ["page_id", "position"], name: "index_elements_on_page_id_and_position" - end - end - - unless table_exists?("alchemy_elements_alchemy_pages") - create_table "alchemy_elements_alchemy_pages", id: false do |t| - t.references "element" - t.references "page" - end - end - - unless table_exists?("alchemy_folded_pages") - create_table "alchemy_folded_pages" do |t| - t.references "page", null: false, index: false - t.references "user", null: false, index: false - t.boolean "folded", default: false - t.index ["page_id", "user_id"], name: "index_alchemy_folded_pages_on_page_id_and_user_id", unique: true - end - end - - unless table_exists?("alchemy_languages") - create_table "alchemy_languages" do |t| - t.string "name" - t.string "language_code" - t.string "frontpage_name" - t.string "page_layout", default: "intro" - t.boolean "public", default: false - t.timestamps - t.references "creator" - t.references "updater" - t.boolean "default", default: false - t.string "country_code", default: "", null: false - t.references "site", null: false - t.string "locale" - t.index ["language_code", "country_code"], name: "index_alchemy_languages_on_language_code_and_country_code" - t.index ["language_code"], name: "index_alchemy_languages_on_language_code" - end - end - - unless table_exists?("alchemy_legacy_page_urls") - create_table "alchemy_legacy_page_urls" do |t| - t.string "urlname", null: false - t.references "page", null: false - t.timestamps - t.index ["urlname"], name: "index_alchemy_legacy_page_urls_on_urlname" - end - end - - unless table_exists?("alchemy_nodes") - create_table "alchemy_nodes" do |t| - t.string "name" - t.string "title" - t.string "url" - t.boolean "nofollow", default: false, null: false - t.boolean "external", default: false, null: false - t.boolean "folded", default: false, null: false - t.references "parent" - t.integer "lft", null: false - t.integer "rgt", null: false - t.integer "depth", default: 0, null: false - t.references "page" - t.references "language", null: false - t.references "creator" - t.references "updater" - t.timestamps - t.references "site", null: false - t.index ["lft"], name: "index_alchemy_nodes_on_lft" - t.index ["rgt"], name: "index_alchemy_nodes_on_rgt" - end - end - - unless table_exists?("alchemy_pages") - create_table "alchemy_pages" do |t| - t.string "name" - t.string "urlname" - t.string "title" - t.string "language_code" - t.boolean "language_root" - t.string "page_layout" - t.text "meta_keywords" - t.text "meta_description" - t.integer "lft" - t.integer "rgt" - t.references "parent", index: false - t.integer "depth" - t.boolean "visible", default: false - t.integer "locked_by" - t.boolean "restricted", default: false - t.boolean "robot_index", default: true - t.boolean "robot_follow", default: true - t.boolean "sitemap", default: true - t.boolean "layoutpage", default: false - t.timestamps - t.references "creator" - t.references "updater" - t.references "language" - t.datetime "published_at" - t.datetime "public_on" - t.datetime "public_until" - t.datetime "locked_at" - t.index ["locked_at", "locked_by"], name: "index_alchemy_pages_on_locked_at_and_locked_by" - t.index ["parent_id", "lft"], name: "index_pages_on_parent_id_and_lft" - t.index ["public_on", "public_until"], name: "index_alchemy_pages_on_public_on_and_public_until" - t.index ["rgt"], name: "index_alchemy_pages_on_rgt" - t.index ["urlname"], name: "index_pages_on_urlname" - end - end - - unless table_exists?("alchemy_pictures") - create_table "alchemy_pictures" do |t| - t.string "name" - t.string "image_file_name" - t.integer "image_file_width" - t.integer "image_file_height" - t.timestamps - t.references "creator" - t.references "updater" - t.string "upload_hash" - t.string "image_file_uid" - t.integer "image_file_size" - t.string "image_file_format" - end - end - - unless table_exists?("alchemy_sites") - create_table "alchemy_sites" do |t| - t.string "host" - t.string "name" - t.timestamps - t.boolean "public", default: false - t.text "aliases" - t.boolean "redirect_to_primary_host" - t.index ["host", "public"], name: "alchemy_sites_public_hosts_idx" - t.index ["host"], name: "index_alchemy_sites_on_host" - end - end - - unless foreign_key_exists?("alchemy_elements", column: "page_id") - add_foreign_key "alchemy_elements", "alchemy_pages", column: "page_id", on_update: :cascade, on_delete: :cascade - end - - unless foreign_key_exists?("alchemy_nodes", column: "language_id") - add_foreign_key "alchemy_nodes", "alchemy_languages", column: "language_id" - end - - unless foreign_key_exists?("alchemy_nodes", column: "page_id") - add_foreign_key "alchemy_nodes", "alchemy_pages", column: "page_id", on_delete: :cascade - end - - unless foreign_key_exists?("alchemy_nodes", column: "site_id") - add_foreign_key "alchemy_nodes", "alchemy_sites", column: "site_id", on_delete: :cascade - end - end - - def down - drop_table "alchemy_attachments" if table_exists?("alchemy_attachments") - drop_table "alchemy_elements" if table_exists?("alchemy_elements") - drop_table "alchemy_elements_alchemy_pages" if table_exists?("alchemy_elements_alchemy_pages") - drop_table "alchemy_folded_pages" if table_exists?("alchemy_folded_pages") - drop_table "alchemy_languages" if table_exists?("alchemy_languages") - drop_table "alchemy_legacy_page_urls" if table_exists?("alchemy_legacy_page_urls") - drop_table "alchemy_nodes" if table_exists?("alchemy_nodes") - drop_table "alchemy_pages" if table_exists?("alchemy_pages") - drop_table "alchemy_pictures" if table_exists?("alchemy_pictures") - drop_table "alchemy_sites" if table_exists?("alchemy_sites") - end -end diff --git a/db/migrate/20200504210159_remove_site_id_from_nodes.rb b/db/migrate/20200504210159_remove_site_id_from_nodes.rb deleted file mode 100644 index 2dd70d118e..0000000000 --- a/db/migrate/20200504210159_remove_site_id_from_nodes.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true -class RemoveSiteIdFromNodes < ActiveRecord::Migration[6.0] - def up - remove_foreign_key :alchemy_nodes, :alchemy_sites - remove_index :alchemy_nodes, :site_id - remove_column :alchemy_nodes, :site_id, :integer, null: false - end - - def down - add_column :alchemy_nodes, :site_id, :integer, null: true - sql = <<~SQL - UPDATE alchemy_nodes - SET site_id = ( - SELECT alchemy_languages.site_id FROM alchemy_languages WHERE alchemy_nodes.language_id = alchemy_languages.id - ) WHERE - EXISTS ( - SELECT * - FROM alchemy_languages - WHERE alchemy_languages.id = alchemy_nodes.language_id - ); - SQL - - connection.execute(sql) - change_column :alchemy_nodes, :site_id, :integer, null: false - add_index :alchemy_nodes, :site_id - add_foreign_key :alchemy_nodes, :alchemy_sites, column: :site_id - end -end diff --git a/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb b/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb deleted file mode 100644 index 7e4b3f1545..0000000000 --- a/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -class AddLanguageIdForeignKeyToAlchemyPages < ActiveRecord::Migration[6.0] - def change - add_foreign_key :alchemy_pages, :alchemy_languages, column: :language_id - change_column_null :alchemy_pages, :language_id, false, Alchemy::Language.default&.id - end -end diff --git a/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb b/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb deleted file mode 100644 index dcb2f7fd0d..0000000000 --- a/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true -class AddMenuTypeToAlchemyNodes < ActiveRecord::Migration[6.0] - class LocalNode < ActiveRecord::Base - self.table_name = :alchemy_nodes - acts_as_nested_set scope: :language_id - - def self.root_for(node) - return node if node.parent_id.nil? - - root_for(node.parent) - end - end - - def up - add_column :alchemy_nodes, :menu_type, :string - LocalNode.all.each do |node| - root = LocalNode.root_for(node) - menu_type = root.name.parameterize.underscore - node.update(menu_type: menu_type) - end - change_column_null :alchemy_nodes, :menu_type, false - end - - def down - remove_column :alchemy_nodes, :menu_type - end -end diff --git a/db/migrate/20200514091507_make_page_layoutpage_null_false.rb b/db/migrate/20200514091507_make_page_layoutpage_null_false.rb deleted file mode 100644 index 0bb1f58e0c..0000000000 --- a/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true -class MakePageLayoutpageNullFalse < ActiveRecord::Migration[6.0] - def change - change_column_null :alchemy_pages, :layoutpage, false, false - end -end diff --git a/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb b/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb deleted file mode 100644 index c8e8dd00fb..0000000000 --- a/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true -class RemoveVisibleFromAlchemyPages < ActiveRecord::Migration[6.0] - class LocalPage < ActiveRecord::Base - self.table_name = "alchemy_pages" - - scope :invisible, -> { where(visible: [false, nil]) } - scope :contentpages, -> { where(layoutpage: [false, nil]) } - end - - def up - if LocalPage.invisible.contentpages.where.not(parent_id: nil).any? - abort "You have invisible pages in your database! " \ - "Please re-structure your page tree before running this migration. " \ - "You might also downgrade to Alchemy 4.6 and " \ - "run the `alchemy:upgrade:4.6:restructure_page_tree` rake task." - end - - remove_column :alchemy_pages, :visible - end - - def down - add_column :alchemy_pages, :visible, :boolean, default: false - end -end diff --git a/db/migrate/20200617110713_create_alchemy_picture_thumbs.rb b/db/migrate/20200617110713_create_alchemy_picture_thumbs.rb deleted file mode 100644 index a5bd0c08cc..0000000000 --- a/db/migrate/20200617110713_create_alchemy_picture_thumbs.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -class CreateAlchemyPictureThumbs < ActiveRecord::Migration[6.0] - def up - return if table_exists?(:alchemy_picture_thumbs) - - create_table :alchemy_picture_thumbs do |t| - t.references :picture, foreign_key: { to_table: :alchemy_pictures }, null: false - t.string :signature, null: false - t.text :uid, null: false - end - add_index :alchemy_picture_thumbs, :signature, unique: true - end - - def down - return unless table_exists?(:alchemy_picture_thumbs) - - remove_foreign_key :alchemy_picture_thumbs, :alchemy_pictures, column: :picture_id - remove_index :alchemy_picture_thumbs, :signature - drop_table :alchemy_picture_thumbs - end -end diff --git a/db/migrate/20200907111332_remove_tri_state_booleans.rb b/db/migrate/20200907111332_remove_tri_state_booleans.rb deleted file mode 100644 index 9ce50a2bbd..0000000000 --- a/db/migrate/20200907111332_remove_tri_state_booleans.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -class RemoveTriStateBooleans < ActiveRecord::Migration[6.0] - def change - change_column_null :alchemy_elements, :public, false, false - change_column_default :alchemy_elements, :public, true - - change_column_null :alchemy_elements, :folded, false - change_column_null :alchemy_elements, :unique, false - - change_column_null :alchemy_folded_pages, :folded, false - - change_column_null :alchemy_languages, :public, false - change_column_null :alchemy_languages, :default, false - - change_column_null :alchemy_pages, :language_root, false, false - change_column_default :alchemy_pages, :language_root, false - - change_column_null :alchemy_pages, :restricted, false - change_column_null :alchemy_pages, :robot_index, false - change_column_null :alchemy_pages, :robot_follow, false - change_column_null :alchemy_pages, :sitemap, false - - change_column_null :alchemy_sites, :public, false - change_column_null :alchemy_sites, :redirect_to_primary_host, false, false - change_column_default :alchemy_sites, :redirect_to_primary_host, false - end -end diff --git a/db/migrate/20201207131309_create_page_versions.rb b/db/migrate/20201207131309_create_page_versions.rb deleted file mode 100644 index d63289da1c..0000000000 --- a/db/migrate/20201207131309_create_page_versions.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -class CreatePageVersions < ActiveRecord::Migration[6.0] - def change - create_table :alchemy_page_versions do |t| - t.references :page, - null: false, - index: true, - foreign_key: { - to_table: :alchemy_pages, - on_delete: :cascade, - } - t.datetime :public_on - t.datetime :public_until - t.index [:public_on, :public_until] - t.timestamps - end - end -end diff --git a/db/migrate/20201207135820_add_page_version_id_to_alchemy_elements.rb b/db/migrate/20201207135820_add_page_version_id_to_alchemy_elements.rb deleted file mode 100644 index 04121e8312..0000000000 --- a/db/migrate/20201207135820_add_page_version_id_to_alchemy_elements.rb +++ /dev/null @@ -1,76 +0,0 @@ -# frozen_string_literal: true - -class AddPageVersionIdToAlchemyElements < ActiveRecord::Migration[6.0] - class LocalPage < ActiveRecord::Base - self.table_name = :alchemy_pages - has_many :elements, class_name: "LocalElement", inverse_of: :page - has_many :versions, class_name: "LocalVersion", inverse_of: :page, foreign_key: :page_id - end - - class LocalVersion < ActiveRecord::Base - self.table_name = :alchemy_page_versions - belongs_to :page, class_name: "LocalPage", inverse_of: :versions - has_many :elements, class_name: "LocalElement", inverse_of: :versions - end - - class LocalElement < ActiveRecord::Base - self.table_name = :alchemy_elements - belongs_to :page, class_name: "LocalPage", inverse_of: :elements - belongs_to :page_version, class_name: "LocalVersion", inverse_of: :elements - end - - def change - add_reference :alchemy_elements, :page_version, - index: false, - foreign_key: { - to_table: :alchemy_page_versions, - on_delete: :cascade, - } - add_index :alchemy_elements, [:page_version_id, :parent_element_id], - name: "idx_alchemy_elements_on_page_version_id_and_parent_element_id" - add_index :alchemy_elements, [:page_version_id, :position], - name: "idx_alchemy_elements_on_page_version_id_and_position" - - # Add a page version for each page so we can add a not null constraint - reversible do |dir| - dir.up do - say_with_time "Create draft version for each page." do - LocalPage.find_each do |page| - next if page.versions.any? - - page.versions.create!.tap do |version| - Alchemy::Element.where(page_id: page.id).update_all(page_version_id: version.id) - end - end - LocalVersion.count - end - end - end - - change_column_null :alchemy_elements, :page_version_id, false - - # Remove the existing page relation - remove_reference :alchemy_elements, :page, - null: false, - index: false, - foreign_key: { - to_table: :alchemy_pages, - on_delete: :cascade, - on_update: :cascade, - } - if index_exists? :alchemy_elements, - :parent_element_id, - name: "index_alchemy_elements_on_page_id_and_parent_element_id" - remove_index :alchemy_elements, - column: [:parent_element_id], - name: "index_alchemy_elements_on_page_id_and_parent_element_id" - end - if index_exists? :alchemy_elements, - :position, - name: "index_elements_on_page_id_and_position" - remove_index :alchemy_elements, - column: [:position], - name: "index_elements_on_page_id_and_position" - end - end -end diff --git a/db/migrate/20210205143548_rename_public_on_and_public_until_on_alchemy_pages.rb b/db/migrate/20210205143548_rename_public_on_and_public_until_on_alchemy_pages.rb deleted file mode 100644 index d88bd4e330..0000000000 --- a/db/migrate/20210205143548_rename_public_on_and_public_until_on_alchemy_pages.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -class RenamePublicOnAndPublicUntilOnAlchemyPages < ActiveRecord::Migration[6.0] - def change - remove_index :alchemy_pages, column: [:public_on, :public_until], - name: "index_alchemy_pages_on_public_on_and_public_until" - rename_column :alchemy_pages, :public_on, :legacy_public_on - rename_column :alchemy_pages, :public_until, :legacy_public_until - end -end diff --git a/db/migrate/20210508091432_create_alchemy_ingredients.rb b/db/migrate/20210508091432_create_alchemy_ingredients.rb deleted file mode 100644 index 5e7e392dcd..0000000000 --- a/db/migrate/20210508091432_create_alchemy_ingredients.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -class CreateAlchemyIngredients < ActiveRecord::Migration[6.0] - def change - create_table :alchemy_ingredients do |t| - t.references :element, null: false, foreign_key: { to_table: :alchemy_elements, on_delete: :cascade } - t.string :type, index: true, null: false - t.string :role, null: false - t.text :value - if ActiveRecord::Migration.connection.adapter_name.match?(/postgres/i) - t.jsonb :data, default: {} - else - t.json :data - end - t.belongs_to :related_object, null: true, polymorphic: true, index: false - t.index [:element_id, :role], unique: true - t.index [:related_object_id, :related_object_type], name: "idx_alchemy_ingredient_relation" - - t.timestamps - end - end -end diff --git a/db/migrate/20220514072456_restrict_on_delete_page_id_foreign_key_from_alchemy_nodes.rb b/db/migrate/20220514072456_restrict_on_delete_page_id_foreign_key_from_alchemy_nodes.rb deleted file mode 100644 index d6c354091b..0000000000 --- a/db/migrate/20220514072456_restrict_on_delete_page_id_foreign_key_from_alchemy_nodes.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -class RestrictOnDeletePageIdForeignKeyFromAlchemyNodes < ActiveRecord::Migration[6.0] - def up - remove_foreign_key :alchemy_nodes, :alchemy_pages - add_foreign_key :alchemy_nodes, :alchemy_pages, column: :page_id, on_delete: :restrict - end - - def down - remove_foreign_key :alchemy_nodes, :alchemy_pages - add_foreign_key :alchemy_nodes, :alchemy_pages, column: :page_id, on_delete: :cascade - end -end diff --git a/db/migrate/20230121212637_alchemy_six_point_one.rb b/db/migrate/20230121212637_alchemy_six_point_one.rb new file mode 100644 index 0000000000..2a212052bc --- /dev/null +++ b/db/migrate/20230121212637_alchemy_six_point_one.rb @@ -0,0 +1,250 @@ +# frozen_string_literal: true + +class AlchemySixPointOne < ActiveRecord::Migration[ActiveRecord::Migration.current_version] + def up + unless table_exists?("alchemy_attachments") + create_table "alchemy_attachments" do |t| + t.string "name" + t.string "file_name" + t.string "file_mime_type" + t.integer "file_size" + t.integer "creator_id" + t.integer "updater_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "file_uid" + t.index ["creator_id"], name: "index_alchemy_attachments_on_creator_id" + t.index ["file_uid"], name: "index_alchemy_attachments_on_file_uid" + t.index ["updater_id"], name: "index_alchemy_attachments_on_updater_id" + end + end + + unless table_exists?("alchemy_elements_alchemy_pages") + create_table "alchemy_elements_alchemy_pages", id: false do |t| + t.integer "element_id" + t.integer "page_id" + t.index ["element_id"], name: "index_alchemy_elements_alchemy_pages_on_element_id" + t.index ["page_id"], name: "index_alchemy_elements_alchemy_pages_on_page_id" + end + end + + unless table_exists?("alchemy_folded_pages") + create_table "alchemy_folded_pages" do |t| + t.integer "page_id", null: false + t.integer "user_id", null: false + t.boolean "folded", default: false, null: false + t.index ["page_id", "user_id"], name: "index_alchemy_folded_pages_on_page_id_and_user_id", unique: true + end + end + + unless table_exists?("alchemy_sites") + create_table "alchemy_sites" do |t| + t.string "host" + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "public", default: false, null: false + t.text "aliases" + t.boolean "redirect_to_primary_host", default: false, null: false + t.index ["host", "public"], name: "alchemy_sites_public_hosts_idx" + t.index ["host"], name: "index_alchemy_sites_on_host" + end + end + + unless table_exists?("alchemy_languages") + create_table "alchemy_languages" do |t| + t.string "name" + t.string "language_code" + t.string "frontpage_name" + t.string "page_layout", default: "intro" + t.boolean "public", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "creator_id" + t.integer "updater_id" + t.boolean "default", default: false, null: false + t.string "country_code", default: "", null: false + t.references "site", null: false, foreign_key: { to_table: :alchemy_sites } + t.string "locale" + t.index ["creator_id"], name: "index_alchemy_languages_on_creator_id" + t.index ["language_code", "country_code"], name: "index_alchemy_languages_on_language_code_and_country_code" + t.index ["language_code"], name: "index_alchemy_languages_on_language_code" + t.index ["updater_id"], name: "index_alchemy_languages_on_updater_id" + end + end + + unless table_exists?("alchemy_legacy_page_urls") + create_table "alchemy_legacy_page_urls" do |t| + t.string "urlname", null: false + t.integer "page_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["page_id"], name: "index_alchemy_legacy_page_urls_on_page_id" + t.index ["urlname"], name: "index_alchemy_legacy_page_urls_on_urlname" + end + end + + unless table_exists?("alchemy_pages") + create_table "alchemy_pages" do |t| + t.string "name" + t.string "urlname" + t.string "title" + t.string "language_code" + t.boolean "language_root", default: false, null: false + t.string "page_layout" + t.text "meta_keywords" + t.text "meta_description" + t.integer "lft" + t.integer "rgt" + t.integer "parent_id" + t.integer "depth" + t.integer "locked_by" + t.boolean "restricted", default: false, null: false + t.boolean "robot_index", default: true, null: false + t.boolean "robot_follow", default: true, null: false + t.boolean "sitemap", default: true, null: false + t.boolean "layoutpage", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "creator_id" + t.integer "updater_id" + t.references "language", null: false, foreign_key: { to_table: :alchemy_languages } + t.datetime "published_at", precision: nil + t.datetime "legacy_public_on", precision: nil + t.datetime "legacy_public_until", precision: nil + t.datetime "locked_at", precision: nil + t.index ["creator_id"], name: "index_alchemy_pages_on_creator_id" + t.index ["locked_at", "locked_by"], name: "index_alchemy_pages_on_locked_at_and_locked_by" + t.index ["parent_id", "lft"], name: "index_pages_on_parent_id_and_lft" + t.index ["rgt"], name: "index_alchemy_pages_on_rgt" + t.index ["updater_id"], name: "index_alchemy_pages_on_updater_id" + t.index ["urlname"], name: "index_pages_on_urlname" + end + end + + unless table_exists?("alchemy_page_versions") + create_table "alchemy_page_versions" do |t| + t.references "page", null: false, foreign_key: { to_table: :alchemy_pages, on_delete: :cascade } + t.datetime "public_on", precision: nil + t.datetime "public_until", precision: nil + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["public_on", "public_until"], name: "index_alchemy_page_versions_on_public_on_and_public_until" + end + end + + unless table_exists?("alchemy_elements") + create_table "alchemy_elements" do |t| + t.string "name" + t.integer "position" + t.boolean "public", default: true, null: false + t.boolean "folded", default: false, null: false + t.boolean "unique", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "creator_id" + t.integer "updater_id" + t.integer "parent_element_id" + t.boolean "fixed", default: false, null: false + t.references "page_version", null: false, foreign_key: { to_table: :alchemy_page_versions, on_delete: :cascade } + t.index ["creator_id"], name: "index_alchemy_elements_on_creator_id" + t.index ["fixed"], name: "index_alchemy_elements_on_fixed" + t.index ["page_version_id", "parent_element_id"], name: "idx_alchemy_elements_on_page_version_id_and_parent_element_id" + t.index ["page_version_id", "position"], name: "idx_alchemy_elements_on_page_version_id_and_position" + t.index ["updater_id"], name: "index_alchemy_elements_on_updater_id" + end + end + + unless table_exists?("alchemy_ingredients") + create_table "alchemy_ingredients" do |t| + t.references "element", null: false, foreign_key: { to_table: :alchemy_elements, on_delete: :cascade } + t.string "type", null: false + t.string "role", null: false + t.text "value" + if ActiveRecord::Migration.connection.adapter_name.match?(/postgres/i) + t.jsonb :data, default: {} + else + t.json :data + end + t.string "related_object_type" + t.integer "related_object_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["element_id", "role"], name: "index_alchemy_ingredients_on_element_id_and_role", unique: true + t.index ["related_object_id", "related_object_type"], name: "idx_alchemy_ingredient_relation" + t.index ["type"], name: "index_alchemy_ingredients_on_type" + end + end + + unless table_exists?("alchemy_nodes") + create_table "alchemy_nodes" do |t| + t.string "name" + t.string "title" + t.string "url" + t.boolean "nofollow", default: false, null: false + t.boolean "external", default: false, null: false + t.boolean "folded", default: false, null: false + t.integer "parent_id" + t.integer "lft", null: false + t.integer "rgt", null: false + t.integer "depth", default: 0, null: false + t.references "page", foreign_key: { to_table: :alchemy_pages, on_delete: :restrict } + t.references "language", null: false, foreign_key: { to_table: :alchemy_languages } + t.integer "creator_id" + t.integer "updater_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "menu_type", null: false + t.index ["creator_id"], name: "index_alchemy_nodes_on_creator_id" + t.index ["lft"], name: "index_alchemy_nodes_on_lft" + t.index ["parent_id"], name: "index_alchemy_nodes_on_parent_id" + t.index ["rgt"], name: "index_alchemy_nodes_on_rgt" + t.index ["updater_id"], name: "index_alchemy_nodes_on_updater_id" + end + end + + unless table_exists?("alchemy_pictures") + create_table "alchemy_pictures" do |t| + t.string "name" + t.string "image_file_name" + t.integer "image_file_width" + t.integer "image_file_height" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "creator_id" + t.integer "updater_id" + t.string "upload_hash" + t.string "image_file_uid" + t.integer "image_file_size" + t.string "image_file_format" + t.index ["creator_id"], name: "index_alchemy_pictures_on_creator_id" + t.index ["updater_id"], name: "index_alchemy_pictures_on_updater_id" + end + end + + unless table_exists?("alchemy_picture_thumbs") + create_table "alchemy_picture_thumbs" do |t| + t.references "picture", null: false, foreign_key: { to_table: :alchemy_pictures } + t.string "signature", null: false + t.text "uid", null: false + t.index ["signature"], name: "index_alchemy_picture_thumbs_on_signature", unique: true + end + end + end + + def down + drop_table "alchemy_attachments" if table_exists?("alchemy_attachments") + drop_table "alchemy_elements" if table_exists?("alchemy_elements") + drop_table "alchemy_elements_alchemy_pages" if table_exists?("alchemy_elements_alchemy_pages") + drop_table "alchemy_folded_pages" if table_exists?("alchemy_folded_pages") + drop_table "alchemy_ingredients" if table_exists?("alchemy_ingredients") + drop_table "alchemy_languages" if table_exists?("alchemy_languages") + drop_table "alchemy_legacy_page_urls" if table_exists?("alchemy_legacy_page_urls") + drop_table "alchemy_nodes" if table_exists?("alchemy_nodes") + drop_table "alchemy_page_versions" if table_exists?("alchemy_page_versions") + drop_table "alchemy_pages" if table_exists?("alchemy_pages") + drop_table "alchemy_picture_thumbs" if table_exists?("alchemy_picture_thumbs") + drop_table "alchemy_pictures" if table_exists?("alchemy_pictures") + drop_table "alchemy_sites" if table_exists?("alchemy_sites") + end +end diff --git a/spec/dummy/db/migrate/20230119091717_alchemy_four_point_four.alchemy.rb b/spec/dummy/db/migrate/20230119091717_alchemy_four_point_four.alchemy.rb deleted file mode 100644 index 1c76b95a65..0000000000 --- a/spec/dummy/db/migrate/20230119091717_alchemy_four_point_four.alchemy.rb +++ /dev/null @@ -1,201 +0,0 @@ -# frozen_string_literal: true - -# This migration comes from alchemy (originally 20200226213334) -class AlchemyFourPointFour < ActiveRecord::Migration[6.0] - def up - unless table_exists?("alchemy_attachments") - create_table "alchemy_attachments" do |t| - t.string "name" - t.string "file_name" - t.string "file_mime_type" - t.integer "file_size" - t.references "creator" - t.references "updater" - t.timestamps - t.string "file_uid" - t.index ["file_uid"], name: "index_alchemy_attachments_on_file_uid" - end - end - - unless table_exists?("alchemy_elements") - create_table "alchemy_elements" do |t| - t.string "name" - t.integer "position" - t.references "page", null: false, index: false - t.boolean "public", default: true - t.boolean "folded", default: false - t.boolean "unique", default: false - t.timestamps - t.references "creator" - t.references "updater" - t.references "parent_element", index: false - t.boolean "fixed", default: false, null: false - t.index ["fixed"], name: "index_alchemy_elements_on_fixed" - t.index ["page_id", "parent_element_id"], name: "index_alchemy_elements_on_page_id_and_parent_element_id" - t.index ["page_id", "position"], name: "index_elements_on_page_id_and_position" - end - end - - unless table_exists?("alchemy_elements_alchemy_pages") - create_table "alchemy_elements_alchemy_pages", id: false do |t| - t.references "element" - t.references "page" - end - end - - unless table_exists?("alchemy_folded_pages") - create_table "alchemy_folded_pages" do |t| - t.references "page", null: false, index: false - t.references "user", null: false, index: false - t.boolean "folded", default: false - t.index ["page_id", "user_id"], name: "index_alchemy_folded_pages_on_page_id_and_user_id", unique: true - end - end - - unless table_exists?("alchemy_languages") - create_table "alchemy_languages" do |t| - t.string "name" - t.string "language_code" - t.string "frontpage_name" - t.string "page_layout", default: "intro" - t.boolean "public", default: false - t.timestamps - t.references "creator" - t.references "updater" - t.boolean "default", default: false - t.string "country_code", default: "", null: false - t.references "site", null: false - t.string "locale" - t.index ["language_code", "country_code"], name: "index_alchemy_languages_on_language_code_and_country_code" - t.index ["language_code"], name: "index_alchemy_languages_on_language_code" - end - end - - unless table_exists?("alchemy_legacy_page_urls") - create_table "alchemy_legacy_page_urls" do |t| - t.string "urlname", null: false - t.references "page", null: false - t.timestamps - t.index ["urlname"], name: "index_alchemy_legacy_page_urls_on_urlname" - end - end - - unless table_exists?("alchemy_nodes") - create_table "alchemy_nodes" do |t| - t.string "name" - t.string "title" - t.string "url" - t.boolean "nofollow", default: false, null: false - t.boolean "external", default: false, null: false - t.boolean "folded", default: false, null: false - t.references "parent" - t.integer "lft", null: false - t.integer "rgt", null: false - t.integer "depth", default: 0, null: false - t.references "page" - t.references "language", null: false - t.references "creator" - t.references "updater" - t.timestamps - t.references "site", null: false - t.index ["lft"], name: "index_alchemy_nodes_on_lft" - t.index ["rgt"], name: "index_alchemy_nodes_on_rgt" - end - end - - unless table_exists?("alchemy_pages") - create_table "alchemy_pages" do |t| - t.string "name" - t.string "urlname" - t.string "title" - t.string "language_code" - t.boolean "language_root" - t.string "page_layout" - t.text "meta_keywords" - t.text "meta_description" - t.integer "lft" - t.integer "rgt" - t.references "parent", index: false - t.integer "depth" - t.boolean "visible", default: false - t.integer "locked_by" - t.boolean "restricted", default: false - t.boolean "robot_index", default: true - t.boolean "robot_follow", default: true - t.boolean "sitemap", default: true - t.boolean "layoutpage", default: false - t.timestamps - t.references "creator" - t.references "updater" - t.references "language" - t.datetime "published_at" - t.datetime "public_on" - t.datetime "public_until" - t.datetime "locked_at" - t.index ["locked_at", "locked_by"], name: "index_alchemy_pages_on_locked_at_and_locked_by" - t.index ["parent_id", "lft"], name: "index_pages_on_parent_id_and_lft" - t.index ["public_on", "public_until"], name: "index_alchemy_pages_on_public_on_and_public_until" - t.index ["rgt"], name: "index_alchemy_pages_on_rgt" - t.index ["urlname"], name: "index_pages_on_urlname" - end - end - - unless table_exists?("alchemy_pictures") - create_table "alchemy_pictures" do |t| - t.string "name" - t.string "image_file_name" - t.integer "image_file_width" - t.integer "image_file_height" - t.timestamps - t.references "creator" - t.references "updater" - t.string "upload_hash" - t.string "image_file_uid" - t.integer "image_file_size" - t.string "image_file_format" - end - end - - unless table_exists?("alchemy_sites") - create_table "alchemy_sites" do |t| - t.string "host" - t.string "name" - t.timestamps - t.boolean "public", default: false - t.text "aliases" - t.boolean "redirect_to_primary_host" - t.index ["host", "public"], name: "alchemy_sites_public_hosts_idx" - t.index ["host"], name: "index_alchemy_sites_on_host" - end - end - - unless foreign_key_exists?("alchemy_elements", column: "page_id") - add_foreign_key "alchemy_elements", "alchemy_pages", column: "page_id", on_update: :cascade, on_delete: :cascade - end - - unless foreign_key_exists?("alchemy_nodes", column: "language_id") - add_foreign_key "alchemy_nodes", "alchemy_languages", column: "language_id" - end - - unless foreign_key_exists?("alchemy_nodes", column: "page_id") - add_foreign_key "alchemy_nodes", "alchemy_pages", column: "page_id", on_delete: :cascade - end - - unless foreign_key_exists?("alchemy_nodes", column: "site_id") - add_foreign_key "alchemy_nodes", "alchemy_sites", column: "site_id", on_delete: :cascade - end - end - - def down - drop_table "alchemy_attachments" if table_exists?("alchemy_attachments") - drop_table "alchemy_elements" if table_exists?("alchemy_elements") - drop_table "alchemy_elements_alchemy_pages" if table_exists?("alchemy_elements_alchemy_pages") - drop_table "alchemy_folded_pages" if table_exists?("alchemy_folded_pages") - drop_table "alchemy_languages" if table_exists?("alchemy_languages") - drop_table "alchemy_legacy_page_urls" if table_exists?("alchemy_legacy_page_urls") - drop_table "alchemy_nodes" if table_exists?("alchemy_nodes") - drop_table "alchemy_pages" if table_exists?("alchemy_pages") - drop_table "alchemy_pictures" if table_exists?("alchemy_pictures") - drop_table "alchemy_sites" if table_exists?("alchemy_sites") - end -end diff --git a/spec/dummy/db/migrate/20230119091718_remove_site_id_from_nodes.alchemy.rb b/spec/dummy/db/migrate/20230119091718_remove_site_id_from_nodes.alchemy.rb deleted file mode 100644 index 59564ec617..0000000000 --- a/spec/dummy/db/migrate/20230119091718_remove_site_id_from_nodes.alchemy.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true -# This migration comes from alchemy (originally 20200504210159) -class RemoveSiteIdFromNodes < ActiveRecord::Migration[6.0] - def up - remove_foreign_key :alchemy_nodes, :alchemy_sites - remove_index :alchemy_nodes, :site_id - remove_column :alchemy_nodes, :site_id, :integer, null: false - end - - def down - add_column :alchemy_nodes, :site_id, :integer, null: true - sql = <<~SQL - UPDATE alchemy_nodes - SET site_id = ( - SELECT alchemy_languages.site_id FROM alchemy_languages WHERE alchemy_nodes.language_id = alchemy_languages.id - ) WHERE - EXISTS ( - SELECT * - FROM alchemy_languages - WHERE alchemy_languages.id = alchemy_nodes.language_id - ); - SQL - - connection.execute(sql) - change_column :alchemy_nodes, :site_id, :integer, null: false - add_index :alchemy_nodes, :site_id - add_foreign_key :alchemy_nodes, :alchemy_sites, column: :site_id - end -end diff --git a/spec/dummy/db/migrate/20230119091719_add_language_id_foreign_key_to_alchemy_pages.alchemy.rb b/spec/dummy/db/migrate/20230119091719_add_language_id_foreign_key_to_alchemy_pages.alchemy.rb deleted file mode 100644 index 01cb10ef48..0000000000 --- a/spec/dummy/db/migrate/20230119091719_add_language_id_foreign_key_to_alchemy_pages.alchemy.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -# This migration comes from alchemy (originally 20200505215518) -class AddLanguageIdForeignKeyToAlchemyPages < ActiveRecord::Migration[6.0] - def change - add_foreign_key :alchemy_pages, :alchemy_languages, column: :language_id - change_column_null :alchemy_pages, :language_id, false, Alchemy::Language.default&.id - end -end diff --git a/spec/dummy/db/migrate/20230119091720_add_menu_type_to_alchemy_nodes.alchemy.rb b/spec/dummy/db/migrate/20230119091720_add_menu_type_to_alchemy_nodes.alchemy.rb deleted file mode 100644 index 9e98022898..0000000000 --- a/spec/dummy/db/migrate/20230119091720_add_menu_type_to_alchemy_nodes.alchemy.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true -# This migration comes from alchemy (originally 20200511113603) -class AddMenuTypeToAlchemyNodes < ActiveRecord::Migration[6.0] - class LocalNode < ActiveRecord::Base - self.table_name = :alchemy_nodes - acts_as_nested_set scope: :language_id - - def self.root_for(node) - return node if node.parent_id.nil? - - root_for(node.parent) - end - end - - def up - add_column :alchemy_nodes, :menu_type, :string - LocalNode.all.each do |node| - root = LocalNode.root_for(node) - menu_type = root.name.parameterize.underscore - node.update(menu_type: menu_type) - end - change_column_null :alchemy_nodes, :menu_type, false - end - - def down - remove_column :alchemy_nodes, :menu_type - end -end diff --git a/spec/dummy/db/migrate/20230119091721_make_page_layoutpage_null_false.alchemy.rb b/spec/dummy/db/migrate/20230119091721_make_page_layoutpage_null_false.alchemy.rb deleted file mode 100644 index c96ca75062..0000000000 --- a/spec/dummy/db/migrate/20230119091721_make_page_layoutpage_null_false.alchemy.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true -# This migration comes from alchemy (originally 20200514091507) -class MakePageLayoutpageNullFalse < ActiveRecord::Migration[6.0] - def change - change_column_null :alchemy_pages, :layoutpage, false, false - end -end diff --git a/spec/dummy/db/migrate/20230119091722_remove_visible_from_alchemy_pages.alchemy.rb b/spec/dummy/db/migrate/20230119091722_remove_visible_from_alchemy_pages.alchemy.rb deleted file mode 100644 index 31dd81fb51..0000000000 --- a/spec/dummy/db/migrate/20230119091722_remove_visible_from_alchemy_pages.alchemy.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true -# This migration comes from alchemy (originally 20200519073500) -class RemoveVisibleFromAlchemyPages < ActiveRecord::Migration[6.0] - class LocalPage < ActiveRecord::Base - self.table_name = "alchemy_pages" - - scope :invisible, -> { where(visible: [false, nil]) } - scope :contentpages, -> { where(layoutpage: [false, nil]) } - end - - def up - if LocalPage.invisible.contentpages.where.not(parent_id: nil).any? - abort "You have invisible pages in your database! " \ - "Please re-structure your page tree before running this migration. " \ - "You might also downgrade to Alchemy 4.6 and " \ - "run the `alchemy:upgrade:4.6:restructure_page_tree` rake task." - end - - remove_column :alchemy_pages, :visible - end - - def down - add_column :alchemy_pages, :visible, :boolean, default: false - end -end diff --git a/spec/dummy/db/migrate/20230119091723_create_alchemy_picture_thumbs.alchemy.rb b/spec/dummy/db/migrate/20230119091723_create_alchemy_picture_thumbs.alchemy.rb deleted file mode 100644 index 08e2235d73..0000000000 --- a/spec/dummy/db/migrate/20230119091723_create_alchemy_picture_thumbs.alchemy.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -# This migration comes from alchemy (originally 20200617110713) -class CreateAlchemyPictureThumbs < ActiveRecord::Migration[6.0] - def up - return if table_exists?(:alchemy_picture_thumbs) - - create_table :alchemy_picture_thumbs do |t| - t.references :picture, foreign_key: { to_table: :alchemy_pictures }, null: false - t.string :signature, null: false - t.text :uid, null: false - end - add_index :alchemy_picture_thumbs, :signature, unique: true - end - - def down - return unless table_exists?(:alchemy_picture_thumbs) - - remove_foreign_key :alchemy_picture_thumbs, :alchemy_pictures, column: :picture_id - remove_index :alchemy_picture_thumbs, :signature - drop_table :alchemy_picture_thumbs - end -end diff --git a/spec/dummy/db/migrate/20230119091724_remove_tri_state_booleans.alchemy.rb b/spec/dummy/db/migrate/20230119091724_remove_tri_state_booleans.alchemy.rb deleted file mode 100644 index e3e7293190..0000000000 --- a/spec/dummy/db/migrate/20230119091724_remove_tri_state_booleans.alchemy.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -# This migration comes from alchemy (originally 20200907111332) -class RemoveTriStateBooleans < ActiveRecord::Migration[6.0] - def change - change_column_null :alchemy_elements, :public, false, false - change_column_default :alchemy_elements, :public, true - - change_column_null :alchemy_elements, :folded, false - change_column_null :alchemy_elements, :unique, false - - change_column_null :alchemy_folded_pages, :folded, false - - change_column_null :alchemy_languages, :public, false - change_column_null :alchemy_languages, :default, false - - change_column_null :alchemy_pages, :language_root, false, false - change_column_default :alchemy_pages, :language_root, false - - change_column_null :alchemy_pages, :restricted, false - change_column_null :alchemy_pages, :robot_index, false - change_column_null :alchemy_pages, :robot_follow, false - change_column_null :alchemy_pages, :sitemap, false - - change_column_null :alchemy_sites, :public, false - change_column_null :alchemy_sites, :redirect_to_primary_host, false, false - change_column_default :alchemy_sites, :redirect_to_primary_host, false - end -end diff --git a/spec/dummy/db/migrate/20230119091725_create_page_versions.alchemy.rb b/spec/dummy/db/migrate/20230119091725_create_page_versions.alchemy.rb deleted file mode 100644 index aac2252468..0000000000 --- a/spec/dummy/db/migrate/20230119091725_create_page_versions.alchemy.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -# This migration comes from alchemy (originally 20201207131309) -class CreatePageVersions < ActiveRecord::Migration[6.0] - def change - create_table :alchemy_page_versions do |t| - t.references :page, - null: false, - index: true, - foreign_key: { - to_table: :alchemy_pages, - on_delete: :cascade, - } - t.datetime :public_on - t.datetime :public_until - t.index [:public_on, :public_until] - t.timestamps - end - end -end diff --git a/spec/dummy/db/migrate/20230119091726_add_page_version_id_to_alchemy_elements.alchemy.rb b/spec/dummy/db/migrate/20230119091726_add_page_version_id_to_alchemy_elements.alchemy.rb deleted file mode 100644 index fe63be1735..0000000000 --- a/spec/dummy/db/migrate/20230119091726_add_page_version_id_to_alchemy_elements.alchemy.rb +++ /dev/null @@ -1,77 +0,0 @@ -# frozen_string_literal: true - -# This migration comes from alchemy (originally 20201207135820) -class AddPageVersionIdToAlchemyElements < ActiveRecord::Migration[6.0] - class LocalPage < ActiveRecord::Base - self.table_name = :alchemy_pages - has_many :elements, class_name: "LocalElement", inverse_of: :page - has_many :versions, class_name: "LocalVersion", inverse_of: :page, foreign_key: :page_id - end - - class LocalVersion < ActiveRecord::Base - self.table_name = :alchemy_page_versions - belongs_to :page, class_name: "LocalPage", inverse_of: :versions - has_many :elements, class_name: "LocalElement", inverse_of: :versions - end - - class LocalElement < ActiveRecord::Base - self.table_name = :alchemy_elements - belongs_to :page, class_name: "LocalPage", inverse_of: :elements - belongs_to :page_version, class_name: "LocalVersion", inverse_of: :elements - end - - def change - add_reference :alchemy_elements, :page_version, - index: false, - foreign_key: { - to_table: :alchemy_page_versions, - on_delete: :cascade, - } - add_index :alchemy_elements, [:page_version_id, :parent_element_id], - name: "idx_alchemy_elements_on_page_version_id_and_parent_element_id" - add_index :alchemy_elements, [:page_version_id, :position], - name: "idx_alchemy_elements_on_page_version_id_and_position" - - # Add a page version for each page so we can add a not null constraint - reversible do |dir| - dir.up do - say_with_time "Create draft version for each page." do - LocalPage.find_each do |page| - next if page.versions.any? - - page.versions.create!.tap do |version| - Alchemy::Element.where(page_id: page.id).update_all(page_version_id: version.id) - end - end - LocalVersion.count - end - end - end - - change_column_null :alchemy_elements, :page_version_id, false - - # Remove the existing page relation - remove_reference :alchemy_elements, :page, - null: false, - index: false, - foreign_key: { - to_table: :alchemy_pages, - on_delete: :cascade, - on_update: :cascade, - } - if index_exists? :alchemy_elements, - :parent_element_id, - name: "index_alchemy_elements_on_page_id_and_parent_element_id" - remove_index :alchemy_elements, - column: [:parent_element_id], - name: "index_alchemy_elements_on_page_id_and_parent_element_id" - end - if index_exists? :alchemy_elements, - :position, - name: "index_elements_on_page_id_and_position" - remove_index :alchemy_elements, - column: [:position], - name: "index_elements_on_page_id_and_position" - end - end -end diff --git a/spec/dummy/db/migrate/20230119091727_rename_public_on_and_public_until_on_alchemy_pages.alchemy.rb b/spec/dummy/db/migrate/20230119091727_rename_public_on_and_public_until_on_alchemy_pages.alchemy.rb deleted file mode 100644 index ff8c1df65e..0000000000 --- a/spec/dummy/db/migrate/20230119091727_rename_public_on_and_public_until_on_alchemy_pages.alchemy.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -# This migration comes from alchemy (originally 20210205143548) -class RenamePublicOnAndPublicUntilOnAlchemyPages < ActiveRecord::Migration[6.0] - def change - remove_index :alchemy_pages, column: [:public_on, :public_until], - name: "index_alchemy_pages_on_public_on_and_public_until" - rename_column :alchemy_pages, :public_on, :legacy_public_on - rename_column :alchemy_pages, :public_until, :legacy_public_until - end -end diff --git a/spec/dummy/db/migrate/20230119091728_create_alchemy_ingredients.alchemy.rb b/spec/dummy/db/migrate/20230119091728_create_alchemy_ingredients.alchemy.rb deleted file mode 100644 index 19d40e5413..0000000000 --- a/spec/dummy/db/migrate/20230119091728_create_alchemy_ingredients.alchemy.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -# This migration comes from alchemy (originally 20210508091432) -class CreateAlchemyIngredients < ActiveRecord::Migration[6.0] - def change - create_table :alchemy_ingredients do |t| - t.references :element, null: false, foreign_key: { to_table: :alchemy_elements, on_delete: :cascade } - t.string :type, index: true, null: false - t.string :role, null: false - t.text :value - if ActiveRecord::Migration.connection.adapter_name.match?(/postgres/i) - t.jsonb :data, default: {} - else - t.json :data - end - t.belongs_to :related_object, null: true, polymorphic: true, index: false - t.index [:element_id, :role], unique: true - t.index [:related_object_id, :related_object_type], name: "idx_alchemy_ingredient_relation" - - t.timestamps - end - end -end diff --git a/spec/dummy/db/migrate/20230119091729_restrict_on_delete_page_id_foreign_key_from_alchemy_nodes.alchemy.rb b/spec/dummy/db/migrate/20230119091729_restrict_on_delete_page_id_foreign_key_from_alchemy_nodes.alchemy.rb deleted file mode 100644 index ab4a5f553f..0000000000 --- a/spec/dummy/db/migrate/20230119091729_restrict_on_delete_page_id_foreign_key_from_alchemy_nodes.alchemy.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -# This migration comes from alchemy (originally 20220514072456) -class RestrictOnDeletePageIdForeignKeyFromAlchemyNodes < ActiveRecord::Migration[6.0] - def up - remove_foreign_key :alchemy_nodes, :alchemy_pages - add_foreign_key :alchemy_nodes, :alchemy_pages, column: :page_id, on_delete: :restrict - end - - def down - remove_foreign_key :alchemy_nodes, :alchemy_pages - add_foreign_key :alchemy_nodes, :alchemy_pages, column: :page_id, on_delete: :cascade - end -end diff --git a/spec/dummy/db/migrate/20230122210804_alchemy_six_point_one.alchemy.rb b/spec/dummy/db/migrate/20230122210804_alchemy_six_point_one.alchemy.rb new file mode 100644 index 0000000000..e88ed0437e --- /dev/null +++ b/spec/dummy/db/migrate/20230122210804_alchemy_six_point_one.alchemy.rb @@ -0,0 +1,251 @@ +# frozen_string_literal: true + +# This migration comes from alchemy (originally 20230121212637) +class AlchemySixPointOne < ActiveRecord::Migration[ActiveRecord::Migration.current_version] + def up + unless table_exists?("alchemy_attachments") + create_table "alchemy_attachments" do |t| + t.string "name" + t.string "file_name" + t.string "file_mime_type" + t.integer "file_size" + t.integer "creator_id" + t.integer "updater_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "file_uid" + t.index ["creator_id"], name: "index_alchemy_attachments_on_creator_id" + t.index ["file_uid"], name: "index_alchemy_attachments_on_file_uid" + t.index ["updater_id"], name: "index_alchemy_attachments_on_updater_id" + end + end + + unless table_exists?("alchemy_elements_alchemy_pages") + create_table "alchemy_elements_alchemy_pages", id: false do |t| + t.integer "element_id" + t.integer "page_id" + t.index ["element_id"], name: "index_alchemy_elements_alchemy_pages_on_element_id" + t.index ["page_id"], name: "index_alchemy_elements_alchemy_pages_on_page_id" + end + end + + unless table_exists?("alchemy_folded_pages") + create_table "alchemy_folded_pages" do |t| + t.integer "page_id", null: false + t.integer "user_id", null: false + t.boolean "folded", default: false, null: false + t.index ["page_id", "user_id"], name: "index_alchemy_folded_pages_on_page_id_and_user_id", unique: true + end + end + + unless table_exists?("alchemy_sites") + create_table "alchemy_sites" do |t| + t.string "host" + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "public", default: false, null: false + t.text "aliases" + t.boolean "redirect_to_primary_host", default: false, null: false + t.index ["host", "public"], name: "alchemy_sites_public_hosts_idx" + t.index ["host"], name: "index_alchemy_sites_on_host" + end + end + + unless table_exists?("alchemy_languages") + create_table "alchemy_languages" do |t| + t.string "name" + t.string "language_code" + t.string "frontpage_name" + t.string "page_layout", default: "intro" + t.boolean "public", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "creator_id" + t.integer "updater_id" + t.boolean "default", default: false, null: false + t.string "country_code", default: "", null: false + t.references "site", null: false, foreign_key: { to_table: :alchemy_sites } + t.string "locale" + t.index ["creator_id"], name: "index_alchemy_languages_on_creator_id" + t.index ["language_code", "country_code"], name: "index_alchemy_languages_on_language_code_and_country_code" + t.index ["language_code"], name: "index_alchemy_languages_on_language_code" + t.index ["updater_id"], name: "index_alchemy_languages_on_updater_id" + end + end + + unless table_exists?("alchemy_legacy_page_urls") + create_table "alchemy_legacy_page_urls" do |t| + t.string "urlname", null: false + t.integer "page_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["page_id"], name: "index_alchemy_legacy_page_urls_on_page_id" + t.index ["urlname"], name: "index_alchemy_legacy_page_urls_on_urlname" + end + end + + unless table_exists?("alchemy_pages") + create_table "alchemy_pages" do |t| + t.string "name" + t.string "urlname" + t.string "title" + t.string "language_code" + t.boolean "language_root", default: false, null: false + t.string "page_layout" + t.text "meta_keywords" + t.text "meta_description" + t.integer "lft" + t.integer "rgt" + t.integer "parent_id" + t.integer "depth" + t.integer "locked_by" + t.boolean "restricted", default: false, null: false + t.boolean "robot_index", default: true, null: false + t.boolean "robot_follow", default: true, null: false + t.boolean "sitemap", default: true, null: false + t.boolean "layoutpage", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "creator_id" + t.integer "updater_id" + t.references "language", null: false, foreign_key: { to_table: :alchemy_languages } + t.datetime "published_at", precision: nil + t.datetime "legacy_public_on", precision: nil + t.datetime "legacy_public_until", precision: nil + t.datetime "locked_at", precision: nil + t.index ["creator_id"], name: "index_alchemy_pages_on_creator_id" + t.index ["locked_at", "locked_by"], name: "index_alchemy_pages_on_locked_at_and_locked_by" + t.index ["parent_id", "lft"], name: "index_pages_on_parent_id_and_lft" + t.index ["rgt"], name: "index_alchemy_pages_on_rgt" + t.index ["updater_id"], name: "index_alchemy_pages_on_updater_id" + t.index ["urlname"], name: "index_pages_on_urlname" + end + end + + unless table_exists?("alchemy_page_versions") + create_table "alchemy_page_versions" do |t| + t.references "page", null: false, foreign_key: { to_table: :alchemy_pages, on_delete: :cascade } + t.datetime "public_on", precision: nil + t.datetime "public_until", precision: nil + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["public_on", "public_until"], name: "index_alchemy_page_versions_on_public_on_and_public_until" + end + end + + unless table_exists?("alchemy_elements") + create_table "alchemy_elements" do |t| + t.string "name" + t.integer "position" + t.boolean "public", default: true, null: false + t.boolean "folded", default: false, null: false + t.boolean "unique", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "creator_id" + t.integer "updater_id" + t.integer "parent_element_id" + t.boolean "fixed", default: false, null: false + t.references "page_version", null: false, foreign_key: { to_table: :alchemy_page_versions, on_delete: :cascade } + t.index ["creator_id"], name: "index_alchemy_elements_on_creator_id" + t.index ["fixed"], name: "index_alchemy_elements_on_fixed" + t.index ["page_version_id", "parent_element_id"], name: "idx_alchemy_elements_on_page_version_id_and_parent_element_id" + t.index ["page_version_id", "position"], name: "idx_alchemy_elements_on_page_version_id_and_position" + t.index ["updater_id"], name: "index_alchemy_elements_on_updater_id" + end + end + + unless table_exists?("alchemy_ingredients") + create_table "alchemy_ingredients" do |t| + t.references "element", null: false, foreign_key: { to_table: :alchemy_elements, on_delete: :cascade } + t.string "type", null: false + t.string "role", null: false + t.text "value" + if ActiveRecord::Migration.connection.adapter_name.match?(/postgres/i) + t.jsonb :data, default: {} + else + t.json :data + end + t.string "related_object_type" + t.integer "related_object_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["element_id", "role"], name: "index_alchemy_ingredients_on_element_id_and_role", unique: true + t.index ["related_object_id", "related_object_type"], name: "idx_alchemy_ingredient_relation" + t.index ["type"], name: "index_alchemy_ingredients_on_type" + end + end + + unless table_exists?("alchemy_nodes") + create_table "alchemy_nodes" do |t| + t.string "name" + t.string "title" + t.string "url" + t.boolean "nofollow", default: false, null: false + t.boolean "external", default: false, null: false + t.boolean "folded", default: false, null: false + t.integer "parent_id" + t.integer "lft", null: false + t.integer "rgt", null: false + t.integer "depth", default: 0, null: false + t.references "page", foreign_key: { to_table: :alchemy_pages, on_delete: :restrict } + t.references "language", null: false, foreign_key: { to_table: :alchemy_languages } + t.integer "creator_id" + t.integer "updater_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "menu_type", null: false + t.index ["creator_id"], name: "index_alchemy_nodes_on_creator_id" + t.index ["lft"], name: "index_alchemy_nodes_on_lft" + t.index ["parent_id"], name: "index_alchemy_nodes_on_parent_id" + t.index ["rgt"], name: "index_alchemy_nodes_on_rgt" + t.index ["updater_id"], name: "index_alchemy_nodes_on_updater_id" + end + end + + unless table_exists?("alchemy_pictures") + create_table "alchemy_pictures" do |t| + t.string "name" + t.string "image_file_name" + t.integer "image_file_width" + t.integer "image_file_height" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "creator_id" + t.integer "updater_id" + t.string "upload_hash" + t.string "image_file_uid" + t.integer "image_file_size" + t.string "image_file_format" + t.index ["creator_id"], name: "index_alchemy_pictures_on_creator_id" + t.index ["updater_id"], name: "index_alchemy_pictures_on_updater_id" + end + end + + unless table_exists?("alchemy_picture_thumbs") + create_table "alchemy_picture_thumbs" do |t| + t.references "picture", null: false, foreign_key: { to_table: :alchemy_pictures } + t.string "signature", null: false + t.text "uid", null: false + t.index ["signature"], name: "index_alchemy_picture_thumbs_on_signature", unique: true + end + end + end + + def down + drop_table "alchemy_attachments" if table_exists?("alchemy_attachments") + drop_table "alchemy_elements" if table_exists?("alchemy_elements") + drop_table "alchemy_elements_alchemy_pages" if table_exists?("alchemy_elements_alchemy_pages") + drop_table "alchemy_folded_pages" if table_exists?("alchemy_folded_pages") + drop_table "alchemy_ingredients" if table_exists?("alchemy_ingredients") + drop_table "alchemy_languages" if table_exists?("alchemy_languages") + drop_table "alchemy_legacy_page_urls" if table_exists?("alchemy_legacy_page_urls") + drop_table "alchemy_nodes" if table_exists?("alchemy_nodes") + drop_table "alchemy_page_versions" if table_exists?("alchemy_page_versions") + drop_table "alchemy_pages" if table_exists?("alchemy_pages") + drop_table "alchemy_picture_thumbs" if table_exists?("alchemy_picture_thumbs") + drop_table "alchemy_pictures" if table_exists?("alchemy_pictures") + drop_table "alchemy_sites" if table_exists?("alchemy_sites") + end +end diff --git a/spec/dummy/db/schema.rb b/spec/dummy/db/schema.rb index d62183e5fc..611c3aa043 100644 --- a/spec/dummy/db/schema.rb +++ b/spec/dummy/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_01_19_091729) do +ActiveRecord::Schema[7.0].define(version: 2023_01_22_210804) do create_table "alchemy_attachments", force: :cascade do |t| t.string "name" t.string "file_name" @@ -43,6 +43,7 @@ t.index ["fixed"], name: "index_alchemy_elements_on_fixed" t.index ["page_version_id", "parent_element_id"], name: "idx_alchemy_elements_on_page_version_id_and_parent_element_id" t.index ["page_version_id", "position"], name: "idx_alchemy_elements_on_page_version_id_and_position" + t.index ["page_version_id"], name: "index_alchemy_elements_on_page_version_id" t.index ["updater_id"], name: "index_alchemy_elements_on_updater_id" end @@ -278,6 +279,7 @@ add_foreign_key "alchemy_elements", "alchemy_page_versions", column: "page_version_id", on_delete: :cascade add_foreign_key "alchemy_ingredients", "alchemy_elements", column: "element_id", on_delete: :cascade + add_foreign_key "alchemy_languages", "alchemy_sites", column: "site_id" add_foreign_key "alchemy_nodes", "alchemy_languages", column: "language_id" add_foreign_key "alchemy_nodes", "alchemy_pages", column: "page_id", on_delete: :restrict add_foreign_key "alchemy_page_versions", "alchemy_pages", column: "page_id", on_delete: :cascade diff --git a/spec/features/admin/edit_elements_feature_spec.rb b/spec/features/admin/edit_elements_feature_spec.rb index 125703c5fa..04bc709e22 100644 --- a/spec/features/admin/edit_elements_feature_spec.rb +++ b/spec/features/admin/edit_elements_feature_spec.rb @@ -122,7 +122,7 @@ end describe "Copy element", :js do - let!(:element) { create(:alchemy_element, page: a_page) } + let!(:element) { create(:alchemy_element, page_version: a_page.draft_version) } scenario "is possible to copy element into clipboard" do visit alchemy.admin_elements_path(page_version_id: element.page_version_id) @@ -135,7 +135,13 @@ end describe "With an element that has ingredient groups" do - let(:element) { create(:alchemy_element, page: a_page, name: "element_with_ingredient_groups") } + let(:element) do + create( + :alchemy_element, + :with_ingredients, + page_version: a_page.draft_version, + name: "element_with_ingredient_groups") + end # Need to be on page editor rather than just admin_elements in order to have JS interaction before { visit alchemy.edit_admin_page_path(element.page) } diff --git a/spec/models/alchemy/page_spec.rb b/spec/models/alchemy/page_spec.rb index e7fe248f36..b0ea4db270 100644 --- a/spec/models/alchemy/page_spec.rb +++ b/spec/models/alchemy/page_spec.rb @@ -2099,8 +2099,8 @@ def copy_children_to(new_parent) describe "#nodes" do let(:page) { create(:alchemy_page) } - let(:parent) { create(:alchemy_node, updated_at: 1.hour.ago) } - let(:node) { create(:alchemy_node, page: page, parent: parent, updated_at: 1.hour.ago) } + let(:parent) { create(:alchemy_node) } + let(:node) { create(:alchemy_node, page: page, parent: parent) } it "returns all nodes the page is attached to" do expect(page.nodes).to include(node) @@ -2109,6 +2109,11 @@ def copy_children_to(new_parent) describe "after page updates" do subject { page.update(name: "foo") } + before do + node.update_columns(updated_at: 1.hour.ago) + parent.update_columns(updated_at: 1.hour.ago) + end + it "touches all nodes and all their ancestors" do expect { subject }.to change { node.reload.updated_at }.and change { parent.reload.updated_at } end