foodsoft/plugins/wiki/app/models/page.rb
Philipp Rothmann fb2b4d8a8a chore: rubocop
chore: fix api test conventions

chore: rubocop -A spec/

chore: more rubocop -A

fix failing test

rubocop fixes

removes helper methods that are in my opinion dead code

more rubocop fixes

rubocop -a --auto-gen-config
2023-06-09 17:35:05 +02:00

86 lines
2.1 KiB
Ruby

class Page < ApplicationRecord
include ActsAsTree
belongs_to :user, foreign_key: 'updated_by'
acts_as_versioned version_column: :lock_version
self.non_versioned_columns += %w[permalink created_at title]
acts_as_tree order: 'title'
attr_accessor :old_title # Save title to create redirect page when editing title
validates_presence_of :title, :body
validates_uniqueness_of :permalink, :title
before_validation :set_permalink, on: :create
before_validation :update_permalink, on: :update
after_update :create_redirect
scope :non_redirected, -> { where(redirect: nil) }
scope :no_parent, -> { where(parent_id: nil) }
def self.permalink(title)
title.gsub(%r{[/.,;@\s]}, '_').gsub(/["']/, '')
end
def homepage?
permalink == 'Home'
end
def self.dashboard
where(permalink: 'Dashboard').first
end
def self.public_front_page
where(permalink: 'Public_frontpage').first
end
def self.welcome_mail
where(permalink: 'Welcome_mail').first
end
def set_permalink
return if title.blank?
self.permalink = Page.count == 0 ? 'Home' : Page.permalink(title)
end
def diff
current = versions.latest
old = versions.where(['page_id = ? and lock_version < ?', current.page_id,
current.lock_version]).order('lock_version DESC').first
if old
o = ''
Diffy::Diff.new(old.body, current.body).each do |line|
case line
when /^\+/ then o += "#{line.chomp}<br />" unless line.chomp == '+'
when /^-/ then o += "#{line.chomp}<br />" unless line.chomp == '-'
end
end
o
else
current.body
end
end
protected
def update_permalink
return unless changed.include?('title')
set_permalink
self.old_title = changes['title'].first # Save title for creating redirect
end
def create_redirect
return if old_title.blank?
Page.create redirect: id,
title: old_title,
body: I18n.t('model.page.redirect', title: title),
permalink: Page.permalink(old_title),
updated_by: updated_by
end
end