From 2a9e89e3be5e598f6dccb07eb10a51b024c51b50 Mon Sep 17 00:00:00 2001
From: Alexander Olofsson <alexander.olofsson@liu.se>
Date: Mon, 7 Oct 2024 15:30:50 +0200
Subject: [PATCH] Prepare for zeitwerk

---
 lib/foreman_wds/engine.rb   | 62 ++-----------------------------------
 lib/foreman_wds/register.rb | 42 +++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 59 deletions(-)
 create mode 100644 lib/foreman_wds/register.rb

diff --git a/lib/foreman_wds/engine.rb b/lib/foreman_wds/engine.rb
index 4bbedc7..e7499ec 100644
--- a/lib/foreman_wds/engine.rb
+++ b/lib/foreman_wds/engine.rb
@@ -15,66 +15,10 @@ module ForemanWds
       end
     end
 
-    initializer 'foreman_wds.register_plugin', before: :finisher_hook do |_app|
-      Foreman::Plugin.register :foreman_wds do
-        requires_foreman '>= 1.16'
-
-        security_block :foreman_wds do
-          permission :view_wds_servers, {
-            wds_servers: %i[index show auto_complete_search wds_clients wds_images]
-          }, resource_type: 'WdsServer'
-          permission :create_wds_servers, {
-            wds_servers: %i[create new]
-          }, resource_type: 'WdsServer'
-          permission :edit_wds_servers, {
-            wds_servers: %i[edit update test_connection refresh_cache delete_wds_client]
-          }, resource_type: 'WdsServer'
-          permission :destroy_wds_servers, {
-            wds_servers: %i[destroy]
-          }, resource_type: 'WdsServer'
-
-          # permission :edit_hosts, {
-          #   hosts: %i[wds_server_selected wds_image_selected]
-          # }, resource_type: 'Host'
-        end
-
-        Foreman::AccessControl.permission(:edit_hosts).actions.push(
-          'hosts/wds_server_selected', 'hosts/wds_image_selected'
-        )
-
-        role 'WDS Server Manager',
-             %i[view_wds_servers create_wds_servers edit_wds_servers destroy_wds_servers],
-             'Role granting permissions full management permissions for WDS servers.'
-
-        add_all_permissions_to_default_roles
-
-        # add menu entry
-        menu :top_menu, :wds_servers,
-             url_hash: { controller: :wds_servers, action: :index },
-             caption: N_('WDS Servers'),
-             parent: :infrastructure_menu
-
-        register_facet ForemanWds::WdsFacet, :wds_facet
-        parameter_filter Host::Managed, wds_facet_attributes: %i[wds_server_id boot_image_name install_image_name]
-
-        provision_method 'wds', N_('WDS Server')
-        template_labels 'wds_unattend' => N_('WDS Unattend file template')
-      end
-    end
-
-    assets_to_precompile =
-      Dir.chdir(root) do
-        Dir['app/assets/javascripts/**/*'].map do |f|
-          f.split(File::SEPARATOR, 4).last
-        end
+    initializer 'foreman_wds.register_plugin', before: :finisher_hook do |app|
+      app.reloader.to_prepare do
+        require_relative 'register'
       end
-
-    initializer 'foreman_wds.assets.precompile' do |app|
-      app.config.assets.precompile += assets_to_precompile
-    end
-
-    initializer 'foreman_wds.configure_assets', group: :assets do
-      SETTINGS[:foreman_wds] = { assets: { precompile: assets_to_precompile } }
     end
 
     config.to_prepare do
diff --git a/lib/foreman_wds/register.rb b/lib/foreman_wds/register.rb
new file mode 100644
index 0000000..9840191
--- /dev/null
+++ b/lib/foreman_wds/register.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+Foreman::Plugin.register :foreman_wds do
+  requires_foreman '>= 3.12'
+
+  security_block :foreman_wds do
+    permission :view_wds_servers, {
+      wds_servers: %i[index show auto_complete_search wds_clients wds_images]
+    }, resource_type: 'WdsServer'
+    permission :create_wds_servers, {
+      wds_servers: %i[create new]
+    }, resource_type: 'WdsServer'
+    permission :edit_wds_servers, {
+      wds_servers: %i[edit update test_connection refresh_cache delete_wds_client]
+    }, resource_type: 'WdsServer'
+    permission :destroy_wds_servers, {
+      wds_servers: %i[destroy]
+    }, resource_type: 'WdsServer'
+  end
+
+  Foreman::AccessControl.permission(:edit_hosts).actions.push(
+    'hosts/wds_server_selected', 'hosts/wds_image_selected'
+  )
+
+  role 'WDS Server Manager',
+       %i[view_wds_servers create_wds_servers edit_wds_servers destroy_wds_servers],
+       'Role granting permissions full management permissions for WDS servers.'
+
+  add_all_permissions_to_default_roles
+
+  # add menu entry
+  menu :top_menu, :wds_servers,
+       url_hash: { controller: :wds_servers, action: :index },
+       caption: N_('WDS Servers'),
+       parent: :infrastructure_menu
+
+  register_facet ForemanWds::WdsFacet, :wds_facet
+  parameter_filter Host::Managed, wds_facet_attributes: %i[wds_server_id boot_image_name install_image_name]
+
+  provision_method 'wds', N_('WDS Server')
+  template_labels 'wds_unattend' => N_('WDS Unattend file template')
+end
-- 
GitLab