Skip to content

Commit

Permalink
♻️ Introduce Hyku::Application.theme_view_path_roots
Browse files Browse the repository at this point in the history
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
  • Loading branch information
jeremyf committed Dec 13, 2023
1 parent 6930a86 commit 3f385a5
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 6 deletions.
6 changes: 4 additions & 2 deletions app/controllers/concerns/hyrax/works_controller_behavior.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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('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.
Expand Down
6 changes: 4 additions & 2 deletions app/controllers/hyrax/contact_form_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
6 changes: 4 additions & 2 deletions app/controllers/hyrax/pages_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
17 changes: 17 additions & 0 deletions config/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,30 @@ class Application < Rails::Application
# IiifPrint::SplitPdfs::AdventistPagesToJpgsSplitter
config.autoload_paths.unshift("#{Rails.root}/lib")

##
# @return [Array<String>] 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
#
# @param relative_path [String] lookup the relative paths first in the Knapsack then in Hyku.
#
# @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)
Expand Down

0 comments on commit 3f385a5

Please sign in to comment.