From ae61c51af37375f40fb62fdb303b555c660cbf59 Mon Sep 17 00:00:00 2001 From: Tony Guntharp Date: Wed, 18 Mar 2026 13:38:48 -0500 Subject: [PATCH] feat: add Rails install generator rails generate paper_trail_manager:install - Adds route to config/routes.rb (skips if already present) - Creates config/initializers/paper_trail_manager.rb with commented examples for all configuration options - Idempotent: safe to run multiple times - Post-install instructions printed to console Closes #68 --- .../install/install_generator.rb | 36 +++++++++++++++++++ .../install/templates/initializer.rb | 35 ++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 lib/generators/paper_trail_manager/install/install_generator.rb create mode 100644 lib/generators/paper_trail_manager/install/templates/initializer.rb diff --git a/lib/generators/paper_trail_manager/install/install_generator.rb b/lib/generators/paper_trail_manager/install/install_generator.rb new file mode 100644 index 0000000..1744e28 --- /dev/null +++ b/lib/generators/paper_trail_manager/install/install_generator.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'rails/generators' + +class PaperTrailManager + class InstallGenerator < Rails::Generators::Base + source_root File.expand_path('templates', __dir__) + desc 'Install PaperTrailManager: add route and create initializer' + + def add_route + route_string = "resources :changes, controller: 'paper_trail_manager/changes'" + routes_file = File.join(destination_root, 'config/routes.rb') + + if File.exist?(routes_file) && File.read(routes_file).include?(route_string) + say_status :skip, 'Route already exists', :yellow + else + route route_string + end + end + + def create_initializer + template 'initializer.rb', 'config/initializers/paper_trail_manager.rb' + end + + def show_post_install + say '' + say '✅ PaperTrailManager installed!', :green + say '' + say 'Next steps:' + say ' 1. Restart your Rails server' + say ' 2. Visit /changes to browse your PaperTrail version history' + say ' 3. Edit config/initializers/paper_trail_manager.rb to customize authorization' + say '' + end + end +end diff --git a/lib/generators/paper_trail_manager/install/templates/initializer.rb b/lib/generators/paper_trail_manager/install/templates/initializer.rb new file mode 100644 index 0000000..4e6a674 --- /dev/null +++ b/lib/generators/paper_trail_manager/install/templates/initializer.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +# PaperTrailManager configuration +# See: https://github.com/DamageLabs/paper_trail_manager + +# Control who can view the changes index. +# PaperTrailManager.allow_index_when do |controller| +# controller.current_user.present? +# end + +# Control who can view individual change details. +# Defaults to the allow_index rules if not set separately. +# PaperTrailManager.allow_show_when do |controller, version| +# controller.current_user.present? +# end + +# Control who can revert changes. +# PaperTrailManager.allow_revert_when do |controller, version| +# controller.current_user&.admin? +# end + +# Configure how to look up users referenced in PaperTrail's whodunnit column. +# PaperTrailManager.whodunnit_class = User +# PaperTrailManager.whodunnit_name_method = :name + +# Specify a method to identify items on the index page. +# PaperTrailManager.item_name_method = :name + +# Customize the user path helper (set to nil to disable user links). +# PaperTrailManager.user_path_method = :user_path + +# When embedding inside another Rails engine: +# PaperTrailManager.base_controller = 'MyEngine::ApplicationController' +# PaperTrailManager.route_helpers = MyEngine::Engine.routes.url_helpers +# PaperTrailManager.layout = 'my_engine/application'