module Sequel::Plugins::Revisions::InstanceMethods

Public Instance Methods

after_create() click to toggle source
Calls superclass method
# File lib/sequel/plugins/revisions.rb, line 88
def after_create
  super
  track_changes(:create) if model.revisions_on? :create
end
before_destroy() click to toggle source
Calls superclass method
# File lib/sequel/plugins/revisions.rb, line 83
def before_destroy
  super
  track_changes(:destroy) if model.revisions_on? :destroy
end
before_update() click to toggle source
Calls superclass method
# File lib/sequel/plugins/revisions.rb, line 78
def before_update
  super
  track_changes(:update) if model.revisions_on? :update
end

Private Instance Methods

track_changes(action) click to toggle source
# File lib/sequel/plugins/revisions.rb, line 95
def track_changes(action)
  case action
  when :update
    return if changed_columns.empty?
    # Map the changed fields into an object
    changes = changed_columns.inject({}) do |obj, key|
      obj[key] = column_change(key)
      obj
    end
  when :create
    changes = (columns - model.revisions_exclude).inject({}) do |obj, key|
      obj[key] = [nil, send(key)]
      obj
    end
  when :destroy
    changes = (columns - model.revisions_exclude).inject({}) do |obj, key|
      obj[key] = [send(key), nil]
      obj
    end
  end

  #
  meta = model.revisions_meta.call() unless model.revisions_meta.nil?

  if model.revisions_embedded_in.nil?
    add_revision(changes: changes, action: action, meta: meta)
  else
    trackable = self.send(model.revisions_embedded_in)
    add_revision(changes: changes, action: action, meta: meta, trackable: trackable)
  end
end