diff options
| -rw-r--r-- | app/models/node.rb | 2 | ||||
| -rw-r--r-- | db/migrate/20260809135746_remove_external_url_from_nodes.rb | 5 | ||||
| -rw-r--r-- | db/seeds/chapters.rb | 3 | ||||
| -rw-r--r-- | lib/tasks/pages.rake | 61 | ||||
| -rw-r--r-- | test/models/node_test.rb | 1 |
5 files changed, 7 insertions, 65 deletions
diff --git a/app/models/node.rb b/app/models/node.rb index a401ed69..6fc6c3dc 100644 --- a/app/models/node.rb +++ b/app/models/node.rb | |||
| @@ -257,8 +257,6 @@ class Node < ApplicationRecord | |||
| 257 | self.slug = self.head.slug | 257 | self.slug = self.head.slug |
| 258 | end | 258 | end |
| 259 | 259 | ||
| 260 | self.external_url = self.head.external_url | ||
| 261 | |||
| 262 | if self.head.parent_node_id && self.head.parent_node_id != parent_id | 260 | if self.head.parent_node_id && self.head.parent_node_id != parent_id |
| 263 | new_parent = Node.find_by(:id => self.head.parent_node_id) | 261 | new_parent = Node.find_by(:id => self.head.parent_node_id) |
| 264 | 262 | ||
diff --git a/db/migrate/20260809135746_remove_external_url_from_nodes.rb b/db/migrate/20260809135746_remove_external_url_from_nodes.rb new file mode 100644 index 00000000..0510d053 --- /dev/null +++ b/db/migrate/20260809135746_remove_external_url_from_nodes.rb | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | class RemoveExternalUrlFromNodes < ActiveRecord::Migration[8.1] | ||
| 2 | def change | ||
| 3 | remove_column :nodes, :external_url, :string | ||
| 4 | end | ||
| 5 | end | ||
diff --git a/db/seeds/chapters.rb b/db/seeds/chapters.rb index 4d81e3cc..ba14252c 100644 --- a/db/seeds/chapters.rb +++ b/db/seeds/chapters.rb | |||
| @@ -30,12 +30,13 @@ def seed_chapter(parent_id:, slug:, tag:, title_de:, description_de:, | |||
| 30 | end | 30 | end |
| 31 | 31 | ||
| 32 | # Create node | 32 | # Create node |
| 33 | node = parent.children.create!(slug: slug, external_url: external_url) | 33 | node = parent.children.create!(slug: slug) |
| 34 | node.reload | 34 | node.reload |
| 35 | 35 | ||
| 36 | # Set up draft with German translation | 36 | # Set up draft with German translation |
| 37 | draft = node.draft | 37 | draft = node.draft |
| 38 | draft.template_name = 'chapter_detail' | 38 | draft.template_name = 'chapter_detail' |
| 39 | draft.external_url = external_url | ||
| 39 | I18n.with_locale(:de) do | 40 | I18n.with_locale(:de) do |
| 40 | draft.title = title_de | 41 | draft.title = title_de |
| 41 | draft.abstract = location || "" | 42 | draft.abstract = location || "" |
diff --git a/lib/tasks/pages.rake b/lib/tasks/pages.rake deleted file mode 100644 index ea0776b7..00000000 --- a/lib/tasks/pages.rake +++ /dev/null | |||
| @@ -1,61 +0,0 @@ | |||
| 1 | namespace :pages do | ||
| 2 | desc "Backfill pages.slug and pages.parent_node_id from each page's " \ | ||
| 3 | "node. Historical accuracy is not attempted. Every revision gets " \ | ||
| 4 | "the node's current address, which is right for head and draft and " \ | ||
| 5 | "harmless for older revisions, and avoids nil checks everywhere. " \ | ||
| 6 | "Dry run unless WRITE=1." | ||
| 7 | task :backfill_address => :environment do | ||
| 8 | write = ENV["WRITE"] == "1" | ||
| 9 | puts "DRY RUN -- nothing written. Re-run with WRITE=1." unless write | ||
| 10 | |||
| 11 | touched = 0 | ||
| 12 | Node.find_each do |node| | ||
| 13 | scope = node.pages.where("slug IS DISTINCT FROM :s OR parent_node_id IS DISTINCT FROM :p", | ||
| 14 | :s => node.slug, :p => node.parent_id) | ||
| 15 | count = scope.count | ||
| 16 | next if count.zero? | ||
| 17 | |||
| 18 | scope.update_all(:slug => node.slug, :parent_node_id => node.parent_id) if write | ||
| 19 | touched += count | ||
| 20 | end | ||
| 21 | |||
| 22 | # Autosaves carry no node_id -- has_many :pages does not cover them. | ||
| 23 | Node.where.not(:autosave_id => nil).includes(:autosave).find_each do |node| | ||
| 24 | a = node.autosave | ||
| 25 | next if a.slug == node.slug && a.parent_node_id == node.parent_id | ||
| 26 | |||
| 27 | a.update_columns(:slug => node.slug, :parent_node_id => node.parent_id) if write | ||
| 28 | touched += 1 | ||
| 29 | end | ||
| 30 | |||
| 31 | puts "#{write ? "updated" : "would update"} #{touched} pages" | ||
| 32 | end | ||
| 33 | |||
| 34 | desc "Backfill pages.external_url from each page's node." | ||
| 35 | task :backfill_external_url => :environment do | ||
| 36 | write = ENV["WRITE"] == "1" | ||
| 37 | puts "DRY RUN -- nothing written. Re-run with WRITE=1." unless write | ||
| 38 | |||
| 39 | touched = 0 | ||
| 40 | Node.where.not(:external_url => [nil, ""]).find_each do |node| | ||
| 41 | scope = node.pages.where("external_url IS DISTINCT FROM :u", :u => node.external_url) | ||
| 42 | count = scope.count | ||
| 43 | next if count.zero? | ||
| 44 | |||
| 45 | scope.update_all(:external_url => node.external_url) if write | ||
| 46 | touched += count | ||
| 47 | end | ||
| 48 | |||
| 49 | # Autosaves carry no node_id, so has_many :pages does not cover them. | ||
| 50 | Node.where.not(:autosave_id => nil).where.not(:external_url => [nil, ""]) | ||
| 51 | .includes(:autosave).find_each do |node| | ||
| 52 | a = node.autosave | ||
| 53 | next if a.nil? || a.external_url == node.external_url | ||
| 54 | |||
| 55 | a.update_columns(:external_url => node.external_url) if write | ||
| 56 | touched += 1 | ||
| 57 | end | ||
| 58 | |||
| 59 | puts "#{write ? "updated" : "would update"} #{touched} pages" | ||
| 60 | end | ||
| 61 | end | ||
diff --git a/test/models/node_test.rb b/test/models/node_test.rb index 735d2abe..39be6d32 100644 --- a/test/models/node_test.rb +++ b/test/models/node_test.rb | |||
| @@ -1077,7 +1077,6 @@ class NodeTest < ActiveSupport::TestCase | |||
| 1077 | node.draft.update!(:external_url => "https://example.org") | 1077 | node.draft.update!(:external_url => "https://example.org") |
| 1078 | node.publish_draft!(users(:aaron)) | 1078 | node.publish_draft!(users(:aaron)) |
| 1079 | 1079 | ||
| 1080 | assert_equal "https://example.org", node.reload.external_url | ||
| 1081 | assert_equal "https://example.org", node.head.external_url | 1080 | assert_equal "https://example.org", node.head.external_url |
| 1082 | end | 1081 | end |
| 1083 | 1082 | ||
