My opinionated ruby on rails template
at main 67 lines 1.6 kB view raw
1# frozen_string_literal: true 2 3say 'Setting up Paper Trail for audit logging...', :green 4 5gem 'paper_trail' 6 7say ' Creating initializer...', :cyan 8file 'config/initializers/paper_trail.rb', <<~RUBY 9 PaperTrail.config.enabled = true 10 PaperTrail.config.has_paper_trail_defaults = { 11 on: %i[create update destroy] 12 } 13 PaperTrail.config.version_limit = nil 14RUBY 15 16say ' Creating Auditable concern...', :cyan 17file 'app/models/concerns/auditable.rb', <<~RUBY 18 # frozen_string_literal: true 19 20 module Auditable 21 extend ActiveSupport::Concern 22 23 included do 24 has_paper_trail 25 end 26 27 def audit_trail 28 versions.order(created_at: :desc) 29 end 30 31 def last_modified_by 32 versions.last&.whodunnit 33 end 34 end 35RUBY 36 37say ' Setting up whodunnit tracking...', :cyan 38file 'app/controllers/concerns/set_paper_trail_whodunnit.rb', <<~RUBY 39 # frozen_string_literal: true 40 41 module SetPaperTrailWhodunnit 42 extend ActiveSupport::Concern 43 44 included do 45 before_action :set_paper_trail_whodunnit 46 end 47 48 private 49 50 def user_for_paper_trail 51 current_user&.id&.to_s || 'system' 52 end 53 end 54RUBY 55 56say ' Adding to ApplicationController...', :cyan 57inject_into_class 'app/controllers/application_controller.rb', 'ApplicationController', <<~RUBY 58 include SetPaperTrailWhodunnit 59RUBY 60 61after_bundle do 62 say ' Running Paper Trail install generator...', :cyan 63 rails_command 'generate paper_trail:install' 64end 65 66say 'Paper Trail audit logging configured!', :green 67say ' Include `Auditable` in models you want to track', :cyan