OSDN Git Service

fix play leaf
[pettanr/pettanr.git] / lib / peta / binder.rb
index 43323c0..76872da 100644 (file)
@@ -29,6 +29,59 @@ module Peta
       end
     end
     
+    def self.collect_element_value elements, name
+      elements.map {|e|
+        if e['_destroy'] or e[:_destroy]
+          nil
+        else
+          e[name]
+        end
+      }
+    end
+    
+    def self.validate_serial ary, offset = 0
+      i = offset
+      ary.compact.sort.each do |n|
+        break false unless n == i
+        i += 1
+      end
+      ary.compact.size == i - offset
+    end
+    
+    def self.validate_element_serial elements, name, offset = 0
+      self.validate_serial(self.collect_element_value(elements, name), offset)
+    end
+    
+    def self.validate_elements_serial c
+      c.map {|conf|
+        self.validate_element_serial(conf[:elements], conf[:name], conf[:offset]) ? nil : false
+      }.compact.empty?
+    end
+    
+    def validate_serial_list
+      [
+        {:elements => self.leafs_items, :name => :t, :offset => 0}, 
+        {:elements => self.leafs_items, :name => :z, :offset => 1}
+      ]
+    end
+    
+    def validate_child
+  #    r1 = Panel.validate_elements_id validate_id_list
+      self.class.validate_elements_serial validate_serial_list
+    end
+    
+    def destroy_with_leafs
+      res = false
+      self.class.transaction do
+        self.leafs_items.each do |leaf|
+          raise ActiveRecord::Rollback unless leaf.destroy_and_shorten
+        end
+        raise ActiveRecord::Rollback unless self.destroy
+        res = true
+      end
+      res
+    end
+    
   end
 end