From 673fca0f20e59231cdfab33dc0980ffd187c92dd Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Fri, 2 Dec 2022 18:01:28 +0100 Subject: [PATCH] same concern with better name --- app/models/communication/website/category.rb | 3 +- app/models/communication/website/page.rb | 3 +- app/models/communication/website/post.rb | 3 +- .../concerns/with_permalink_in_website.rb | 52 +++++++++++++++++++ app/models/concerns/with_website_permalink.rb | 35 ------------- .../concerns/with_website_previous_links.rb | 24 --------- app/models/university/person.rb | 3 +- 7 files changed, 56 insertions(+), 67 deletions(-) create mode 100644 app/models/concerns/with_permalink_in_website.rb delete mode 100644 app/models/concerns/with_website_permalink.rb delete mode 100644 app/models/concerns/with_website_previous_links.rb diff --git a/app/models/communication/website/category.rb b/app/models/communication/website/category.rb index 677e7f8cc..f6d210fb5 100644 --- a/app/models/communication/website/category.rb +++ b/app/models/communication/website/category.rb @@ -44,9 +44,8 @@ class Communication::Website::Category < ApplicationRecord include WithMenuItemTarget include WithSlug # We override slug_unavailable? method include WithTree + include WithPermalinkInWebsite include WithPosition - include WithWebsitePermalink - include WithWebsitePreviousLinks has_one :imported_category, class_name: 'Communication::Website::Imported::Category', diff --git a/app/models/communication/website/page.rb b/app/models/communication/website/page.rb index 3c57eba39..b07d183eb 100644 --- a/app/models/communication/website/page.rb +++ b/app/models/communication/website/page.rb @@ -53,8 +53,7 @@ class Communication::Website::Page < ApplicationRecord include WithPosition include WithTree include WithPath - include WithWebsitePermalink - include WithWebsitePreviousLinks + include WithPermalinkInWebsite has_summernote :text diff --git a/app/models/communication/website/post.rb b/app/models/communication/website/post.rb index 06f2653eb..5bebc101d 100644 --- a/app/models/communication/website/post.rb +++ b/app/models/communication/website/post.rb @@ -42,9 +42,8 @@ class Communication::Website::Post < ApplicationRecord include WithBlobs include WithBlocks include WithMenuItemTarget + include WithPermalinkInWebsite include WithSlug # We override slug_unavailable? method - include WithWebsitePermalink - include WithWebsitePreviousLinks has_summernote :text diff --git a/app/models/concerns/with_permalink_in_website.rb b/app/models/concerns/with_permalink_in_website.rb new file mode 100644 index 000000000..78e107e43 --- /dev/null +++ b/app/models/concerns/with_permalink_in_website.rb @@ -0,0 +1,52 @@ +module WithPermalinkInWebsite + extend ActiveSupport::Concern + + included do + + has_many :previous_links, + class_name: "Communication::Website::PreviousLink", + as: :about, + dependent: :destroy + + after_validation :manage_previous_links, on: [:create, :update] + + end + + def permalink_in_website(website) + computed_permalink = computed_permalink_in_website(website) + computed_permalink.present? ? Static.clean_path(computed_permalink) : nil + end + + def previous_permalink_in_website(website) + computed_permalink = previous_computed_permalink_in_website(website) + computed_permalink.present? ? Static.clean_path(computed_permalink) : nil + end + + def computed_permalink_in_website(website) + raw_permalink_in_website(website)&.gsub(':slug', self.slug) + end + + def previous_computed_permalink_in_website(website) + raw_permalink_in_website(website)&.gsub(':slug', self.slug_was) + end + + def manage_previous_links + websites_for_self.each do |website| + old_permalink = previous_permalink_in_website(website) + new_permalink = permalink_in_website(website) + + # If the object had a permalink and now is different, we create a previous link + previous_links.create(website: website, link: old_permalink) if old_permalink.present? && new_permalink != old_permalink + end + end + + protected + + def raw_permalink_in_website(website) + website.config_permalinks.permalinks_data[permalink_config_key] + end + + def permalink_config_key + raise NotImplementedError + end +end diff --git a/app/models/concerns/with_website_permalink.rb b/app/models/concerns/with_website_permalink.rb deleted file mode 100644 index 69eb50b8d..000000000 --- a/app/models/concerns/with_website_permalink.rb +++ /dev/null @@ -1,35 +0,0 @@ -module WithWebsitePermalink - extend ActiveSupport::Concern - - included do - - def permalink_in_website(website) - computed_permalink = computed_permalink_in_website(website) - computed_permalink.present? ? Static.clean_path(computed_permalink) : nil - end - - def previous_permalink_in_website(website) - computed_permalink = previous_computed_permalink_in_website(website) - computed_permalink.present? ? Static.clean_path(computed_permalink) : nil - end - - def computed_permalink_in_website(website) - raw_permalink_in_website(website)&.gsub(':slug', self.slug) - end - - def previous_computed_permalink_in_website(website) - raw_permalink_in_website(website)&.gsub(':slug', self.slug_was) - end - - protected - - def raw_permalink_in_website(website) - website.config_permalinks.permalinks_data[permalink_config_key] - end - - def permalink_config_key - raise NotImplementedError - end - - end -end diff --git a/app/models/concerns/with_website_previous_links.rb b/app/models/concerns/with_website_previous_links.rb deleted file mode 100644 index 42a343448..000000000 --- a/app/models/concerns/with_website_previous_links.rb +++ /dev/null @@ -1,24 +0,0 @@ -module WithWebsitePreviousLinks - extend ActiveSupport::Concern - - included do - - has_many :previous_links, - class_name: "Communication::Website::PreviousLink", - as: :about, - dependent: :destroy - - after_validation :manage_previous_links, on: [:create, :update] - - def manage_previous_links - websites_for_self.each do |website| - old_permalink = previous_permalink_in_website(website) - new_permalink = permalink_in_website(website) - - # If the object had a permalink and now is different, we create a previous link - previous_links.create(website: website, link: old_permalink) if old_permalink.present? && new_permalink != old_permalink - end - end - - end -end diff --git a/app/models/university/person.rb b/app/models/university/person.rb index 0585737af..7310fc80e 100644 --- a/app/models/university/person.rb +++ b/app/models/university/person.rb @@ -56,8 +56,7 @@ class University::Person < ApplicationRecord include WithPicture include WithRoles include WithBlocks - include WithWebsitePermalink - include WithWebsitePreviousLinks + include WithPermalinkInWebsite LIST_OF_ROLES = [ :administration, -- GitLab