module Sequel::Plugins::HasPaperTrail

Add Paper Trail versioning callbacks to model.

Usage:

# Enable versioning for all models.
Sequel::Model.plugin :has_paper_trail

# Make the Album class be able to versioning.
Album.plugin :has_paper_trail, item_class_name: Album, class_name: 'Album::Version'

Public Class Methods

configure(model, opts = {}) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/sequel/plugins/has_paper_trail.rb, line 15
def self.configure(model, opts = {})
  paper_trail_item_class_name = opts.fetch(:item_class_name) { model.name }
  paper_trail_version_class_name = opts.fetch(:class_name) { 'SequelPaperTrail::Version' }

  model.plugin :dirty
  model.one_to_many :versions,
                    class: paper_trail_version_class_name,
                    key: :item_id,
                    conditions: { item_type: paper_trail_item_class_name }

  model.instance_eval do
    @paper_trail_item_class_name = paper_trail_item_class_name
    @paper_trail_version_class_name = paper_trail_version_class_name
  end
end