OSDN Git Service

t#31484:validate z
authoryasushiito <yas@pen-chan.jp>
Sun, 9 Jun 2013 01:22:59 +0000 (10:22 +0900)
committeryasushiito <yas@pen-chan.jp>
Sun, 9 Jun 2013 01:22:59 +0000 (10:22 +0900)
app/models/panel.rb
spec/models/panel_spec.rb

index 8958978..e343bfa 100644 (file)
@@ -258,33 +258,34 @@ class Panel < ActiveRecord::Base
     }.flatten
   end
   
-  def self.validate_t ary
-    i = 0
-    ary.compact.sort.each do |t|
-      break false unless t == i
+  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
+    ary.compact.size == i - offset
   end
   
-  def self.validate_element_t elements, name
-    Panel.validate_t(Panel.collect_element_value(elements, name))
+  def self.validate_element_serial elements, name, offset = 0
+    Panel.validate_serial(Panel.collect_element_value(elements, name), offset)
   end
   
-  def self.validate_elements_t c
+  def self.validate_elements_serial c
     c.map {|conf|
-      Panel.validate_element_t(conf[:elements], conf[:name]) ? nil : false
+      Panel.validate_element_serial(conf[:elements], conf[:name], conf[:offset]) ? nil : false
     }.compact.empty?
   end
   
-  def validate_t_list
+  def validate_serial_list
     [
-      {:elements => [self.panel_pictures, self.speech_balloons, self.ground_colors, self.ground_pictures], :name => :t}
+      {:elements => [self.panel_pictures, self.speech_balloons, self.ground_colors, self.ground_pictures], :name => :t, :offset => 0}, 
+      {:elements => [self.panel_pictures, self.speech_balloons, self.ground_colors, self.ground_pictures], :name => :z, :offset => 1}
     ]
   end
   def validate_child
 #    r1 = Panel.validate_elements_id validate_id_list
-    Panel.validate_elements_t validate_t_list
+    Panel.validate_elements_serial validate_serial_list
   end
   
   def store attr, au
index 585b355..4aa269c 100644 (file)
@@ -1031,48 +1031,58 @@ describe Panel do
   describe 'シリアライズチェックに於いて' do\r
     context 'つつがなく終わるとき' do\r
       it '0からシリアライズされているならTrueを返す' do\r
-        r = Panel.validate_t [0, 1, 2]\r
+        r = Panel.validate_serial [0, 1, 2]\r
         r.should be_true\r
       end\r
       it '見た目はシリアライズされてなくてもソート結果が無事ならtrueを返す' do\r
-        r = Panel.validate_t [0, 2, 1]\r
+        r = Panel.validate_serial [0, 2, 1]\r
         r.should be_true\r
       end\r
       it '見た目はシリアライズされてなくてもソート結果が無事ならtrueを返す' do\r
-        r = Panel.validate_t [ 2, 1, 4, 3, 0]\r
+        r = Panel.validate_serial [ 2, 1, 4, 3, 0]\r
+        r.should be_true\r
+      end\r
+    end\r
+    context 'オフセットが1のとき' do\r
+      it '0からシリアライズされているならFalseを返す' do\r
+        r = Panel.validate_serial [0, 1, 2], 1\r
+        r.should be_false\r
+      end\r
+      it '1からシリアライズされているならTrueを返す' do\r
+        r = Panel.validate_serial [1, 2, 3], 1\r
         r.should be_true\r
       end\r
     end\r
     context '異常なとき' do\r
       it '0から始まらないならFalseを返す' do\r
-        r = Panel.validate_t [1, 2, 3]\r
+        r = Panel.validate_serial [1, 2, 3]\r
         r.should be_false\r
       end\r
       it '連続していないならFalseを返す' do\r
-        r = Panel.validate_t [0, 1, 2, 4]\r
+        r = Panel.validate_serial [0, 1, 2, 4]\r
         r.should be_false\r
       end\r
       it '連続していないならFalseを返す' do\r
-        r = Panel.validate_t [0, 1, 2, 4, 5]\r
+        r = Panel.validate_serial [0, 1, 2, 4, 5]\r
         r.should be_false\r
       end\r
     end\r
   end\r
-  describe 'tチェック単体に於いて' do\r
+  describe 'シリアライズチェック単体に於いて' do\r
     before do\r
     end\r
     context 'つつがなく終わるとき' do\r
       it '検証値収集を依頼している' do\r
         Panel.should_receive(:collect_element_value).with(any_args).exactly(1)\r
         Panel.stub(:collect_element_value).with(any_args).and_return([])\r
-        Panel.stub(:validate_t).with(any_args).and_return(true)\r
-        r = Panel.validate_element_t [], :t\r
+        Panel.stub(:validate_serial).with(any_args).and_return(true)\r
+        r = Panel.validate_element_serial [], :t\r
       end\r
       it 'シリアライズチェック依頼している' do\r
         Panel.stub(:collect_element_value).with(any_args).and_return([])\r
-        Panel.should_receive(:validate_t).with(any_args).exactly(1)\r
-        Panel.stub(:validate_t).with(any_args).and_return(true)\r
-        r = Panel.validate_element_t [], :t\r
+        Panel.should_receive(:validate_serial).with(any_args).exactly(1)\r
+        Panel.stub(:validate_serial).with(any_args).and_return(true)\r
+        r = Panel.validate_element_serial [], :t\r
       end\r
     end\r
   end\r
@@ -1081,13 +1091,13 @@ describe Panel do
       it 'trueを返している' do\r
         @panel = FactoryGirl.build :panel, :author_id => @author.id\r
         @panel.panel_pictures.build(\r
-          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 0)\r
+          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 0, :z => 0+1)\r
         )\r
         @panel.panel_pictures.build(\r
-          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 1)\r
+          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 1, :z => 1+1)\r
         )\r
         sb1 = @panel.speech_balloons.build(\r
-          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 2)\r
+          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 2, :z => 2+1)\r
         )\r
         sb1.balloons.build(\r
           FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb1.id)\r
@@ -1096,7 +1106,7 @@ describe Panel do
           FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb1.id)\r
         )\r
         sb2 = @panel.speech_balloons.build(\r
-          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 3)\r
+          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 3, :z => 3+1)\r
         )\r
         sb2.balloons.build(\r
           FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb2.id)\r
@@ -1105,26 +1115,26 @@ describe Panel do
           FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb2.id)\r
         )\r
         @gc = @panel.ground_colors.build(\r
-          FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 4)\r
+          FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 4, :z => 4+1)\r
         )\r
         @gp = @panel.ground_pictures.build(\r
-          FactoryGirl.attributes_for(:ground_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 5)\r
+          FactoryGirl.attributes_for(:ground_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 5, :z => 5+1)\r
         )\r
         r = @panel.validate_child\r
         r.should be_true\r
       end\r
     end\r
-    context 'シリアライズされていないとき' do\r
+    context 'tシリアライズされていないとき' do\r
       it 'falseを返している' do\r
         @panel = FactoryGirl.build :panel, :author_id => @author.id\r
         @panel.panel_pictures.build(\r
-          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 0)\r
+          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 0, :z => 0+1)\r
         )\r
         @panel.panel_pictures.build(\r
-          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 1)\r
+          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 1, :z => 1+1)\r
         )\r
         sb1 = @panel.speech_balloons.build(\r
-          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 2)\r
+          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 2, :z => 2+1)\r
         )\r
         sb1.balloons.build(\r
           FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb1.id)\r
@@ -1133,7 +1143,44 @@ describe Panel do
           FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb1.id)\r
         )\r
         sb2 = @panel.speech_balloons.build(\r
-          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 4)\r
+          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 4, :z => 3+1)\r
+        )\r
+        sb2.balloons.build(\r
+          FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb2.id)\r
+        )\r
+        sb2.speeches.build(\r
+          FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb2.id)\r
+        )\r
+        @gc = @panel.ground_colors.build(\r
+          FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 4, :z => 4+1)\r
+        )\r
+        @gp = @panel.ground_pictures.build(\r
+          FactoryGirl.attributes_for(:ground_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 5, :z => 5+1)\r
+        )\r
+        r = @panel.validate_child\r
+        r.should be_false\r
+      end\r
+    end\r
+    context 'zシリアライズされていないとき' do\r
+      it 'falseを返している' do\r
+        @panel = FactoryGirl.build :panel, :author_id => @author.id\r
+        @panel.panel_pictures.build(\r
+          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 0, :z => 0+1)\r
+        )\r
+        @panel.panel_pictures.build(\r
+          FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 1, :z => 0+1)\r
+        )\r
+        sb1 = @panel.speech_balloons.build(\r
+          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 2, :z => 2+1)\r
+        )\r
+        sb1.balloons.build(\r
+          FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb1.id)\r
+        )\r
+        sb1.speeches.build(\r
+          FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb1.id)\r
+        )\r
+        sb2 = @panel.speech_balloons.build(\r
+          FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 3, :z => 3+1)\r
         )\r
         sb2.balloons.build(\r
           FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb2.id)\r
@@ -1142,10 +1189,10 @@ describe Panel do
           FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb2.id)\r
         )\r
         @gc = @panel.ground_colors.build(\r
-          FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 4)\r
+          FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 4, :z => 4+1)\r
         )\r
         @gp = @panel.ground_pictures.build(\r
-          FactoryGirl.attributes_for(:ground_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 5)\r
+          FactoryGirl.attributes_for(:ground_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 5, :z => 5+1)\r
         )\r
         r = @panel.validate_child\r
         r.should be_false\r