Skip to content

Instantly share code, notes, and snippets.

@tokumine
Forked from anonymous/gist:202134
Created October 5, 2009 13:59
Show Gist options
  • Save tokumine/202138 to your computer and use it in GitHub Desktop.
Save tokumine/202138 to your computer and use it in GitHub Desktop.
module VersioningMethods
def self.included(klass)
klass.instance_eval <<-EOF
def deleted_list
deleted_item_list = []
Version.all.sort_by{ |version| version[:created_at] }.reverse!.each do |version|
if version.item_type == "#{klass.name}" && version.event == 'destroy'
deleted_item_list << version.reify
end
end
return deleted_item_list
end
EOF
klass.instance_eval <<-EOF
def self.undelete(id)
# Restore the class object
Version.all.each do |version|
if version.item_type == "#{klass.name}" && version.event == 'destroy'
deleted_item = version.reify
if deleted_item.id == id
deleted_item.save
end
end
end
# Now restore it's dependent objects
@@dependents.each do |dep|
Version.all.each do |version|
if version.item_type == dep.to_s && version.event == 'destroy'
deleted_item = version.reify
if deleted_item.department_id == id
dep.undelete(deleted_item.id)
end
end
end
end
end
EOF
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment