2809: Merge branch 'master' into 2809-workbench-rails4 refs #2809
[arvados.git] / services / api / lib / has_uuid.rb
similarity index 52%
rename from services/api/lib/assign_uuid.rb
rename to services/api/lib/has_uuid.rb
index 50738aa65577fa1fa44bd16b258d9ecdf646ee9f..d9c819889f543f1acbc3ccfafc5a370137efb970 100644 (file)
@@ -1,8 +1,11 @@
-module AssignUuid
+module HasUuid
 
   def self.included(base)
     base.extend(ClassMethods)
     base.before_create :assign_uuid
+    base.before_destroy :destroy_permission_links
+    base.has_many :links_via_head, class_name: 'Link', foreign_key: :head_uuid, primary_key: :uuid, conditions: "not (link_class = 'permission')", dependent: :restrict
+    base.has_many :links_via_tail, class_name: 'Link', foreign_key: :tail_uuid, primary_key: :uuid, conditions: "not (link_class = 'permission')", dependent: :restrict
   end
 
   module ClassMethods
@@ -28,4 +31,9 @@ module AssignUuid
     return true if uuid and current_user and current_user.is_admin
     self.uuid = self.class.generate_uuid
   end
+
+  def destroy_permission_links
+    Link.destroy_all(['link_class=? and (head_uuid=? or tail_uuid=?)',
+                      'permission', uuid, uuid])
+  end
 end