44 lines
1.3 KiB
Ruby
44 lines
1.3 KiB
Ruby
|
|
class PseudSweeper < ActionController::Caching::Sweeper
|
||
|
|
observe User, Pseud
|
||
|
|
|
||
|
|
def after_create(record)
|
||
|
|
record.add_to_autocomplete if record.is_a?(Pseud)
|
||
|
|
end
|
||
|
|
|
||
|
|
def before_update(record)
|
||
|
|
if record.changed.include?("name") || record.changed.include?("login")
|
||
|
|
if record.is_a?(User)
|
||
|
|
record.pseuds.each(&:remove_stale_from_autocomplete_before_save)
|
||
|
|
else
|
||
|
|
if record.user.saved_changes.any?
|
||
|
|
# In this case, `remove_stale_from_autocomplete` needs to look at the
|
||
|
|
# changed attributes on the pseud's user as if it were an after_*
|
||
|
|
# callback on the user instead of a before_* callback on the pseud.
|
||
|
|
record.remove_stale_from_autocomplete
|
||
|
|
else
|
||
|
|
record.remove_stale_from_autocomplete_before_save
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
def after_update(record)
|
||
|
|
if record.saved_changes.keys.include?("name") || record.saved_changes.keys.include?("login")
|
||
|
|
if record.is_a?(User)
|
||
|
|
record.pseuds.each do |pseud|
|
||
|
|
# have to reload the pseud from the db otherwise it has the outdated login
|
||
|
|
pseud.reload
|
||
|
|
pseud.add_to_autocomplete
|
||
|
|
end
|
||
|
|
else
|
||
|
|
record.add_to_autocomplete
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
def before_destroy(record)
|
||
|
|
record.remove_from_autocomplete if record.is_a?(Pseud)
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|