module Mongoid::History::Trackable::ClassMethods

Public Instance Methods

disable_tracking() { || ... } click to toggle source
# File lib/mongoid/history/trackable.rb, line 55
def disable_tracking
  original_flag = Mongoid::History.store[track_history_flag]
  Mongoid::History.store[track_history_flag] = false
  yield if block_given?
ensure
  Mongoid::History.store[track_history_flag] = original_flag if block_given?
end
Also aliased as: disable_tracking!
disable_tracking!()
Alias for: disable_tracking
dynamic_enabled?() click to toggle source
# File lib/mongoid/history/trackable.rb, line 51
def dynamic_enabled?
  Mongoid::Compatibility::Version.mongoid3? || (self < Mongoid::Attributes::Dynamic).present?
end
enable_tracking() { || ... } click to toggle source
# File lib/mongoid/history/trackable.rb, line 63
def enable_tracking
  original_flag = Mongoid::History.store[track_history_flag]
  Mongoid::History.store[track_history_flag] = true
  yield if block_given?
ensure
  Mongoid::History.store[track_history_flag] = original_flag if block_given?
end
Also aliased as: enable_tracking!
enable_tracking!()
Alias for: enable_tracking
history_settings(options = {}) click to toggle source
# File lib/mongoid/history/trackable.rb, line 39
def history_settings(options = {})
  options = Mongoid::History.default_settings.merge(options.symbolize_keys)
  options = options.slice(*Mongoid::History.default_settings.keys)
  options[:paranoia_field] = aliased_fields[options[:paranoia_field].to_s] || options[:paranoia_field].to_s
  Mongoid::History.trackable_settings ||= {}
  Mongoid::History.trackable_settings[name.to_sym] = options
end
track_history(options = {}) click to toggle source
# File lib/mongoid/history/trackable.rb, line 7
def track_history(options = {})
  extend RelationMethods

  history_options = Mongoid::History::Options.new(self, options)

  field history_options.options[:version_field].to_sym, type: Integer

  unless history_options.options[:modifier_field].nil?
    belongs_to_modifier_options = { class_name: Mongoid::History.modifier_class_name }
    belongs_to_modifier_options[:inverse_of] = history_options.options[:modifier_field_inverse_of] if history_options.options.key?(:modifier_field_inverse_of)
    belongs_to_modifier_options[:optional] = true if history_options.options[:modifier_field_optional] && Mongoid::Compatibility::Version.mongoid6_or_newer?
    belongs_to history_options.options[:modifier_field].to_sym, belongs_to_modifier_options
  end

  include MyInstanceMethods
  extend SingletonMethods

  delegate :history_trackable_options, to: 'self.class'
  delegate :track_history?, to: 'self.class'

  callback_options = history_options.options.slice(:if, :unless)
  around_update :track_update, **callback_options if history_options.options[:track_update]
  around_create :track_create, **callback_options if history_options.options[:track_create]
  around_destroy :track_destroy, **callback_options if history_options.options[:track_destroy]

  unless respond_to? :mongoid_history_options
    class_attribute :mongoid_history_options, instance_accessor: false
  end

  self.mongoid_history_options = history_options
end
track_history?() click to toggle source
# File lib/mongoid/history/trackable.rb, line 47
def track_history?
  Mongoid::History.enabled? && Mongoid::History.store[track_history_flag] != false
end
track_history_flag() click to toggle source
# File lib/mongoid/history/trackable.rb, line 74
def track_history_flag
  "mongoid_history_#{name.underscore}_trackable_enabled".to_sym
end
tracker_class() click to toggle source
# File lib/mongoid/history/trackable.rb, line 78
def tracker_class
  klass = history_trackable_options[:tracker_class_name] || Mongoid::History.tracker_class_name
  klass.is_a?(Class) ? klass : klass.to_s.camelize.constantize
end