lib/mongoid/history.rb
require 'easy_diff'
require 'mongoid/compatibility'
require 'mongoid/history/attributes/base'
require 'mongoid/history/attributes/create'
require 'mongoid/history/attributes/update'
require 'mongoid/history/attributes/destroy'
require 'mongoid/history/options'
require 'mongoid/history/version'
require 'mongoid/history/tracker'
require 'mongoid/history/trackable'
module Mongoid
module History
GLOBAL_TRACK_HISTORY_FLAG = 'mongoid_history_trackable_enabled'.freeze
class << self
attr_accessor :tracker_class_name
attr_accessor :trackable_settings
attr_accessor :modifier_class_name
attr_accessor :current_user_method
def disable
original_flag = store[GLOBAL_TRACK_HISTORY_FLAG]
store[GLOBAL_TRACK_HISTORY_FLAG] = false
yield if block_given?
ensure
store[GLOBAL_TRACK_HISTORY_FLAG] = original_flag if block_given?
end
def enable
original_flag = store[GLOBAL_TRACK_HISTORY_FLAG]
store[GLOBAL_TRACK_HISTORY_FLAG] = true
yield if block_given?
ensure
store[GLOBAL_TRACK_HISTORY_FLAG] = original_flag if block_given?
end
alias disable! disable
alias enable! enable
def enabled?
store[GLOBAL_TRACK_HISTORY_FLAG] != false
end
def store
defined?(RequestStore) ? RequestStore.store : Thread.current
end
def default_settings
@default_settings ||= { paranoia_field: 'deleted_at' }
end
def trackable_class_settings(trackable_class)
trackable_settings[trackable_class.name.to_sym] || default_settings
end
def reset!
Mongoid::History.modifier_class_name = 'User'
Mongoid::History.trackable_settings = {}
Mongoid::History.current_user_method ||= :current_user
Mongoid.models.each do |model|
next unless model.included_modules.include? Mongoid::History::Trackable
model.singleton_class.class_eval do
# Inverse of class_attribute
%i[mongoid_history_options
mongoid_history_options=
mongoid_history_options?].each { |m| remove_possible_method(m) }
end
end
end
end
end
end
Mongoid::History.reset!