effective_pages 3.8.3 → 3.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93461d891693d48f4a9610dc33406c38620c9b8470ef64cd0953e7c31f45ef7c
4
- data.tar.gz: 9f0ae01994f41320788d6b183be99860d23a4103cdff78a8314fcf610e65b28a
3
+ metadata.gz: de13a6ce9afb0cee9e8401e076c3416a159f9a64f4a5fb7cf70c890de442263f
4
+ data.tar.gz: dfa2b67769948a6e25c5c20e3b1520260f494d0722165cfd5a78eeff1aeb3ce8
5
5
  SHA512:
6
- metadata.gz: c10f7ec96802a69effc73b984362c5147aeb1cc2f96e5a871b059542938b91de525f5cb42f06c0e58828b5eac966362f21ca8f0da0ff9dcc37b224cb05f44805
7
- data.tar.gz: 47527c78afcf1dc278acf6ddd87db09bf319f6e7d36128fbe586e2c67d822316813b13d37377806d3cf8a78bf856b49ef7aa5016fd004d7dc6c2004f640ff2d2
6
+ metadata.gz: 11295b2af4904ad5469948123e4e910302fa4e3d7c29a79b55bd4500b7456f458e31f5f389c587725a7d534a21c4e138daff27b525fae74d874c8344948cd1d7
7
+ data.tar.gz: 5e2bbcef490e3b25c6ba565fd64fab7ee4a7091377fef64ca664a4be1edfa54d64b0810c2b5005a7e33e63c04e54ff65f2955c5e705f5ec9e03bb39ff513c654
data/README.md CHANGED
@@ -6,6 +6,33 @@ Create content pages ontop of one or more templates -- just regular Rails views
6
6
 
7
7
  Use this gem to create a fully-functional CMS that provides full or restricted editing for your end users.
8
8
 
9
+ ## Upgrading to 3.9.0
10
+
11
+ Add a migration
12
+
13
+ ```
14
+ class UpgradeEffectivePagesThreeNine < ActiveRecord::Migration[7.0]
15
+ def change
16
+ # Add a counter cache
17
+ add_column :pages, :menu_children_count, :integer, default: 0
18
+ end
19
+ end
20
+ ```
21
+
22
+ Run a one time script
23
+
24
+ ```
25
+ # rake upgrade_effective_pages_to_three_nine
26
+ task upgrade_effective_pages_to_three_nine: :environment do
27
+ puts "Starting effective pages 3.9.0 upgrade"
28
+
29
+ Effective::Page.where(menu_children_count: 0).find_each do |page|
30
+ Effective::Page.reset_counters(page.slug, :menu_children)
31
+ end
32
+
33
+ puts 'All done'
34
+ end
35
+ ```
9
36
 
10
37
  ## effective_pages 3.0
11
38
 
@@ -3,7 +3,7 @@ module Effective
3
3
  include Effective::CrudController
4
4
 
5
5
  def show
6
- @pages = Effective::Page.all
6
+ @pages = Effective::Page.deep.all
7
7
  @pages = @pages.published unless EffectiveResources.authorized?(self, :admin, :effective_pages)
8
8
 
9
9
  @page = @pages.find(params[:id])
@@ -14,6 +14,8 @@ class EffectivePagesMenuDatatable < Effective::Datatable
14
14
  col :menu_url, label: 'Redirect Url'
15
15
  col :menu_position, label: 'Position', visible: false
16
16
 
17
+ col :menu_children_count, label: 'Children Count', visible: false
18
+
17
19
  # We only support depth 2 and 3.
18
20
  col :menu_children, label: 'Children' do |page|
19
21
  page.menu_children.group_by { |child| child.menu_group.presence }.values.flatten.map do |child|
@@ -28,7 +28,7 @@ module EffectiveMenusHelper
28
28
  (
29
29
  [content_tag(:li, link_to(root, root_path, title: root), class: 'breadcrumb-item')] +
30
30
  parents.map do |page|
31
- next if page.menu_root_with_children? # Don't show root pages becaues they have no content
31
+ next if page.menu_root_with_children? # Don't show root pages because they have no content
32
32
 
33
33
  url = (page.menu_url.presence || effective_pages.page_path(page))
34
34
  content_tag(:li, link_to(page, url, title: page.title), class: 'breadcrumb-item')
@@ -60,7 +60,7 @@ module EffectiveMenusHelper
60
60
  def admin_menu_parent_collection(page = nil)
61
61
  raise('expected a page') if page.present? && !page.kind_of?(Effective::Page)
62
62
 
63
- pages = Effective::Page.menuable.root_level.where.not(id: page)
63
+ pages = Effective::Page.deep_menuable.menuable.root_level.where.not(id: page)
64
64
 
65
65
  if EffectivePages.max_menu_depth == 2
66
66
  # You can only select root level pages
@@ -8,9 +8,9 @@ module EffectivePageBannersHelper
8
8
  return unless page.banner? || EffectivePages.banners_force_randomize
9
9
 
10
10
  # Always return a random banner if config.banners_force_randomize
11
- page_banner = Effective::PageBanner.random.first if EffectivePages.banners_force_randomize
11
+ page_banner = Effective::PageBanner.deep.random.first if EffectivePages.banners_force_randomize
12
12
  page_banner ||= page.page_banner if page.banner? && page.page_banner.present?
13
- page_banner ||= Effective::PageBanner.random.first if page.banner? && page.banner_random?
13
+ page_banner ||= Effective::PageBanner.deep.random.first if page.banner? && page.banner_random?
14
14
 
15
15
  return if page_banner.blank?
16
16
 
@@ -14,7 +14,7 @@ module Effective
14
14
  belongs_to :page_banner, optional: true
15
15
 
16
16
  # These parent / children are for the menu as well
17
- belongs_to :menu_parent, class_name: 'Effective::Page', optional: true
17
+ belongs_to :menu_parent, class_name: 'Effective::Page', optional: true, touch: true, counter_cache: :menu_children_count
18
18
 
19
19
  has_many :menu_children, -> { Effective::Page.menuable }, class_name: 'Effective::Page',
20
20
  foreign_key: :menu_parent_id, inverse_of: :menu_parent
@@ -47,6 +47,8 @@ module Effective
47
47
  menu_url :string # Redirect to this url instead of the page url
48
48
  menu_position :integer # Position in the menu
49
49
 
50
+ menu_children_count :integer # Counter cache
51
+
50
52
  # Banners
51
53
  banner :boolean # Should we display a banner?
52
54
  banner_random :boolean # Display a random banner
@@ -58,7 +60,14 @@ module Effective
58
60
  timestamps
59
61
  end
60
62
 
61
- scope :deep, -> { includes(:page_banner, :menu_parent, menu_children: :menu_parent) }
63
+ scope :deep, -> {
64
+ base = includes(:page_banner, :tags, :rich_texts)
65
+ base = base.deep_menuable
66
+ base = base.includes(:pg_search_document) if defined?(PgSearch)
67
+ base
68
+ }
69
+
70
+ scope :deep_menuable, -> { includes(:menu_parent, menu_children: [:menu_parent, :menu_children]) }
62
71
 
63
72
  scope :draft, -> { where(draft: true) }
64
73
  scope :published, -> { where(draft: false) }
@@ -182,13 +191,21 @@ module Effective
182
191
  end
183
192
 
184
193
  def menu_parent?
185
- menu? && menu_children.to_a.present?
194
+ menu? && menu_children_present?
186
195
  end
187
196
 
188
197
  def menu_child?
189
198
  menu? && menu_parent_id.present?
190
199
  end
191
200
 
201
+ def menu_children_present?
202
+ menu_children_count > 0
203
+ end
204
+
205
+ def menu_children_blank?
206
+ menu_children_count <= 0
207
+ end
208
+
192
209
  end
193
210
 
194
211
  end
@@ -16,7 +16,11 @@ module Effective
16
16
 
17
17
  log_changes if respond_to?(:log_changes)
18
18
 
19
- scope :deep, -> { with_attached_attachment }
19
+ scope :deep, -> {
20
+ base = with_attached_attachment
21
+ base = base.includes(:pg_search_document) if defined?(PgSearch)
22
+ base
23
+ }
20
24
 
21
25
  effective_resource do
22
26
  title :string
@@ -7,14 +7,11 @@
7
7
  - next if (page.authenticate_user || page.roles.present?) && current_user.blank?
8
8
  - next if page.roles.present? && (current_user.roles & page.roles).blank?
9
9
 
10
- - menu_children = page.menu_children
11
-
12
- - if menu_children.blank?
10
+ - if page.menu_children_blank?
13
11
  = nav_link_to(page.menu_to_s, (page.menu_url.presence || effective_pages.page_path(page)))
14
-
15
- - if menu_children.present?
12
+ - else
16
13
  = nav_dropdown(page.menu_to_s, groups: true) do
17
- - menu_children.group_by { |menu| menu.menu_group.presence }.each do |menu_group, pages|
14
+ - page.menu_children.group_by { |menu| menu.menu_group.presence }.each do |menu_group, pages|
18
15
  = nav_dropdown_group(menu_group || '') do
19
16
  - pages.each do |page|
20
17
  - next unless EffectiveResources.authorized?(self, :show, page)
@@ -1,14 +1,17 @@
1
1
  - raise('expected a page') unless page.present?
2
2
 
3
- - children = page.menu_children
3
+ - children = []
4
4
 
5
- - if page.menu_children.present?
5
+ - if page.menu_children_present?
6
+ - children = page.menu_children
6
7
  = nav_link_to(page.menu_to_s, (page.menu_url.presence || effective_pages.page_path(page)))
7
8
 
8
9
  - # if this is a third depth page, show the parent and siblings
9
- - if !page.menu_children.present? && page.menu_parent.present? && page.menu_parent&.menu_children&.present? && page.menu_parent&.menu_parent.present?
10
- - children = page.menu_parent.menu_children
11
- = nav_link_to(page.menu_parent.menu_to_s, (page.menu_parent.menu_url.presence || effective_pages.page_path(page.menu_parent)))
10
+ - if page.menu_children_blank? && page.menu_parent.try(:menu_parent_id).present?
11
+ - if page.menu_parent.menu_children_present?
12
+ - page.menu_parent.try(:strict_loading!, false)
13
+ - children = page.menu_parent.menu_children
14
+ = nav_link_to(page.menu_parent.menu_to_s, (page.menu_parent.menu_url.presence || effective_pages.page_path(page.menu_parent)))
12
15
 
13
16
  - children.each do |page|
14
17
  - next unless EffectiveResources.authorized?(self, :show, page)
@@ -27,6 +27,8 @@ class CreateEffectivePages < ActiveRecord::Migration[6.0]
27
27
  t.string :menu_url
28
28
  t.integer :menu_position
29
29
 
30
+ t.integer :menu_children_count, default: 0
31
+
30
32
  t.boolean :banner, default: false
31
33
  t.boolean :banner_random, default: false
32
34
 
@@ -1,3 +1,3 @@
1
1
  module EffectivePages
2
- VERSION = '3.8.3'.freeze
2
+ VERSION = '3.9.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_pages
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.8.3
4
+ version: 3.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-28 00:00:00.000000000 Z
11
+ date: 2023-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails