From 31de0fe382db138f342a42df59774f1111d38fc1 Mon Sep 17 00:00:00 2001 From: Jeremy Friesen Date: Wed, 4 Oct 2023 10:49:31 -0400 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Introduce=20Hyku::Applicat?= =?UTF-8?q?ion.theme=5Fview=5Fpath=5Froots?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With the introduction of [HykuKnapsack][1], we are adjusting how we create instances of Hyku. Namely we don't clone Hyku but instead we incorporate Hyku as a submodule into a Knapsack. The Knapsack is a Rails engine that is mounted in the Hyku application. What this means is that when we want to Prior to this commit, the only way to adjust themed views would have been to add them to the Rails application (e.g. Hyku) directly. Which would work in a non-Knapsack ecosystem. However, with Knapsack we need a means of saying "Hey, for themes we want to be able to add/adjust views within the knapsack." Hence this change. [1]: https://github.com/samvera-labs/hyku_knapsack --- .../concerns/hyrax/works_controller_behavior.rb | 6 ++++-- .../hyrax/contact_form_controller.rb | 6 ++++-- app/controllers/hyrax/pages_controller.rb | 6 ++++-- config/application.rb | 17 +++++++++++++++++ 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/app/controllers/concerns/hyrax/works_controller_behavior.rb b/app/controllers/concerns/hyrax/works_controller_behavior.rb index f5b51f64f..91f005843 100644 --- a/app/controllers/concerns/hyrax/works_controller_behavior.rb +++ b/app/controllers/concerns/hyrax/works_controller_behavior.rb @@ -505,8 +505,10 @@ def available_admin_sets def inject_show_theme_views if show_page_theme && show_page_theme != 'default_show' original_paths = view_paths - show_theme_view_path = Rails.root.join('app', 'views', "themes", show_page_theme.to_s) - prepend_view_path(show_theme_view_path) + Hyku::Application.theme_view_path_roots.each do |root| + show_theme_view_path = File.join(root, 'app', 'views', "themes", show_page_theme.to_s) + prepend_view_path(show_theme_view_path) + end yield # rubocop:disable Lint/UselessAssignment, Layout/SpaceAroundOperators, Style/RedundantParentheses # Do NOT change this line. This is calling the Rails view_paths=(paths) method and not a variable assignment. diff --git a/app/controllers/hyrax/contact_form_controller.rb b/app/controllers/hyrax/contact_form_controller.rb index a420f82d4..c941ee191 100644 --- a/app/controllers/hyrax/contact_form_controller.rb +++ b/app/controllers/hyrax/contact_form_controller.rb @@ -102,8 +102,10 @@ def collections(rows: 6) def inject_theme_views if home_page_theme && home_page_theme != 'default_home' original_paths = view_paths - home_theme_view_path = Rails.root.join('app', 'views', "themes", home_page_theme.to_s) - prepend_view_path(home_theme_view_path) + Hyku::Application.theme_view_path_roots.each do |root| + home_theme_view_path = File.join(root, 'app', 'views', "themes", home_page_theme.to_s) + prepend_view_path(home_theme_view_path) + end yield # rubocop:disable Lint/UselessAssignment, Layout/SpaceAroundOperators, Style/RedundantParentheses # Do NOT change this line. This is calling the Rails view_paths=(paths) method and not a variable assignment. diff --git a/app/controllers/hyrax/pages_controller.rb b/app/controllers/hyrax/pages_controller.rb index cdfd8d0a7..b47e19856 100644 --- a/app/controllers/hyrax/pages_controller.rb +++ b/app/controllers/hyrax/pages_controller.rb @@ -101,8 +101,10 @@ def collections(rows: 6) def inject_theme_views if home_page_theme && home_page_theme != 'default_home' original_paths = view_paths - home_theme_view_path = Rails.root.join('app', 'views', "themes", home_page_theme.to_s) - prepend_view_path(home_theme_view_path) + Hyku::Application.theme_view_path_roots.each do |root| + home_theme_view_path = File.join(root, 'app', 'views', "themes", home_page_theme.to_s) + prepend_view_path(home_theme_view_path) + end yield # rubocop:disable Lint/UselessAssignment, Layout/SpaceAroundOperators, Style/RedundantParentheses # Do NOT change this method. This is an override of the view_paths= method and not a variable assignment. diff --git a/config/application.rb b/config/application.rb index 3af68f13f..616515c97 100644 --- a/config/application.rb +++ b/config/application.rb @@ -62,6 +62,22 @@ class Application < Rails::Application # IiifPrint::SplitPdfs::AdventistPagesToJpgsSplitter config.autoload_paths.unshift("#{Rails.root}/lib") + ## + # @return [Array] an array of strings in which we should be looking for theme view + # candidates. + # @see Hyrax::WorksControllerBehavior + # @see Hyrax::ContactFormController + # @see Hyrax::PagesController + # @see https://api.rubyonrails.org/classes/ActionView/ViewPaths.html#method-i-prepend_view_path + # + # @see .path_for + # @see + def self.theme_view_path_roots + returning_value = [Rails.root.to_s] + returning_value.push HykuKnapsack::Engine.root.to_s if defined?(HykuKnapsack) + returning_value + end + ## # @api public # @@ -69,6 +85,7 @@ class Application < Rails::Application # # @return [String] the path to the file, favoring those found in the knapsack but falling back # to those in the Rails.root. + # @see .theme_view_path_roots def self.path_for(relative_path) if defined?(HykuKnapsack) engine_path = HykuKnapsack::Engine.root.join(relative_path)