module ActiveRecord::Acts::List::NoUpdate

def self.included(base)

def self.included(base)
  base.extend ClassMethods
end

def act_as_list_no_update?

def act_as_list_no_update?
  NoUpdate.applied_to?(self.class)
end

def add_klass(klass)

def add_klass(klass)
  extracted_klasses[klass] = 0 unless extracted_klasses.key?(klass)
  extracted_klasses[klass] += 1
end

def applied_to?(klass)

def applied_to?(klass)
  !(klass.ancestors & extracted_klasses.keys).empty?
end

def apply_to(klasses)

def apply_to(klasses)
  klasses.map {|klass| add_klass(klass)}
  yield
ensure
  klasses.map {|klass| remove_klass(klass)}
end

def extracted_klasses

def extracted_klasses
  Thread.current[:act_as_list_no_update] ||= {}
end

def remove_klass(klass)

def remove_klass(klass)
  extracted_klasses[klass] -= 1
  extracted_klasses.delete(klass) if extracted_klasses[klass] <= 0
end