pages_core 3.6.2 → 3.7.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/README.md +0 -1
- data/Rakefile +3 -1
- data/app/assets/javascripts/pages/admin/components/grid_image.jsx +1 -1
- data/app/assets/javascripts/pages/admin/components/image_editor.jsx +5 -5
- data/app/assets/javascripts/pages/admin/components/image_grid.jsx +10 -5
- data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +10 -5
- data/app/assets/javascripts/pages/admin/components/page_tree.jsx +9 -9
- data/app/assets/javascripts/pages/admin/components/page_tree_node.jsx +11 -11
- data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +5 -4
- data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +54 -21
- data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -3
- data/app/assets/javascripts/pages/admin/components/toast_store.jsx +1 -1
- data/app/assets/javascripts/pages/admin/features/edit_page.jsx +3 -3
- data/app/assets/javascripts/pages/admin/features/rich_text.jsx +1 -1
- data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +28 -28
- data/app/assets/javascripts/pages/admin/lib/tree.jsx +9 -9
- data/app/assets/javascripts/pages/login_form.jsx +8 -8
- data/app/assets/stylesheets/pages/admin/components/forms.scss +20 -0
- data/app/assets/stylesheets/pages/errors.css +2 -0
- data/app/controller_dummies/admin/admin_controller.rb +2 -0
- data/app/controller_dummies/application_controller.rb +2 -0
- data/app/controller_dummies/attachments_controller.rb +2 -0
- data/app/controller_dummies/frontend_controller.rb +2 -0
- data/app/controller_dummies/images_controller.rb +2 -0
- data/app/controller_dummies/page_files_controller.rb +2 -0
- data/app/controller_dummies/pages_controller.rb +2 -0
- data/app/controller_dummies/sitemaps_controller.rb +2 -0
- data/app/controllers/admin/attachments_controller.rb +4 -2
- data/app/controllers/admin/categories_controller.rb +2 -0
- data/app/controllers/admin/images_controller.rb +10 -5
- data/app/controllers/admin/invites_controller.rb +4 -1
- data/app/controllers/admin/pages_controller.rb +7 -19
- data/app/controllers/admin/password_resets_controller.rb +9 -5
- data/app/controllers/admin/users_controller.rb +10 -4
- data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +13 -11
- data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
- data/app/controllers/concerns/pages_core/authentication.rb +4 -1
- data/app/controllers/concerns/pages_core/error_renderer.rb +3 -0
- data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
- data/app/controllers/concerns/pages_core/policies_helper.rb +4 -1
- data/app/controllers/concerns/pages_core/preview_pages_controller.rb +3 -0
- data/app/controllers/concerns/pages_core/process_titler.rb +2 -0
- data/app/controllers/concerns/pages_core/rss_controller.rb +2 -0
- data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
- data/app/controllers/errors_controller.rb +5 -53
- data/app/controllers/pages_core/admin_controller.rb +7 -67
- data/app/controllers/pages_core/attachments_controller.rb +10 -6
- data/app/controllers/pages_core/base_controller.rb +11 -17
- data/app/controllers/pages_core/frontend/page_files_controller.rb +6 -2
- data/app/controllers/pages_core/frontend/pages_controller.rb +9 -15
- data/app/controllers/pages_core/frontend_controller.rb +3 -0
- data/app/controllers/pages_core/images_controller.rb +3 -1
- data/app/controllers/pages_core/sitemaps_controller.rb +11 -5
- data/app/controllers/sessions_controller.rb +2 -0
- data/app/formatters/pages_core/html_formatter.rb +13 -63
- data/app/formatters/pages_core/image_embedder.rb +79 -0
- data/app/formatters/pages_core/link_renderer.rb +2 -0
- data/app/helpers/admin/admin_helper.rb +2 -0
- data/app/helpers/admin/menu_helper.rb +6 -4
- data/app/helpers/admin/pages_helper.rb +4 -57
- data/app/helpers/application_helper.rb +2 -0
- data/app/helpers/frontend_helper.rb +2 -0
- data/app/helpers/pages_core/admin/admin_helper.rb +22 -106
- data/app/helpers/pages_core/admin/content_tabs_helper.rb +28 -0
- data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
- data/app/helpers/pages_core/admin/form_builder.rb +8 -0
- data/app/helpers/pages_core/admin/image_uploads_helper.rb +48 -0
- data/app/helpers/pages_core/admin/labelled_field_helper.rb +12 -9
- data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
- data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
- data/app/helpers/pages_core/admin/tag_editor_helper.rb +11 -9
- data/app/helpers/pages_core/application_helper.rb +3 -0
- data/app/helpers/pages_core/attachments_helper.rb +31 -27
- data/app/helpers/pages_core/form_builder.rb +17 -13
- data/app/helpers/pages_core/frontend_helper.rb +3 -3
- data/app/helpers/pages_core/head_tags_helper.rb +7 -2
- data/app/helpers/pages_core/images_helper.rb +3 -0
- data/app/helpers/pages_core/meta_tags_helper.rb +3 -1
- data/app/helpers/pages_core/open_graph_tags_helper.rb +7 -5
- data/app/helpers/pages_core/page_path_helper.rb +24 -3
- data/app/jobs/pages_core/autopublish_job.rb +3 -1
- data/app/jobs/pages_core/sweep_cache_job.rb +4 -2
- data/app/mailers/admin_mailer.rb +4 -14
- data/app/models/attachment.rb +10 -8
- data/app/models/autopublisher.rb +3 -0
- data/app/models/category.rb +3 -1
- data/app/models/concerns/pages_core/has_roles.rb +2 -0
- data/app/models/concerns/pages_core/humanizable_param.rb +9 -6
- data/app/models/concerns/pages_core/page_model/attachments.rb +2 -0
- data/app/models/concerns/pages_core/page_model/autopublishable.rb +2 -0
- data/app/models/concerns/pages_core/page_model/dated_page.rb +11 -11
- data/app/models/concerns/pages_core/page_model/images.rb +5 -1
- data/app/models/concerns/pages_core/page_model/localizable.rb +2 -0
- data/app/models/concerns/pages_core/page_model/pathable.rb +26 -25
- data/app/models/concerns/pages_core/page_model/redirectable.rb +3 -1
- data/app/models/concerns/pages_core/page_model/sortable.rb +6 -5
- data/app/models/concerns/pages_core/page_model/status.rb +2 -0
- data/app/models/concerns/pages_core/page_model/templateable.rb +7 -2
- data/app/models/concerns/pages_core/page_model/tree.rb +27 -20
- data/app/models/concerns/pages_core/sweepable.rb +4 -2
- data/app/models/concerns/pages_core/taggable.rb +8 -2
- data/app/models/image.rb +14 -1
- data/app/models/invite.rb +3 -1
- data/app/models/invite_role.rb +5 -3
- data/app/models/page.rb +4 -3
- data/app/models/page_builder.rb +2 -0
- data/app/models/page_category.rb +3 -1
- data/app/models/page_exporter.rb +22 -9
- data/app/models/page_file.rb +3 -1
- data/app/models/page_image.rb +3 -1
- data/app/models/page_path.rb +13 -5
- data/app/models/password_reset_token.rb +3 -1
- data/app/models/role.rb +8 -5
- data/app/models/tag.rb +8 -6
- data/app/models/tagging.rb +4 -2
- data/app/models/user.rb +7 -4
- data/app/policies/invite_policy.rb +2 -0
- data/app/policies/page_file_policy.rb +2 -0
- data/app/policies/page_image_policy.rb +2 -0
- data/app/policies/page_policy.rb +2 -0
- data/app/policies/policy.rb +2 -0
- data/app/policies/user_policy.rb +2 -0
- data/app/serializers/admin/attachment_serializer.rb +4 -2
- data/app/serializers/admin/image_serializer.rb +4 -2
- data/app/serializers/admin/page_file_serializer.rb +2 -0
- data/app/serializers/admin/page_image_serializer.rb +2 -0
- data/app/serializers/page_export_serializer.rb +2 -0
- data/app/serializers/page_file_export_serializer.rb +2 -0
- data/app/serializers/page_image_export_serializer.rb +2 -0
- data/app/serializers/page_image_serializer.rb +2 -0
- data/app/serializers/page_serializer.rb +2 -0
- data/app/services/pages_core/create_user_service.rb +5 -2
- data/app/services/pages_core/destroy_invite_service.rb +25 -0
- data/app/services/pages_core/invite_service.rb +2 -0
- data/app/views/admin/images/show.json.jbuilder +2 -0
- data/app/views/admin/pages/news.html.erb +1 -1
- data/app/views/errors/500.html.erb +2 -20
- data/app/views/errors/_generic_help.html.erb +1 -1
- data/app/views/feeds/pages.rss.builder +2 -0
- data/app/views/sitemaps/show.xml.builder +2 -0
- data/config/routes.rb +5 -5
- data/db/migrate/20111219033112_create_pages_tables.rb +192 -271
- data/lib/pages_core.rb +10 -0
- data/lib/pages_core/admin_menu_item.rb +3 -0
- data/lib/pages_core/archive_finder.rb +12 -16
- data/lib/pages_core/attachment_embedder.rb +4 -6
- data/lib/pages_core/cache_sweeper.rb +10 -108
- data/lib/pages_core/configuration.rb +2 -0
- data/lib/pages_core/configuration/base.rb +5 -0
- data/lib/pages_core/configuration/pages.rb +4 -2
- data/lib/pages_core/digest_verifier.rb +5 -5
- data/lib/pages_core/engine.rb +52 -0
- data/lib/pages_core/extensions.rb +2 -0
- data/lib/pages_core/extensions/string_extensions.rb +3 -1
- data/lib/pages_core/page_path_constraint.rb +2 -0
- data/lib/pages_core/pages_plugin.rb +3 -1
- data/lib/pages_core/plugin.rb +4 -52
- data/lib/pages_core/pub_sub.rb +2 -0
- data/lib/pages_core/static_cache.rb +26 -0
- data/lib/pages_core/static_cache/null_handler.rb +17 -0
- data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
- data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
- data/lib/pages_core/templates.rb +5 -3
- data/lib/pages_core/templates/block_configuration.rb +3 -0
- data/lib/pages_core/templates/configuration.rb +5 -1
- data/lib/pages_core/templates/configuration_handler.rb +4 -2
- data/lib/pages_core/templates/configuration_proxy.rb +2 -0
- data/lib/pages_core/templates/controller_actions.rb +2 -0
- data/lib/pages_core/templates/template_configuration.rb +18 -13
- data/lib/pages_core/version.rb +3 -1
- data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +2 -0
- data/lib/rails/generators/pages_core/install/install_generator.rb +3 -7
- data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/application_helper.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
- data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +17 -0
- data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
- data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +2 -6
- data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +18 -14
- data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
- data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
- data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
- data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
- data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -36
- data/lib/tasks/pages.rake +3 -2
- data/lib/tasks/pages/cache.rake +8 -5
- data/lib/tasks/pages/export.rake +3 -1
- data/lib/tasks/pages/page_paths.rake +2 -0
- data/template.rb +2 -0
- metadata +127 -77
- data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -26
- data/app/views/admin_mailer/error_report.html.erb +0 -70
- data/app/views/errors/500_critical.html.erb +0 -7
- data/app/views/errors/report.html.erb +0 -4
- data/config/removed_migrations.yml +0 -60
- data/db/migrate/20120627033112_rename_textbits.rb +0 -17
- data/db/migrate/20121010055412_drop_removed_tables.rb +0 -81
- data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -9
- data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -9
- data/db/migrate/20130303160632_remove_imagesets.rb +0 -22
- data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -14
- data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -10
- data/db/migrate/20140203183900_create_roles.rb +0 -66
- data/db/migrate/20140414150500_change_locale_names.rb +0 -11
- data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
- data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -81
- data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
- data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
- data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
- data/db/migrate/20141007173000_create_invites.rb +0 -16
- data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
- data/db/migrate/20150401131300_localize_images.rb +0 -38
- data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
- data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
- data/db/migrate/20151002174800_create_page_paths.rb +0 -10
- data/db/migrate/20151021103400_drop_binaries_table.rb +0 -7
- data/db/migrate/20151204151000_remove_page_content_order.rb +0 -5
- data/db/migrate/20160330220900_rename_pages_categories.rb +0 -6
- data/db/migrate/20160405202700_change_localization_limit.rb +0 -9
- data/db/migrate/20170716040500_remove_page_comments.rb +0 -23
- data/db/migrate/20170716213400_remove_sessions.rb +0 -15
- data/db/migrate/20180207134000_add_dates_to_pages.rb +0 -11
- data/db/migrate/20190211154800_create_attachments.rb +0 -73
- data/db/migrate/20190318115000_fix_page_file_ids.rb +0 -34
- data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -6
- data/lib/tasks/pages/update.rake +0 -17
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
class PagesPlugin < Plugin
|
|
3
5
|
class << self
|
|
@@ -14,7 +16,7 @@ module PagesCore
|
|
|
14
16
|
paths["db/migrate"] = "db/migrate"
|
|
15
17
|
|
|
16
18
|
admin_menu_item "News", proc { news_admin_pages_path(@locale) }, :pages,
|
|
17
|
-
if:
|
|
19
|
+
if: proc { Page.news_pages.any? },
|
|
18
20
|
current: proc { @page && @page.parent.try(&:news_page?) }
|
|
19
21
|
|
|
20
22
|
admin_menu_item "Pages", proc { admin_pages_path(@locale) }, :pages
|
data/lib/pages_core/plugin.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# module PagesGallery
|
|
2
4
|
# class Plugin < PagesCore::Plugin
|
|
3
5
|
# paths['db/migrate'] = 'template/db/migrate'
|
|
@@ -21,6 +23,7 @@ module PagesCore
|
|
|
21
23
|
end
|
|
22
24
|
)
|
|
23
25
|
end
|
|
26
|
+
super
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
def admin_menu_item(label, path, group = :custom, options = {})
|
|
@@ -35,38 +38,10 @@ module PagesCore
|
|
|
35
38
|
end
|
|
36
39
|
end
|
|
37
40
|
|
|
38
|
-
def migrations
|
|
39
|
-
plugins.map { |p| p.new.migrations }.flatten.compact
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def removed_migrations
|
|
43
|
-
plugins.map { |p| p.new.removed_migrations }.flatten.compact
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def existing_removed_migrations
|
|
47
|
-
removed_migrations
|
|
48
|
-
.select { |m| File.exist?(Rails.root.join("db", "migrate", m)) }
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def existing_migrations
|
|
52
|
-
migrations
|
|
53
|
-
.map { |m| Rails.root.join("db", "migrate", m.basename) }
|
|
54
|
-
.select { |m| File.exist?(m) }
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def remove_old_migrations!
|
|
58
|
-
(existing_removed_migrations + existing_migrations).each do |migration|
|
|
59
|
-
File.unlink Rails.root.join("db", "migrate", migration)
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
41
|
private
|
|
64
42
|
|
|
65
43
|
def default_paths
|
|
66
|
-
{
|
|
67
|
-
"db/migrate" => "db/migrate",
|
|
68
|
-
"config/removed_migrations.yml" => "config/removed_migrations.yml"
|
|
69
|
-
}
|
|
44
|
+
{ "db/migrate" => "db/migrate" }
|
|
70
45
|
end
|
|
71
46
|
end
|
|
72
47
|
|
|
@@ -78,29 +53,6 @@ module PagesCore
|
|
|
78
53
|
self.class.paths
|
|
79
54
|
end
|
|
80
55
|
|
|
81
|
-
def migrations_path
|
|
82
|
-
root.join(paths["db/migrate"])
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def removed_migrations_path
|
|
86
|
-
root.join(paths["config/removed_migrations.yml"])
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def migrations?
|
|
90
|
-
File.exist?(migrations_path) && File.directory?(migrations_path)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def migrations
|
|
94
|
-
Dir.entries(migrations_path)
|
|
95
|
-
.select { |f| f =~ /\.rb$/ }
|
|
96
|
-
.map { |f| migrations_path.join(f) }
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def removed_migrations
|
|
100
|
-
return unless File.exist?(removed_migrations_path)
|
|
101
|
-
YAML.load_file(removed_migrations_path)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
56
|
protected
|
|
105
57
|
|
|
106
58
|
def find_root_with_subfolder(subfolder)
|
data/lib/pages_core/pub_sub.rb
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "pages_core/static_cache/null_handler"
|
|
4
|
+
require "pages_core/static_cache/page_cache_handler"
|
|
5
|
+
require "pages_core/static_cache/varnish_handler"
|
|
6
|
+
|
|
7
|
+
module PagesCore
|
|
8
|
+
module StaticCache
|
|
9
|
+
class << self
|
|
10
|
+
def handler
|
|
11
|
+
PagesCore.config.static_cache_handler || default_handler
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def default_handler
|
|
17
|
+
if ENV["VARNISH_URL"]
|
|
18
|
+
return PagesCore::StaticCache::VarnishHandler.new(ENV["VARNISH_URL"])
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# PagesCore::StaticCache::NullHandler.new
|
|
22
|
+
PagesCore::StaticCache::PageCacheHandler.new
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PagesCore
|
|
4
|
+
module StaticCache
|
|
5
|
+
class NullHandler
|
|
6
|
+
def cache_page(_controller, _request, _response); end
|
|
7
|
+
|
|
8
|
+
def cache_page_permanently(_controller, _request, _response); end
|
|
9
|
+
|
|
10
|
+
def purge!; end
|
|
11
|
+
|
|
12
|
+
def sweep!; end
|
|
13
|
+
|
|
14
|
+
def sweep_now!; end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PagesCore
|
|
4
|
+
module StaticCache
|
|
5
|
+
class PageCacheHandler
|
|
6
|
+
def cache_page(controller, _request, _response)
|
|
7
|
+
controller.class.page_cache_directory = page_cache_directory
|
|
8
|
+
controller.cache_page
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def cache_page_permanently(controller, _request, _response)
|
|
12
|
+
controller.class.page_cache_directory = permanent_page_cache_directory
|
|
13
|
+
controller.cache_page
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def purge!
|
|
17
|
+
return unless PagesCore::CacheSweeper.enabled
|
|
18
|
+
|
|
19
|
+
clear_directory(page_cache_directory)
|
|
20
|
+
clear_directory(permanent_page_cache_directory)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def sweep!
|
|
24
|
+
return unless PagesCore::CacheSweeper.enabled
|
|
25
|
+
|
|
26
|
+
PagesCore::SweepCacheJob.perform_later
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def sweep_now!
|
|
30
|
+
return unless PagesCore::CacheSweeper.enabled
|
|
31
|
+
|
|
32
|
+
clear_directory(page_cache_directory)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def cache_root
|
|
38
|
+
Rails.root.join("public")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def clear_directory(path)
|
|
42
|
+
return unless File.exist?(path)
|
|
43
|
+
|
|
44
|
+
FileUtils.rm_rf(Dir.glob("#{path}/*"))
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def page_cache_directory
|
|
48
|
+
cache_root.join("static_cache")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def permanent_page_cache_directory
|
|
52
|
+
cache_root.join("cache")
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PagesCore
|
|
4
|
+
module StaticCache
|
|
5
|
+
class VarnishHandler
|
|
6
|
+
attr_reader :varnish_url
|
|
7
|
+
|
|
8
|
+
def initialize(varnish_url)
|
|
9
|
+
@varnish_url = varnish_url
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def cache_page(_controller, request, response)
|
|
13
|
+
response.set_header("X-Cache-Tags", "static")
|
|
14
|
+
request.session_options[:skip] = true
|
|
15
|
+
# controller.expires_in 1.hour, public: true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def cache_page_permanently(controller, request, response)
|
|
19
|
+
response.set_header("X-Cache-Tags", "permanent")
|
|
20
|
+
request.session_options[:skip] = true
|
|
21
|
+
controller.expires_in 1.year, public: true
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def purge!
|
|
25
|
+
return unless PagesCore::CacheSweeper.enabled
|
|
26
|
+
|
|
27
|
+
hydra = Typhoeus::Hydra.hydra
|
|
28
|
+
hydra.queue(ban_request("static"))
|
|
29
|
+
hydra.queue(ban_request("permanent"))
|
|
30
|
+
hydra.run
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def sweep!
|
|
34
|
+
return unless PagesCore::CacheSweeper.enabled
|
|
35
|
+
|
|
36
|
+
# PagesCore::SweepCacheJob.perform_later
|
|
37
|
+
sweep_now!
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def sweep_now!
|
|
41
|
+
return unless PagesCore::CacheSweeper.enabled
|
|
42
|
+
|
|
43
|
+
ban_request("static").run
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def ban_request(cache_tag)
|
|
49
|
+
Typhoeus::Request.new(varnish_url,
|
|
50
|
+
method: :ban,
|
|
51
|
+
headers: { "X-Cache-Tags": cache_tag })
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
data/lib/pages_core/templates.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "pages_core/templates/block_configuration"
|
|
2
4
|
require "pages_core/templates/configuration_proxy"
|
|
3
5
|
require "pages_core/templates/configuration_handler"
|
|
@@ -16,8 +18,8 @@ module PagesCore
|
|
|
16
18
|
|
|
17
19
|
def template_paths
|
|
18
20
|
[
|
|
19
|
-
PagesCore.plugin_root.join("app
|
|
20
|
-
Rails.root.join("app
|
|
21
|
+
PagesCore.plugin_root.join("app/views/pages/templates"),
|
|
22
|
+
Rails.root.join("app/views/pages/templates")
|
|
21
23
|
]
|
|
22
24
|
end
|
|
23
25
|
|
|
@@ -28,7 +30,7 @@ module PagesCore
|
|
|
28
30
|
.uniq
|
|
29
31
|
.compact
|
|
30
32
|
.sort
|
|
31
|
-
.map { |f| f.gsub(/\.[\w
|
|
33
|
+
.map { |f| f.gsub(/\.[\w.]+$/, "") }
|
|
32
34
|
end
|
|
33
35
|
|
|
34
36
|
def template_files_in_dir(dir)
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module Templates
|
|
3
5
|
# Configuration for the blocks on an individual template
|
|
4
6
|
class BlockConfiguration
|
|
5
7
|
attr_reader :name, :title, :description, :optional, :enforced
|
|
8
|
+
|
|
6
9
|
def small?
|
|
7
10
|
@size == :small
|
|
8
11
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module Templates
|
|
3
5
|
# = Template configuration
|
|
@@ -96,7 +98,7 @@ module PagesCore
|
|
|
96
98
|
enabled_blocks sub_template tags dates]
|
|
97
99
|
end
|
|
98
100
|
|
|
99
|
-
def configure_block(tpl_name, block_name, title =
|
|
101
|
+
def configure_block(tpl_name, block_name, title = nil, options = {})
|
|
100
102
|
block_name = block_name.to_sym
|
|
101
103
|
opts = {
|
|
102
104
|
title: title || block_name.to_s.humanize,
|
|
@@ -115,6 +117,7 @@ module PagesCore
|
|
|
115
117
|
unless valid_template_options.include?(setting)
|
|
116
118
|
raise "Invalid template configuration value: #{setting.inspect}"
|
|
117
119
|
end
|
|
120
|
+
|
|
118
121
|
set(
|
|
119
122
|
template_path(template_name),
|
|
120
123
|
template_config(setting, value, options)
|
|
@@ -151,6 +154,7 @@ module PagesCore
|
|
|
151
154
|
|
|
152
155
|
def template_path(name)
|
|
153
156
|
return [:default] if name == :_defaults
|
|
157
|
+
|
|
154
158
|
[:templates, name]
|
|
155
159
|
end
|
|
156
160
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module Templates
|
|
3
5
|
class ConfigurationHandler
|
|
@@ -33,7 +35,7 @@ module PagesCore
|
|
|
33
35
|
|
|
34
36
|
def proxy(proxy_block = nil, &callback)
|
|
35
37
|
proxy_object = PagesCore::Templates::ConfigurationProxy.new(callback)
|
|
36
|
-
proxy_block
|
|
38
|
+
proxy_block&.call(proxy_object)
|
|
37
39
|
proxy_object
|
|
38
40
|
end
|
|
39
41
|
|
|
@@ -56,7 +58,7 @@ module PagesCore
|
|
|
56
58
|
def get(*path)
|
|
57
59
|
@configuration ||= {}
|
|
58
60
|
path.inject(@configuration) do |value, key|
|
|
59
|
-
value
|
|
61
|
+
value.is_a?(Hash) && value&.key?(key) ? value[key] : nil
|
|
60
62
|
end
|
|
61
63
|
end
|
|
62
64
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module Templates
|
|
3
5
|
class TemplateConfiguration
|
|
@@ -7,7 +9,9 @@ module PagesCore
|
|
|
7
9
|
def all_blocks
|
|
8
10
|
(config.get(:default, :blocks).keys +
|
|
9
11
|
all_templates.map { |t| configured_block_names(t) } +
|
|
10
|
-
all_templates.map
|
|
12
|
+
all_templates.map do |t|
|
|
13
|
+
enabled_block_names(t)
|
|
14
|
+
end).flatten.compact.uniq
|
|
11
15
|
end
|
|
12
16
|
|
|
13
17
|
def all_templates
|
|
@@ -94,18 +98,19 @@ module PagesCore
|
|
|
94
98
|
|
|
95
99
|
def default_block_options(block_name)
|
|
96
100
|
{
|
|
97
|
-
title:
|
|
101
|
+
title: block_name.to_s.humanize,
|
|
98
102
|
optional: true,
|
|
99
|
-
size:
|
|
103
|
+
size: :small
|
|
100
104
|
}
|
|
101
105
|
end
|
|
102
106
|
end
|
|
103
107
|
|
|
104
108
|
class << self
|
|
105
109
|
def configure(options = {}, &_block)
|
|
106
|
-
|
|
110
|
+
case options[:reset]
|
|
111
|
+
when :defaults
|
|
107
112
|
load_default_configuration
|
|
108
|
-
|
|
113
|
+
when true
|
|
109
114
|
@configuration = PagesCore::Templates::Configuration.new
|
|
110
115
|
end
|
|
111
116
|
yield configuration if block_given?
|
|
@@ -149,26 +154,26 @@ module PagesCore
|
|
|
149
154
|
|
|
150
155
|
def default_blocks
|
|
151
156
|
{
|
|
152
|
-
name:
|
|
153
|
-
body:
|
|
157
|
+
name: { size: :field, class: "page_title" },
|
|
158
|
+
body: { size: :large },
|
|
154
159
|
headline: { size: :field },
|
|
155
|
-
excerpt:
|
|
156
|
-
boxout:
|
|
160
|
+
excerpt: {},
|
|
161
|
+
boxout: {}
|
|
157
162
|
}.merge(default_meta_blocks)
|
|
158
163
|
end
|
|
159
164
|
|
|
160
165
|
def default_meta_blocks
|
|
161
166
|
{
|
|
162
|
-
meta_title:
|
|
163
|
-
meta_description:
|
|
164
|
-
open_graph_title:
|
|
167
|
+
meta_title: { size: :field },
|
|
168
|
+
meta_description: { size: :small },
|
|
169
|
+
open_graph_title: { size: :field },
|
|
165
170
|
open_graph_description: { size: :small }
|
|
166
171
|
}
|
|
167
172
|
end
|
|
168
173
|
|
|
169
174
|
def default_block_configuration(default)
|
|
170
175
|
default.blocks do |block|
|
|
171
|
-
default_blocks.
|
|
176
|
+
default_blocks.each_key do |name|
|
|
172
177
|
block.send(
|
|
173
178
|
name,
|
|
174
179
|
template_block_localization("#{name}.name"),
|