pages_core 3.12.7 → 3.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/app/controllers/admin/pages_controller.rb +1 -1
- data/app/controllers/admin/users_controller.rb +1 -1
- data/app/controllers/concerns/pages_core/error_reporting.rb +9 -19
- data/app/controllers/concerns/pages_core/static_cache_controller.rb +13 -2
- data/app/controllers/pages_core/attachments_controller.rb +1 -1
- data/app/controllers/pages_core/frontend/pages_controller.rb +1 -1
- data/app/controllers/pages_core/frontend_controller.rb +1 -10
- data/app/controllers/sessions_controller.rb +1 -1
- data/app/formatters/pages_core/image_embedder.rb +3 -3
- data/app/helpers/admin/pages_helper.rb +2 -2
- data/app/helpers/pages_core/admin/admin_helper.rb +1 -1
- data/app/helpers/pages_core/admin/content_tabs_helper.rb +3 -3
- data/app/helpers/pages_core/admin/form_builder.rb +1 -1
- data/app/helpers/pages_core/admin/image_uploads_helper.rb +6 -6
- data/app/helpers/pages_core/admin/labelled_field_helper.rb +1 -1
- data/app/helpers/pages_core/admin/locales_helper.rb +1 -1
- data/app/helpers/pages_core/application_helper.rb +3 -3
- data/app/helpers/pages_core/head_tags_helper.rb +8 -9
- data/app/helpers/pages_core/images_helper.rb +7 -7
- data/app/helpers/pages_core/open_graph_tags_helper.rb +2 -2
- data/app/helpers/pages_core/page_path_helper.rb +2 -2
- data/app/jobs/pages_core/autopublish_job.rb +2 -0
- data/app/models/concerns/pages_core/has_roles.rb +2 -2
- data/app/models/concerns/pages_core/page_model/dated_page.rb +1 -1
- data/app/models/concerns/pages_core/page_model/searchable.rb +1 -1
- data/app/models/concerns/pages_core/page_model/templateable.rb +22 -0
- data/app/models/concerns/pages_core/searchable_document.rb +3 -3
- data/app/models/page.rb +1 -1
- data/app/models/page_builder.rb +9 -9
- data/app/models/page_exporter.rb +1 -1
- data/app/models/page_image.rb +1 -1
- data/app/models/page_path.rb +3 -3
- data/app/models/search_document.rb +3 -3
- data/app/models/tag.rb +1 -1
- data/app/services/pages_core/create_user_service.rb +2 -2
- data/app/services/pages_core/destroy_invite_service.rb +2 -2
- data/app/services/pages_core/invite_service.rb +2 -2
- data/app/views/admin/pages/_edit_content.html.erb +1 -1
- data/app/views/admin/pages/_form.html.erb +12 -0
- data/db/migrate/20111219033112_create_pages_tables.rb +0 -14
- data/lib/pages_core/cache_sweeper.rb +3 -3
- data/lib/pages_core/extensions/string_extensions.rb +1 -1
- data/lib/pages_core/templates/configuration.rb +1 -1
- data/lib/pages_core/templates/template_configuration.rb +1 -1
- data/lib/pages_core.rb +1 -2
- data/lib/rails/generators/pages_core/install/install_generator.rb +0 -15
- data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +1 -1
- metadata +4 -49
- data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +0 -3
- data/lib/rails/generators/pages_core/install/templates/delayed_job +0 -7
- data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd2414153112fe73c09225371f24be7c61cb4cf9ed3d62a633ec6cc47b10411a
|
4
|
+
data.tar.gz: 3b94c430720c0d75000065047bbc407b59a24e0931e1a39a901107933603d597
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4648cba128ccec11c3dd5d34485c20d2e33ed02361be1007152e66267166d7b557f87bcd02320120e99e2b3b7510fbd1b242ed32a1b275319cdde6944be62ba
|
7
|
+
data.tar.gz: 16090abcbd624dc65a37de898b8f0c6792d52c9a05b4a9cc1b9a06da3ce0b87dd379df7efad3bf67d23f6d61ccd4b450f7f33e6f0f77cb049cbf7f8c5ff044c9
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.13.0
|
@@ -64,7 +64,7 @@ module Admin
|
|
64
64
|
|
65
65
|
def move
|
66
66
|
parent = params[:parent_id] ? Page.find(params[:parent_id]) : nil
|
67
|
-
@page.update(parent
|
67
|
+
@page.update(parent:, position: params[:position])
|
68
68
|
respond_with_page(@page) { redirect_to admin_pages_url(content_locale) }
|
69
69
|
end
|
70
70
|
|
@@ -5,34 +5,24 @@ module PagesCore
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
before_action :
|
8
|
+
before_action :configure_sentry_scope
|
9
9
|
end
|
10
10
|
|
11
11
|
protected
|
12
12
|
|
13
|
-
def
|
14
|
-
return if Rails.env.test?
|
13
|
+
def configure_sentry_scope
|
14
|
+
return if Rails.env.test? || !Object.const_defined?("Sentry")
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
Sentry.set_extras(params: params.to_unsafe_h)
|
20
|
-
elsif Object.const_defined?("Raven")
|
21
|
-
configure_legacy_sentry_context
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def configure_legacy_sentry_context
|
26
|
-
Raven.user_context(current_user_context)
|
27
|
-
Raven.tags_context(locale: params[:locale] || I18n.default_locale.to_s)
|
28
|
-
Raven.extra_context(params: params.to_unsafe_h)
|
16
|
+
Sentry.set_context("params", params.to_unsafe_h)
|
17
|
+
Sentry.set_tags(locale: params[:locale] || I18n.default_locale.to_s)
|
18
|
+
Sentry.set_user(current_user_context)
|
29
19
|
end
|
30
20
|
|
31
21
|
def current_user_context
|
32
|
-
return {
|
22
|
+
return {} unless logged_in?
|
33
23
|
|
34
|
-
{
|
35
|
-
|
24
|
+
{ id: current_user.id,
|
25
|
+
email: current_user.email }
|
36
26
|
end
|
37
27
|
end
|
38
28
|
end
|
@@ -4,10 +4,13 @@ module PagesCore
|
|
4
4
|
module StaticCacheController
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
+
included do
|
8
|
+
helper_method :static_cached?
|
9
|
+
end
|
10
|
+
|
7
11
|
module ClassMethods
|
8
12
|
def static_cache(*actions, permanent: false)
|
9
|
-
|
10
|
-
|
13
|
+
before_action :prepare_static_cache
|
11
14
|
if permanent
|
12
15
|
after_action :cache_static_page_permanently, only: actions
|
13
16
|
else
|
@@ -22,6 +25,10 @@ module PagesCore
|
|
22
25
|
@static_cache_disabled = true
|
23
26
|
end
|
24
27
|
|
28
|
+
def static_cached?
|
29
|
+
!@static_cache_disabled && @static_cached ? true : false
|
30
|
+
end
|
31
|
+
|
25
32
|
private
|
26
33
|
|
27
34
|
def cache_static_page
|
@@ -40,6 +47,10 @@ module PagesCore
|
|
40
47
|
)
|
41
48
|
end
|
42
49
|
|
50
|
+
def prepare_static_cache
|
51
|
+
@static_cached = true
|
52
|
+
end
|
53
|
+
|
43
54
|
def static_cache_allowed?
|
44
55
|
(request.get? || request.head?) && response.status == 200 &&
|
45
56
|
perform_caching && !@static_cache_disabled
|
@@ -121,7 +121,7 @@ module PagesCore
|
|
121
121
|
def redirect_page(page)
|
122
122
|
return false unless page.redirects?
|
123
123
|
|
124
|
-
redirect_to(page.redirect_path(locale:
|
124
|
+
redirect_to(page.redirect_path(locale:), allow_other_host: true)
|
125
125
|
end
|
126
126
|
|
127
127
|
def require_page
|
@@ -22,21 +22,12 @@ module PagesCore
|
|
22
22
|
|
23
23
|
private
|
24
24
|
|
25
|
-
def legacy_locales
|
26
|
-
{ "nor" => "nb",
|
27
|
-
"eng" => "en" }
|
28
|
-
end
|
29
|
-
|
30
25
|
def page_param
|
31
26
|
params[:page].is_a?(String) ? params[:page] : 1
|
32
27
|
end
|
33
28
|
|
34
29
|
def set_i18n_locale
|
35
|
-
|
36
|
-
if legacy_locales[locale_param]
|
37
|
-
locale_param = legacy_locales[locale_param]
|
38
|
-
end
|
39
|
-
I18n.locale = locale_param
|
30
|
+
I18n.locale = content_locale
|
40
31
|
rescue I18n::InvalidLocale
|
41
32
|
raise if Rails.application.config.consider_all_requests_local
|
42
33
|
|
@@ -23,7 +23,7 @@ module PagesCore
|
|
23
23
|
def embed_image(id, size:, class_name:, link:)
|
24
24
|
image_figure(
|
25
25
|
Image.find(id).localize(I18n.locale),
|
26
|
-
size
|
26
|
+
size:, class_name:, link:
|
27
27
|
)
|
28
28
|
rescue ActiveRecord::RecordNotFound
|
29
29
|
nil
|
@@ -44,8 +44,8 @@ module PagesCore
|
|
44
44
|
link = (Regexp.last_match(1) if options =~ /link="([^"]+)"/)
|
45
45
|
embed_image(id,
|
46
46
|
size: embed_image_size(options),
|
47
|
-
class_name
|
48
|
-
link:
|
47
|
+
class_name:,
|
48
|
+
link:)
|
49
49
|
end
|
50
50
|
|
51
51
|
def parse_images(string)
|
@@ -39,12 +39,12 @@ module Admin
|
|
39
39
|
([page.author] + User.activated).uniq
|
40
40
|
end
|
41
41
|
|
42
|
-
def page_list_row(page, &
|
42
|
+
def page_list_row(page, &)
|
43
43
|
classes = [page.status_label.downcase]
|
44
44
|
classes << "autopublish" if page.autopublish?
|
45
45
|
classes << "pinned" if page.pinned?
|
46
46
|
|
47
|
-
tag.tr(capture(&
|
47
|
+
tag.tr(capture(&), class: classes.join(" "))
|
48
48
|
end
|
49
49
|
|
50
50
|
def page_name(page, options = {})
|
@@ -11,14 +11,14 @@ module PagesCore
|
|
11
11
|
content_tabs.any?
|
12
12
|
end
|
13
13
|
|
14
|
-
def content_tab(name, options = {}, &
|
14
|
+
def content_tab(name, options = {}, &)
|
15
15
|
return unless block_given?
|
16
16
|
|
17
17
|
tab = {
|
18
18
|
name: name.to_s.humanize,
|
19
19
|
key: options[:key] || name.to_s.underscore.gsub(/\s+/, "_"),
|
20
|
-
options
|
21
|
-
content: capture(&
|
20
|
+
options:,
|
21
|
+
content: capture(&)
|
22
22
|
}
|
23
23
|
content_tabs.push(tab)
|
24
24
|
content_tab_tag(tab[:key], tab[:content])
|
@@ -9,10 +9,10 @@ module PagesCore
|
|
9
9
|
react_component("EditableImage",
|
10
10
|
editable_image_options(
|
11
11
|
image,
|
12
|
-
width
|
13
|
-
caption
|
14
|
-
locale:
|
15
|
-
).merge(width:
|
12
|
+
width:,
|
13
|
+
caption:,
|
14
|
+
locale:
|
15
|
+
).merge(width:))
|
16
16
|
end
|
17
17
|
|
18
18
|
def image_uploader_tag(name, image, options = {})
|
@@ -36,8 +36,8 @@ module PagesCore
|
|
36
36
|
|
37
37
|
def editable_image_options(image, width: 250, caption: false, locale: nil)
|
38
38
|
editable_image_src_options(image, width).merge(
|
39
|
-
width
|
40
|
-
caption
|
39
|
+
width:,
|
40
|
+
caption:,
|
41
41
|
locale: locale || I18n.default_locale,
|
42
42
|
locales: locales_with_dir
|
43
43
|
)
|
@@ -21,10 +21,10 @@ module PagesCore
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
def unique_page(page_name, &
|
24
|
+
def unique_page(page_name, &)
|
25
25
|
page = Page.where(unique_name: page_name).first
|
26
26
|
if page && block_given?
|
27
|
-
output = capture(page.localize(content_locale), &
|
27
|
+
output = capture(page.localize(content_locale), &)
|
28
28
|
concat(output)
|
29
29
|
end
|
30
30
|
page&.localize(content_locale)
|
@@ -44,7 +44,7 @@ module PagesCore
|
|
44
44
|
|
45
45
|
def page_link_path(locale, page)
|
46
46
|
if page.redirects?
|
47
|
-
page.redirect_path(locale:
|
47
|
+
page.redirect_path(locale:)
|
48
48
|
else
|
49
49
|
page_path(locale, page)
|
50
50
|
end
|
@@ -50,9 +50,9 @@ module PagesCore
|
|
50
50
|
# <%= feed_tags %>
|
51
51
|
# <% end %>
|
52
52
|
#
|
53
|
-
def head_tag(&
|
53
|
+
def head_tag(&)
|
54
54
|
# The block output must be captured first
|
55
|
-
block_output = block_given? ? capture(&
|
55
|
+
block_output = block_given? ? capture(&) : nil
|
56
56
|
|
57
57
|
tag.head { safe_join(head_tag_contents(block_output), "\n") }
|
58
58
|
end
|
@@ -64,34 +64,33 @@ module PagesCore
|
|
64
64
|
def rss_link_tag(title, href)
|
65
65
|
tag.link(rel: "alternate",
|
66
66
|
type: "application/rss+xml",
|
67
|
-
title
|
68
|
-
href:
|
67
|
+
title:,
|
68
|
+
href:)
|
69
69
|
end
|
70
70
|
|
71
71
|
private
|
72
72
|
|
73
73
|
def head_tag_contents(block_output)
|
74
74
|
[tag.meta(charset: "utf-8"),
|
75
|
-
tag.meta("http-equiv" => "X-UA-Compatible", "content" => "IE=edge"),
|
76
75
|
tag.title(document_title),
|
77
76
|
meta_description_tag,
|
78
77
|
meta_keywords_tag,
|
79
78
|
(tag.link(rel: "image_src", href: meta_image) if meta_image?),
|
80
79
|
open_graph_tags,
|
81
|
-
csrf_meta_tags,
|
82
|
-
block_output]
|
80
|
+
(csrf_meta_tags unless static_cached?),
|
81
|
+
block_output].compact_blank
|
83
82
|
end
|
84
83
|
|
85
84
|
def meta_description_tag
|
86
85
|
return unless meta_description?
|
87
86
|
|
88
|
-
tag.meta(name: "description", content: meta_description)
|
87
|
+
tag.meta(name: "description", content: meta_description&.strip)
|
89
88
|
end
|
90
89
|
|
91
90
|
def meta_keywords_tag
|
92
91
|
return unless meta_keywords?
|
93
92
|
|
94
|
-
tag.meta(name: "keywords", content: meta_keywords)
|
93
|
+
tag.meta(name: "keywords", content: meta_keywords&.strip)
|
95
94
|
end
|
96
95
|
end
|
97
96
|
end
|
@@ -57,12 +57,12 @@ module PagesCore
|
|
57
57
|
def picture_tag(image, ratio: nil, sizes: "100vw")
|
58
58
|
tag.picture do
|
59
59
|
safe_join(
|
60
|
-
[webp_source(image, ratio
|
60
|
+
[webp_source(image, ratio:, sizes: sizes || "100vw"),
|
61
61
|
dynamic_image_tag(image,
|
62
62
|
size: image_size(1050, ratio),
|
63
63
|
crop: (ratio ? true : false),
|
64
|
-
sizes
|
65
|
-
srcset: srcset(image, ratio:
|
64
|
+
sizes:,
|
65
|
+
srcset: srcset(image, ratio:))]
|
66
66
|
)
|
67
67
|
end
|
68
68
|
end
|
@@ -106,11 +106,11 @@ module PagesCore
|
|
106
106
|
size ||= default_image_size
|
107
107
|
size = fit_ratio(size, ratio) if ratio
|
108
108
|
|
109
|
-
dynamic_image_tag(image, size
|
109
|
+
dynamic_image_tag(image, size:, crop: ratio && true, upscale: false)
|
110
110
|
end
|
111
111
|
|
112
112
|
def image_link_to(content, href)
|
113
|
-
tag.a(content, href:
|
113
|
+
tag.a(content, href:)
|
114
114
|
end
|
115
115
|
|
116
116
|
def image_size(width, ratio)
|
@@ -139,8 +139,8 @@ module PagesCore
|
|
139
139
|
return unless webp_compatible?(image)
|
140
140
|
|
141
141
|
tag.source(type: "image/webp",
|
142
|
-
srcset: srcset(image, ratio
|
143
|
-
sizes:
|
142
|
+
srcset: srcset(image, ratio:, format: :webp),
|
143
|
+
sizes:)
|
144
144
|
end
|
145
145
|
|
146
146
|
def webp_compatible?(image)
|
@@ -13,7 +13,7 @@ module PagesCore
|
|
13
13
|
properties
|
14
14
|
.compact
|
15
15
|
.map do |name, content|
|
16
|
-
tag.meta(property: "og:#{name}", content:
|
16
|
+
tag.meta(property: "og:#{name}", content:)
|
17
17
|
end,
|
18
18
|
"\n"
|
19
19
|
)
|
@@ -42,7 +42,7 @@ module PagesCore
|
|
42
42
|
site_name: PagesCore.config(:site_name),
|
43
43
|
title: default_open_graph_title,
|
44
44
|
image: (meta_image if meta_image?),
|
45
|
-
description: default_open_graph_description,
|
45
|
+
description: default_open_graph_description&.strip,
|
46
46
|
url: request.url }
|
47
47
|
end
|
48
48
|
end
|
@@ -30,7 +30,7 @@ module PagesCore
|
|
30
30
|
private
|
31
31
|
|
32
32
|
def page_redirect_url(locale, page)
|
33
|
-
redirect = page.redirect_path(locale:
|
33
|
+
redirect = page.redirect_path(locale:)
|
34
34
|
return redirect if redirect =~ %r{^https?://}
|
35
35
|
|
36
36
|
base_page_url + redirect
|
@@ -54,7 +54,7 @@ module PagesCore
|
|
54
54
|
ActiveSupport::Deprecation.warn(
|
55
55
|
"Calling page_url without locale is deprecated"
|
56
56
|
)
|
57
|
-
[
|
57
|
+
[opts[:locale] || content_locale, page_or_locale]
|
58
58
|
end
|
59
59
|
|
60
60
|
def paginated_section(opts)
|
@@ -7,6 +7,8 @@ module PagesCore
|
|
7
7
|
|
8
8
|
included do
|
9
9
|
before_validation :ensure_template
|
10
|
+
|
11
|
+
delegate :enabled_blocks, to: :template_config
|
10
12
|
end
|
11
13
|
|
12
14
|
def template_config
|
@@ -27,8 +29,28 @@ module PagesCore
|
|
27
29
|
template
|
28
30
|
end
|
29
31
|
|
32
|
+
def unconfigured_blocks
|
33
|
+
blocks = (localizations.where(locale:).pluck(:name)
|
34
|
+
.map(&:to_sym) -
|
35
|
+
configured_blocks) &
|
36
|
+
PagesCore::Templates::TemplateConfiguration.all_blocks
|
37
|
+
|
38
|
+
if block_given?
|
39
|
+
blocks.each do |block_name|
|
40
|
+
yield block_name, template_config.block(block_name)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
blocks
|
45
|
+
end
|
46
|
+
|
30
47
|
private
|
31
48
|
|
49
|
+
def configured_blocks
|
50
|
+
enabled_blocks + %i[name path_segment meta_title meta_description
|
51
|
+
open_graph_title open_graph_description]
|
52
|
+
end
|
53
|
+
|
32
54
|
def singularized_subtemplate
|
33
55
|
singularized = ActiveSupport::Inflector.singularize(base_template)
|
34
56
|
return if base_template == singularized
|
@@ -18,7 +18,7 @@ module PagesCore
|
|
18
18
|
|
19
19
|
class << self
|
20
20
|
def index_all!(scope)
|
21
|
-
scope.
|
21
|
+
scope.find_each { |r| new(r).index! }
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -53,7 +53,7 @@ module PagesCore
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def update_index(locale, attrs)
|
56
|
-
record.search_documents.create_or_find_by!(locale:
|
56
|
+
record.search_documents.create_or_find_by!(locale:).update(attrs)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -61,7 +61,7 @@ module PagesCore
|
|
61
61
|
return {} unless respond_to?(:localized_attributes)
|
62
62
|
|
63
63
|
content = localized_attributes.keys.map { |a| localizer.get(a) }.join(" ")
|
64
|
-
{ content:
|
64
|
+
{ content: }
|
65
65
|
end
|
66
66
|
|
67
67
|
def update_search_documents!
|
data/app/models/page.rb
CHANGED
data/app/models/page_builder.rb
CHANGED
@@ -19,7 +19,7 @@ class PageBuilder
|
|
19
19
|
|
20
20
|
class << self
|
21
21
|
def build(user, locale: nil, parent: nil, &block)
|
22
|
-
new(user, locale
|
22
|
+
new(user, locale:, parent:)
|
23
23
|
.run(&block)
|
24
24
|
end
|
25
25
|
end
|
@@ -30,20 +30,20 @@ class PageBuilder
|
|
30
30
|
@parent = parent
|
31
31
|
end
|
32
32
|
|
33
|
-
def page(name, options = {}, &
|
33
|
+
def page(name, options = {}, &)
|
34
34
|
page = Page.create(
|
35
|
-
{ name:
|
35
|
+
{ name: }.merge(default_options).merge(options)
|
36
36
|
)
|
37
37
|
if block_given?
|
38
38
|
self.class
|
39
|
-
.new(user, locale
|
40
|
-
.run(&
|
39
|
+
.new(user, locale:, parent: page)
|
40
|
+
.run(&)
|
41
41
|
end
|
42
42
|
page
|
43
43
|
end
|
44
44
|
|
45
|
-
def run(&
|
46
|
-
instance_eval(&
|
45
|
+
def run(&)
|
46
|
+
instance_eval(&)
|
47
47
|
end
|
48
48
|
|
49
49
|
private
|
@@ -51,9 +51,9 @@ class PageBuilder
|
|
51
51
|
def default_options
|
52
52
|
{
|
53
53
|
author: user,
|
54
|
-
parent
|
54
|
+
parent:,
|
55
55
|
status: 2,
|
56
|
-
locale:
|
56
|
+
locale:
|
57
57
|
}
|
58
58
|
end
|
59
59
|
end
|
data/app/models/page_exporter.rb
CHANGED
@@ -88,7 +88,7 @@ class PageExporter
|
|
88
88
|
def text_page(page)
|
89
89
|
PagesCore::Templates::TemplateConfiguration
|
90
90
|
.all_blocks
|
91
|
-
.select { |attr| page.send("#{attr}?"
|
91
|
+
.select { |attr| page.send(:"#{attr}?") }
|
92
92
|
.map { |attr| ["-- #{attr}: --", page.send(attr).strip].join("\n\n") }
|
93
93
|
.join("\n\n\n")
|
94
94
|
end
|
data/app/models/page_image.rb
CHANGED
data/app/models/page_path.rb
CHANGED
@@ -28,7 +28,7 @@ class PagePath < ApplicationRecord
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def get(locale, path)
|
31
|
-
find_by(locale
|
31
|
+
find_by(locale:, path:)
|
32
32
|
end
|
33
33
|
|
34
34
|
def associate(page, locale: nil, path: nil)
|
@@ -39,14 +39,14 @@ class PagePath < ApplicationRecord
|
|
39
39
|
raise NoPathError unless path
|
40
40
|
|
41
41
|
page_path = get_or_create(locale, path, page)
|
42
|
-
page_path.update(page:
|
42
|
+
page_path.update(page:) unless page_path.page_id == page.id
|
43
43
|
page_path
|
44
44
|
end
|
45
45
|
|
46
46
|
private
|
47
47
|
|
48
48
|
def get_or_create(locale, path, page)
|
49
|
-
get(locale, path) || create(locale
|
49
|
+
get(locale, path) || create(locale:, path:, page:)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -15,12 +15,12 @@ class SearchDocument < ApplicationRecord
|
|
15
15
|
pg_search_scope :full_text_search_scope, lambda { |query, dictionary|
|
16
16
|
{ against: %i[name description content tags],
|
17
17
|
using: { tsearch: { prefix: true,
|
18
|
-
dictionary
|
18
|
+
dictionary:,
|
19
19
|
tsvector_column: "tsv" },
|
20
20
|
trigram: { only: %i[name] } },
|
21
21
|
ignoring: :accents,
|
22
22
|
order_within_rank: "search_documents.record_updated_at DESC",
|
23
|
-
query:
|
23
|
+
query: }
|
24
24
|
}
|
25
25
|
|
26
26
|
class << self
|
@@ -31,7 +31,7 @@ class SearchDocument < ApplicationRecord
|
|
31
31
|
|
32
32
|
def search(query, locale: nil)
|
33
33
|
locale ||= I18n.locale
|
34
|
-
where(locale:
|
34
|
+
where(locale:)
|
35
35
|
.includes(:searchable)
|
36
36
|
.full_text_search_scope(query, search_configuration(locale))
|
37
37
|
end
|
data/app/models/tag.rb
CHANGED
@@ -11,7 +11,7 @@ module PagesCore
|
|
11
11
|
|
12
12
|
class << self
|
13
13
|
def call(attrs, invite: nil)
|
14
|
-
new(attrs, invite:
|
14
|
+
new(attrs, invite:).call
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -19,7 +19,7 @@ module PagesCore
|
|
19
19
|
User.transaction do
|
20
20
|
user = User.create(attributes.merge(invite_attributes))
|
21
21
|
if user.valid?
|
22
|
-
PagesCore::PubSub.publish(:create_user, user
|
22
|
+
PagesCore::PubSub.publish(:create_user, user:, invite:)
|
23
23
|
invite&.destroy
|
24
24
|
end
|
25
25
|
user
|
@@ -10,14 +10,14 @@ module PagesCore
|
|
10
10
|
|
11
11
|
class << self
|
12
12
|
def call(invite:)
|
13
|
-
new(invite:
|
13
|
+
new(invite:).call
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
def call
|
18
18
|
Invite.transaction do
|
19
19
|
invite.destroy
|
20
|
-
PagesCore::PubSub.publish(:destroy_invite, invite:
|
20
|
+
PagesCore::PubSub.publish(:destroy_invite, invite:)
|
21
21
|
invite
|
22
22
|
end
|
23
23
|
end
|
@@ -15,7 +15,7 @@ module PagesCore
|
|
15
15
|
|
16
16
|
class << self
|
17
17
|
def call(attrs, user:, host:, protocol: "http")
|
18
|
-
new(attrs, user
|
18
|
+
new(attrs, user:, host:, protocol:).call
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -36,7 +36,7 @@ module PagesCore
|
|
36
36
|
AdminMailer.invite(
|
37
37
|
invite,
|
38
38
|
admin_invite_with_token_url(invite, invite.token,
|
39
|
-
host
|
39
|
+
host:, protocol:)
|
40
40
|
).deliver_later
|
41
41
|
end
|
42
42
|
end
|
@@ -2,6 +2,18 @@
|
|
2
2
|
<%= render partial: "edit_content", locals: { f: f } %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
+
<% if @page.unconfigured_blocks.any? %>
|
6
|
+
<%= content_tab "Unconfigured content" do %>
|
7
|
+
<p>
|
8
|
+
This page has additional content fields not enabled by the
|
9
|
+
selected template.
|
10
|
+
</p>
|
11
|
+
<% @page.unconfigured_blocks do |block_name, block_options| %>
|
12
|
+
<%= page_block_field(f, block_name, block_options) %>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
15
|
+
<% end %>
|
16
|
+
|
5
17
|
<% if @page.template_config.value(:images) || @page.template_config.value(:image) %>
|
6
18
|
<%= content_tab "Images" do %>
|
7
19
|
<%= render partial: "edit_images", locals: { f: f } %>
|
@@ -21,20 +21,6 @@ class CreatePagesTables < ActiveRecord::Migration[5.0]
|
|
21
21
|
t.index :slug
|
22
22
|
end
|
23
23
|
|
24
|
-
create_table :delayed_jobs do |t|
|
25
|
-
t.integer :priority, default: 0
|
26
|
-
t.integer :attempts, default: 0
|
27
|
-
t.text :handler
|
28
|
-
t.text :last_error
|
29
|
-
t.datetime :run_at
|
30
|
-
t.datetime :locked_at
|
31
|
-
t.datetime :failed_at
|
32
|
-
t.string :locked_by
|
33
|
-
t.datetime :created_at, null: false
|
34
|
-
t.datetime :updated_at, null: false
|
35
|
-
t.string :queue
|
36
|
-
end
|
37
|
-
|
38
24
|
create_table :images do |t|
|
39
25
|
t.string :filename, null: false
|
40
26
|
t.string :content_type, null: false
|
@@ -5,15 +5,15 @@ module PagesCore
|
|
5
5
|
class << self
|
6
6
|
attr_accessor :enabled
|
7
7
|
|
8
|
-
def disable(&
|
8
|
+
def disable(&)
|
9
9
|
old_value = enabled
|
10
10
|
self.enabled = false
|
11
11
|
yield if block_given?
|
12
12
|
self.enabled = old_value
|
13
13
|
end
|
14
14
|
|
15
|
-
def once(&
|
16
|
-
disable(&
|
15
|
+
def once(&)
|
16
|
+
disable(&)
|
17
17
|
PagesCore::StaticCache.handler.sweep!
|
18
18
|
end
|
19
19
|
end
|
@@ -149,7 +149,7 @@ module PagesCore
|
|
149
149
|
def template_config(setting, value, options)
|
150
150
|
value = true if value == :enabled
|
151
151
|
value = false if value == :disabled
|
152
|
-
{ setting => { value
|
152
|
+
{ setting => { value:, options: } }
|
153
153
|
end
|
154
154
|
|
155
155
|
def template_path(name)
|
data/lib/pages_core.rb
CHANGED
@@ -21,7 +21,6 @@ require "acts_as_list"
|
|
21
21
|
require "alba"
|
22
22
|
require "bcrypt"
|
23
23
|
require "country_select"
|
24
|
-
require "delayed_job_active_record"
|
25
24
|
require "dis"
|
26
25
|
require "dynamic_image"
|
27
26
|
require "healthcheck"
|
@@ -71,7 +70,7 @@ module PagesCore
|
|
71
70
|
Pathname.new(File.dirname(__FILE__)).join("..").expand_path
|
72
71
|
end
|
73
72
|
|
74
|
-
def configure(_options = {}, &
|
73
|
+
def configure(_options = {}, &)
|
75
74
|
yield configuration if block_given?
|
76
75
|
end
|
77
76
|
|
@@ -22,11 +22,6 @@ module PagesCore
|
|
22
22
|
nil
|
23
23
|
end
|
24
24
|
|
25
|
-
def create_active_job_initializer
|
26
|
-
template("active_job_initializer.rb",
|
27
|
-
File.join("config/initializers/active_job.rb"))
|
28
|
-
end
|
29
|
-
|
30
25
|
def create_application_controller
|
31
26
|
template("application_controller.rb",
|
32
27
|
File.join("app/controllers/application_controller.rb"))
|
@@ -57,16 +52,6 @@ module PagesCore
|
|
57
52
|
File.join("app/views/pages/templates/index.html.erb"))
|
58
53
|
end
|
59
54
|
|
60
|
-
def create_delayed_job_script
|
61
|
-
template "delayed_job", File.join("bin/delayed_job")
|
62
|
-
File.chmod(0o755, Rails.root.join("bin/delayed_job"))
|
63
|
-
end
|
64
|
-
|
65
|
-
def create_delayed_job_initializer
|
66
|
-
template("delayed_job_initializer.rb",
|
67
|
-
File.join("config/initializers/delayed_job.rb"))
|
68
|
-
end
|
69
|
-
|
70
55
|
def create_initializer_file
|
71
56
|
read_configuration!
|
72
57
|
template("pages_initializer.rb",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pages_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Inge Jørgensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -332,48 +332,6 @@ dependencies:
|
|
332
332
|
- - ">="
|
333
333
|
- !ruby/object:Gem::Version
|
334
334
|
version: 0.5.3
|
335
|
-
- !ruby/object:Gem::Dependency
|
336
|
-
name: daemons
|
337
|
-
requirement: !ruby/object:Gem::Requirement
|
338
|
-
requirements:
|
339
|
-
- - "~>"
|
340
|
-
- !ruby/object:Gem::Version
|
341
|
-
version: 1.2.0
|
342
|
-
type: :runtime
|
343
|
-
prerelease: false
|
344
|
-
version_requirements: !ruby/object:Gem::Requirement
|
345
|
-
requirements:
|
346
|
-
- - "~>"
|
347
|
-
- !ruby/object:Gem::Version
|
348
|
-
version: 1.2.0
|
349
|
-
- !ruby/object:Gem::Dependency
|
350
|
-
name: delayed_job
|
351
|
-
requirement: !ruby/object:Gem::Requirement
|
352
|
-
requirements:
|
353
|
-
- - "~>"
|
354
|
-
- !ruby/object:Gem::Version
|
355
|
-
version: 4.1.2
|
356
|
-
type: :runtime
|
357
|
-
prerelease: false
|
358
|
-
version_requirements: !ruby/object:Gem::Requirement
|
359
|
-
requirements:
|
360
|
-
- - "~>"
|
361
|
-
- !ruby/object:Gem::Version
|
362
|
-
version: 4.1.2
|
363
|
-
- !ruby/object:Gem::Dependency
|
364
|
-
name: delayed_job_active_record
|
365
|
-
requirement: !ruby/object:Gem::Requirement
|
366
|
-
requirements:
|
367
|
-
- - "~>"
|
368
|
-
- !ruby/object:Gem::Version
|
369
|
-
version: 4.1.1
|
370
|
-
type: :runtime
|
371
|
-
prerelease: false
|
372
|
-
version_requirements: !ruby/object:Gem::Requirement
|
373
|
-
requirements:
|
374
|
-
- - "~>"
|
375
|
-
- !ruby/object:Gem::Version
|
376
|
-
version: 4.1.1
|
377
335
|
description: Pages Core
|
378
336
|
email:
|
379
337
|
- inge@anyone.no
|
@@ -700,12 +658,9 @@ files:
|
|
700
658
|
- lib/rails/generators/pages_core/frontend/templates/stylesheets/global/grid.css
|
701
659
|
- lib/rails/generators/pages_core/frontend/templates/stylesheets/global/typography.css
|
702
660
|
- lib/rails/generators/pages_core/install/install_generator.rb
|
703
|
-
- lib/rails/generators/pages_core/install/templates/active_job_initializer.rb
|
704
661
|
- lib/rails/generators/pages_core/install/templates/application_controller.rb
|
705
662
|
- lib/rails/generators/pages_core/install/templates/application_helper.rb
|
706
663
|
- lib/rails/generators/pages_core/install/templates/default_page_template.html.erb
|
707
|
-
- lib/rails/generators/pages_core/install/templates/delayed_job
|
708
|
-
- lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb
|
709
664
|
- lib/rails/generators/pages_core/install/templates/frontend_controller.rb
|
710
665
|
- lib/rails/generators/pages_core/install/templates/frontend_helper.rb
|
711
666
|
- lib/rails/generators/pages_core/install/templates/gitignore.erb
|
@@ -736,14 +691,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
736
691
|
requirements:
|
737
692
|
- - ">="
|
738
693
|
- !ruby/object:Gem::Version
|
739
|
-
version: 3.
|
694
|
+
version: 3.1.0
|
740
695
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
741
696
|
requirements:
|
742
697
|
- - ">="
|
743
698
|
- !ruby/object:Gem::Version
|
744
699
|
version: '0'
|
745
700
|
requirements: []
|
746
|
-
rubygems_version: 3.
|
701
|
+
rubygems_version: 3.5.3
|
747
702
|
signing_key:
|
748
703
|
specification_version: 4
|
749
704
|
summary: Pages Core
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
Delayed::Worker.backend = :active_record
|
4
|
-
|
5
|
-
if Object.const_defined?("Postmark")
|
6
|
-
class InvalidRecipientsPlugin < Delayed::Plugin
|
7
|
-
callbacks do |lifecycle|
|
8
|
-
lifecycle.around(:invoke_job) do |job, *args, &block|
|
9
|
-
# Forward the call to the next callback in the callback chain
|
10
|
-
block.call(job, *args)
|
11
|
-
rescue Postmark::InactiveRecipientError => e
|
12
|
-
Rails.logger.error "#{e.class}: #{e.message}"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
Delayed::Worker.plugins << InvalidRecipientsPlugin
|
18
|
-
end
|