From c1cc9e23250273e2e8258240768c57ab25b15677 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Wed, 7 Aug 2013 19:09:23 +0900 Subject: [PATCH] t#31715:speech_balloon boost --- app/controllers/speech_balloons_controller.rb | 141 ++------------- app/models/balloon.rb | 10 +- app/models/ground_color.rb | 3 + app/models/ground_picture.rb | 3 + app/models/panel.rb | 1 + app/models/panel_picture.rb | 3 + app/models/speech.rb | 10 +- app/models/speech_balloon.rb | 69 +++++++- app/models/speech_balloon_template.rb | 6 + app/views/panels/_body.html.erb | 14 +- app/views/panels/_form.html.erb | 42 ++--- lib/validators/extend_speech_balloon_validator.rb | 6 + spec/models/balloon_spec.rb | 107 +++++++++--- spec/models/panel_spec.rb | 198 ++++++++++++++++++---- 14 files changed, 387 insertions(+), 226 deletions(-) create mode 100644 lib/validators/extend_speech_balloon_validator.rb diff --git a/app/controllers/speech_balloons_controller.rb b/app/controllers/speech_balloons_controller.rb index 038436ce..f580d026 100644 --- a/app/controllers/speech_balloons_controller.rb +++ b/app/controllers/speech_balloons_controller.rb @@ -54,19 +54,10 @@ class SpeechBalloonsController < ApplicationController @panel = Panel.edit(@author.working_panel, @author) @speech_balloon = SpeechBalloon.new :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id - @speech_balloon.extend @speech_balloon_template.engine_speech_balloon_module + @speech_balloon.boost @speech_balloon.supply_default - @balloon = @speech_balloon.build_balloon - @speech = @speech_balloon.build_speech - @balloon.extend @speech_balloon_template.engine_balloon_module - @speech.extend @speech_balloon_template.engine_speech_module - @balloon.new_speech_balloon = @speech_balloon - @speech.new_speech_balloon = @speech_balloon - @balloon.supply_default - @speech.supply_default - @speech_balloon_extend = @speech_balloon.extend_speech_balloon - @balloon_extend = @balloon.extend_balloon - @speech_extend = @speech.extend_speech + @speech_balloon.get_balloon.supply_default + @speech_balloon.get_speech.supply_default respond_to do |format| format.html { @@ -81,15 +72,7 @@ class SpeechBalloonsController < ApplicationController @speech_balloon_template = @speech_balloon.speech_balloon_template @panel = Panel.edit(@speech_balloon.panel.id, @author) - @balloon = @speech_balloon.balloon - @speech = @speech_balloon.speech - @speech_balloon.extend @speech_balloon_template.engine_speech_balloon_module - @balloon.extend @speech_balloon_template.engine_balloon_module - @speech.extend @speech_balloon_template.engine_speech_module - - @speech_balloon_extend = @speech_balloon.extend_speech_balloon - @balloon_extend = @balloon.extend_balloon - @speech_extend = @speech.extend_speech + @speech_balloon.boost respond_to do |format| format.html { @@ -99,68 +82,23 @@ class SpeechBalloonsController < ApplicationController end def create - speech_balloon_settings = params[:speech_balloon][:settings] - if speech_balloon_settings.blank? - speech_balloon_settings = {} - else - if speech_balloon_settings.is_a?(Hash) - params[:speech_balloon][:settings] = speech_balloon_settings.to_json - else - speech_balloon_settings = {} - end - end - balloon_settings = params[:speech_balloon][:balloon_attributes][:settings] - if balloon_settings.blank? - balloon_settings = {} - else - if balloon_settings.is_a?(Hash) - params[:speech_balloon][:balloon_attributes][:settings] = balloon_settings.to_json - else - balloon_settings = {} - end - end - speech_settings = params[:speech_balloon][:speech_attributes][:settings] - if speech_settings.blank? - speech_settings = {} - else - if speech_settings.is_a?(Hash) - params[:speech_balloon][:speech_attributes][:settings] = speech_settings.to_json - else - speech_settings = {} - end - end + SpeechBalloon.fold_extend_settings params @panel = Panel.edit(@author.working_panel, @author) @speech_balloon = SpeechBalloon.new @speech_balloon.attributes = params[:speech_balloon] @speech_balloon_template = @speech_balloon.speech_balloon_template - @balloon = @speech_balloon.balloon - @speech = @speech_balloon.speech - - @speech_balloon.extend @speech_balloon_template.engine_speech_balloon_module - @balloon.extend @speech_balloon_template.engine_balloon_module - @speech.extend @speech_balloon_template.engine_speech_module - - @balloon.new_speech_balloon = @speech_balloon - @speech.new_speech_balloon = @speech_balloon - - @speech_balloon.extend_speech_balloon = speech_balloon_settings - @balloon.extend_balloon = balloon_settings - @speech.extend_speech = speech_settings + @speech_balloon.boost - @speech_balloon_extend = @speech_balloon.extend_speech_balloon - @balloon_extend = @balloon.extend_balloon - @speech_extend = @speech.extend_speech - - params[:speech_balloon][:balloon_attributes][:system_picture_id] = @balloon.select_system_picture + params[:speech_balloon][:balloon_attributes][:system_picture_id] = @speech_balloon.get_balloon.select_system_picture @speech_balloon.overwrite @panel.id respond_to do |format| - sbv = @speech_balloon_extend.valid? - bv = @balloon_extend.valid? - sv = @speech_extend.valid? - if @speech_balloon.valid? and @speech_balloon_extend.valid? and @balloon_extend.valid? and @speech_extend.valid? and sbv and bv and sv + sbv = @speech_balloon.extend_speech_balloon.valid? + bv = @speech_balloon.get_balloon.extend_balloon.valid? + sv = @speech_balloon.get_speech.extend_speech.valid? + if @speech_balloon.valid? and @speech_balloon.get_balloon.valid? and @speech_balloon.get_speech.valid? and sbv and bv and sv if @speech_balloon.store @author, params[:speech_balloon] flash[:notice] = I18n.t('flash.notice.created', :model => Panel.model_name.human) format.html { redirect_to @panel } @@ -183,66 +121,23 @@ class SpeechBalloonsController < ApplicationController end def update - speech_balloon_settings = params[:speech_balloon][:settings] - if speech_balloon_settings.blank? - speech_balloon_settings = {} - else - if speech_balloon_settings.is_a?(Hash) - params[:speech_balloon][:settings] = speech_balloon_settings.to_json - else - speech_balloon_settings = {} - end - end - balloon_settings = params[:speech_balloon][:balloon_attributes][:settings] - if balloon_settings.blank? - balloon_settings = {} - else - if balloon_settings.is_a?(Hash) - params[:speech_balloon][:balloon_attributes][:settings] = balloon_settings.to_json - else - balloon_settings = {} - end - end - speech_settings = params[:speech_balloon][:speech_attributes][:settings] - if speech_settings.blank? - speech_settings = {} - else - if speech_settings.is_a?(Hash) - params[:speech_balloon][:speech_attributes][:settings] = speech_settings.to_json - else - speech_settings = {} - end - end + SpeechBalloon.fold_extend_settings params @speech_balloon = SpeechBalloon.show(params[:id], @author) @speech_balloon.attributes = params[:speech_balloon] @speech_balloon_template = @speech_balloon.speech_balloon_template - @speech_balloon.extend @speech_balloon.speech_balloon_template.engine_speech_balloon_module - @balloon = @speech_balloon.balloon - @speech = @speech_balloon.speech - - @speech_balloon.extend @speech_balloon_template.engine_speech_balloon_module - @balloon.extend @speech_balloon_template.engine_balloon_module - @speech.extend @speech_balloon_template.engine_speech_module - - @speech_balloon.extend_speech_balloon = speech_balloon_settings - @balloon.extend_balloon = balloon_settings - @speech.extend_speech = speech_settings - - @speech_balloon_extend = @speech_balloon.extend_speech_balloon - @balloon_extend = @balloon.extend_balloon - @speech_extend = @speech.extend_speech + @speech_balloon.boost - params[:speech_balloon][:balloon_attributes][:system_picture_id] = @balloon.select_system_picture + params[:speech_balloon][:balloon_attributes][:system_picture_id] = @speech_balloon.get_balloon.select_system_picture @panel = Panel.edit(@speech_balloon.panel.id, @author) @speech_balloon.overwrite @panel.id respond_to do |format| - sbv = @speech_balloon_extend.valid? - bv = @balloon_extend.valid? - sv = @speech_extend.valid? - if @speech_balloon.valid? and @speech_balloon_extend.valid? and @balloon_extend.valid? and @speech_extend.valid? and sbv and bv and sv + sbv = @speech_balloon.extend_speech_balloon.valid? + bv = @speech_balloon.get_balloon.extend_balloon.valid? + sv = @speech_balloon.get_speech.extend_speech.valid? + if @speech_balloon.valid? and @speech_balloon.get_balloon.valid? and @speech_balloon.get_speech.valid? and sbv and bv and sv if @speech_balloon.store @author, params[:speech_balloon] flash[:notice] = I18n.t('flash.notice.updated', :model => SpeechBalloon.model_name.human) format.html { redirect_to @speech_balloon } diff --git a/app/models/balloon.rb b/app/models/balloon.rb index 04bc1302..ad064a14 100644 --- a/app/models/balloon.rb +++ b/app/models/balloon.rb @@ -44,8 +44,16 @@ class Balloon < ActiveRecord::Base self.system_picture_id = 1 end + def new_speech_balloon + @new_speech_balloon + end + + def new_speech_balloon= v + @new_speech_balloon = v + end + def get_speech_balloon - self.speech_balloon + self.speech_balloon || @new_speech_balloon end def get_panel_id diff --git a/app/models/ground_color.rb b/app/models/ground_color.rb index 7117e4bf..b3c4e234 100644 --- a/app/models/ground_color.rb +++ b/app/models/ground_color.rb @@ -88,6 +88,9 @@ class GroundColor < ActiveRecord::Base self.panel || @new_panel end + def boost + end + def tag_id c = nil 'panel' + tag_panel_id + 'ground_color' + tag_element_id + c.to_s end diff --git a/app/models/ground_picture.rb b/app/models/ground_picture.rb index b77bc6a7..3fdf8422 100644 --- a/app/models/ground_picture.rb +++ b/app/models/ground_picture.rb @@ -103,6 +103,9 @@ class GroundPicture < ActiveRecord::Base self.panel || @new_panel end + def boost + end + def tag_id c = nil 'panel' + tag_panel_id + 'ground_picture' + tag_element_id + c.to_s end diff --git a/app/models/panel.rb b/app/models/panel.rb index 0bb2cbb9..5ad57278 100644 --- a/app/models/panel.rb +++ b/app/models/panel.rb @@ -329,6 +329,7 @@ class Panel < ActiveRecord::Base Panel.transaction do self.panel_elements.each do |elm| elm.new_panel = self + elm.boost end #self.publish = nil res = self.save diff --git a/app/models/panel_picture.rb b/app/models/panel_picture.rb index 36e7699c..e4cfacff 100644 --- a/app/models/panel_picture.rb +++ b/app/models/panel_picture.rb @@ -127,6 +127,9 @@ class PanelPicture < ActiveRecord::Base self.panel || @new_panel end + def boost + end + def tag_id c = nil 'panel' + tag_panel_id + 'panel_picture' + tag_element_id + c.to_s end diff --git a/app/models/speech.rb b/app/models/speech.rb index 62720b46..9bf34cdc 100644 --- a/app/models/speech.rb +++ b/app/models/speech.rb @@ -37,8 +37,16 @@ class Speech < ActiveRecord::Base self.speech_balloon.panel.visible? roles end + def new_speech_balloon + @new_speech_balloon + end + + def new_speech_balloon= v + @new_speech_balloon = v + end + def get_speech_balloon - self.speech_balloon + self.speech_balloon || @new_speech_balloon end def get_panel_id diff --git a/app/models/speech_balloon.rb b/app/models/speech_balloon.rb index 1301c31e..e19eca15 100644 --- a/app/models/speech_balloon.rb +++ b/app/models/speech_balloon.rb @@ -14,7 +14,7 @@ class SpeechBalloon < ActiveRecord::Base validates :classname, :presence => true, :length => {:maximum => 50} validates :z, :presence => true, :numericality => {:greater_than => 0} validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0} -# validates :settings, :presence => true + validates :settings, :extend_speech_balloon => true before_validation :valid_encode @@ -88,6 +88,73 @@ class SpeechBalloon < ActiveRecord::Base self.panel || @new_panel end + def new_sballoon + @new_balloon + end + + def new_balloon= v + @new_balloon = v + end + + def get_balloon + self.balloon || @new_balloon + end + + def new_speech + @new_speech + end + + def new_speech= v + @new_speech = v + end + + def get_speech + self.speech || @new_speech + end + + def boost + self.extend self.speech_balloon_template.engine_speech_balloon_module + if self.balloon + else + self.new_balloon = self.build_balloon + self.new_speech = self.build_speech + end + self.get_balloon.extend self.speech_balloon_template.engine_balloon_module + self.get_speech.extend self.speech_balloon_template.engine_speech_module + self.get_balloon.new_speech_balloon = self + self.get_speech.new_speech_balloon = self + self.extend_speech_balloon = if self.settings.blank? + {} + else + JSON.parse(self.settings) + end + self.get_balloon.extend_balloon = if self.get_balloon.settings.blank? + {} + else + JSON.parse(self.get_balloon.settings) + end + self.get_speech.extend_speech = if self.get_speech.settings.blank? + {} + else + JSON.parse(self.get_speech.settings) + end + end + + def self.fold_extend_settings params + speech_balloon_settings = params[:speech_balloon][:settings] + if speech_balloon_settings.is_a?(Hash) + params[:speech_balloon][:settings] = speech_balloon_settings.to_json + end + balloon_settings = params[:speech_balloon][:balloon_attributes][:settings] + if balloon_settings.is_a?(Hash) + params[:speech_balloon][:balloon_attributes][:settings] = balloon_settings.to_json + end + speech_settings = params[:speech_balloon][:speech_attributes][:settings] + if speech_settings.is_a?(Hash) + params[:speech_balloon][:speech_attributes][:settings] = speech_settings.to_json + end + end + def tag_id c = nil 'panel' + tag_panel_id + 'speech_balloon' + tag_element_id + c.to_s end diff --git a/app/models/speech_balloon_template.rb b/app/models/speech_balloon_template.rb index 4aa68e5b..62b5c5fd 100644 --- a/app/models/speech_balloon_template.rb +++ b/app/models/speech_balloon_template.rb @@ -37,6 +37,12 @@ class SpeechBalloonTemplate < ActiveRecord::Base SpeechBalloonTemplate.find(:all, opt) end + def self.enable_list + SpeechBalloonTemplate.list.delete_if {|sbt| + Pettanr::Application.speech_balloons[sbt.classname] == nil + } + end + def self.list_opt {} end diff --git a/app/views/panels/_body.html.erb b/app/views/panels/_body.html.erb index a25be020..89e4abb3 100644 --- a/app/views/panels/_body.html.erb +++ b/app/views/panels/_body.html.erb @@ -1,19 +1,7 @@ <% panel.panel_elements.each do |elm| %> <% case elm.class.to_s %> <% when 'SpeechBalloon' %> - <% - speech_balloon = elm - speech_balloon_template = speech_balloon.speech_balloon_template - balloon = speech_balloon.balloon - speech = speech_balloon.speech - speech_balloon.extend speech_balloon_template.engine_speech_balloon_module - balloon.extend speech_balloon_template.engine_balloon_module - speech.extend speech_balloon_template.engine_speech_module - - balloon.new_speech_balloon = speech_balloon - speech.new_speech_balloon = speech_balloon - - %> + <% elm.boost %> <% end %> <% end %>
diff --git a/app/views/panels/_form.html.erb b/app/views/panels/_form.html.erb index 3cf438ec..0e20344d 100644 --- a/app/views/panels/_form.html.erb +++ b/app/views/panels/_form.html.erb @@ -57,17 +57,8 @@ <% when 'PanelPicture' %> <%= render 'panel_pictures/form', :panel_picture => elm, :no_attr => 0 %> <% when 'SpeechBalloon' %> - <% - speech_balloon = elm - speech_balloon_template = speech_balloon.speech_balloon_template - balloon = speech_balloon.balloon - speech = speech_balloon.speech - - speech_balloon_extend = speech_balloon.extend_speech_balloon - balloon_extend = balloon.extend_balloon - speech_extend = speech.extend_speech - %> - <%= render elm.speech_balloon_template.engine_name + '/speech_balloons/form', :speech_balloon => speech_balloon, :balloon => balloon, :speech => speech, :speech_balloon_extend => speech_balloon_extend, :balloon_extend => balloon_extend, :speech_extend => speech_extend, :no_attr => 0 %> + <% elm.boost %> + <%= render elm.speech_balloon_template.engine_name + '/speech_balloons/form', :speech_balloon => elm, :no_attr => 0 %> <% when 'GroundPicture' %> <%= render 'ground_pictures/form', :ground_picture => elm, :no_attr => 0 %> <% when 'GroundColor' %> @@ -160,29 +151,16 @@ <% end %> - <% SpeechBalloonTemplate.list().each_with_index do |sbt, index| %> + <% SpeechBalloonTemplate.enable_list().each_with_index do |sbt, index| %>
<% elm = SpeechBalloon.new :panel_id => @panel.id, :speech_balloon_template_id => sbt.id %> <% - speech_balloon = elm - speech_balloon_template = speech_balloon.speech_balloon_template - speech_balloon.extend speech_balloon_template.engine_speech_balloon_module - speech_balloon.supply_default - balloon = speech_balloon.build_balloon - speech = speech_balloon.build_speech - balloon.extend speech_balloon_template.engine_balloon_module - speech.extend speech_balloon_template.engine_speech_module - - speech_balloon_extend = speech_balloon.extend_speech_balloon - balloon_extend = balloon.extend_balloon - speech_extend = speech.extend_speech - - balloon.new_speech_balloon = speech_balloon - speech.new_speech_balloon = speech_balloon - balloon.supply_default - speech.supply_default + elm.boost + elm.supply_default + elm.get_balloon.supply_default + elm.get_speech.supply_default %> - <%= render elm.speech_balloon_template.engine_name + '/speech_balloons/form', :speech_balloon => speech_balloon, :balloon => balloon, :speech => speech, :speech_balloon_extend => speech_balloon_extend, :balloon_extend => balloon_extend, :speech_extend => speech_extend, :no_attr => 1 %> + <%= render elm.speech_balloon_template.engine_name + '/speech_balloons/form', :speech_balloon => elm, :no_attr => 1 %>
<% end %> <% when 'GroundPicture' %> @@ -198,12 +176,12 @@
- <% SpeechBalloonTemplate.list().each do |sbt| %> + <% SpeechBalloonTemplate.enable_list().each do |sbt| %> <%= stylesheet_link_tag sbt.engine_name + "/application" %> <%= javascript_include_tag sbt.engine_name + "/application" %> <% end %> diff --git a/lib/validators/extend_speech_balloon_validator.rb b/lib/validators/extend_speech_balloon_validator.rb new file mode 100644 index 00000000..48bfabc0 --- /dev/null +++ b/lib/validators/extend_speech_balloon_validator.rb @@ -0,0 +1,6 @@ +class ExtendSpeechBalloonValidator < ActiveModel::EachValidator + def validate_each(record, attribute, value) + record.errors[attribute] << (options[:message] || I18n.t('activerecord.errors.messages.natural_number')) unless record.extend_speech_balloon.valid? + end +end + diff --git a/spec/models/balloon_spec.rb b/spec/models/balloon_spec.rb index bf585669..20dd184e 100644 --- a/spec/models/balloon_spec.rb +++ b/spec/models/balloon_spec.rb @@ -14,16 +14,22 @@ describe Balloon do @lg = FactoryGirl.create :license_group @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id - @speech_balloon_template = FactoryGirl.create :speech_balloon_template + @speech_balloon_template = FactoryGirl.create :speech_balloon_template, "name" => "circle@pettan.com", "classname" => "CircleSpeechBalloon", "caption" => "cc", "system_picture_id" => @sp.id, "settings" => '{}' @writing_format = FactoryGirl.create :writing_format @panel = FactoryGirl.create :panel, :author_id => @author.id end describe '検証に於いて' do before do - @sb = FactoryGirl.create :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id - @speech = FactoryGirl.create :speech, :speech_balloon_id => @sb.id, :writing_format_id => @writing_format.id - @balloon = FactoryGirl.build :balloon, :speech_balloon_id => @sb.id, :system_picture_id => @sp.id + @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id + @speech = @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @balloon = @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.boost + @sb.save! end context 'オーソドックスなデータのとき' do it '下限データが通る' do @@ -165,9 +171,15 @@ describe Balloon do describe '文字コード検証に於いて' do before do - @sb = FactoryGirl.create :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id - @speech = FactoryGirl.create :speech, :speech_balloon_id => @sb.id, :writing_format_id => @writing_format.id - @balloon = FactoryGirl.build :balloon, :speech_balloon_id => @sb.id, :system_picture_id => @sp.id + @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id + @speech = @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @balloon = @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.boost + @sb.save! end context 'settingsを検証するとき' do @@ -182,9 +194,15 @@ describe Balloon do describe '閲覧許可に於いて' do before do - @sb = FactoryGirl.create :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id - @balloon = FactoryGirl.create :balloon, :speech_balloon_id => @sb.id, :system_picture_id => @sp.id - @speech = FactoryGirl.create :speech, :speech_balloon_id => @sb.id, :writing_format_id => @writing_format.id + @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id + @speech = @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @balloon = @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.boost + @sb.save! end context 'オープンモードのとき' do before do @@ -261,9 +279,15 @@ describe Balloon do describe '一覧取得に於いて' do before do - @sb = FactoryGirl.create :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id - @balloon = FactoryGirl.create :balloon, :speech_balloon_id => @sb.id, :system_picture_id => @sp.id - @speech = FactoryGirl.create :speech, :speech_balloon_id => @sb.id, :writing_format_id => @writing_format.id + @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id + @speech = @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @balloon = @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.boost + @sb.save! end context 'page補正について' do it '文字列から数値に変換される' do @@ -304,14 +328,29 @@ describe Balloon do it '時系列で並んでいる' do #公開されたコマのフキダシ枠は(他人のフキダシ枠であっても)含んでいる hc = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1 - nsb = FactoryGirl.create :speech_balloon, :panel_id => hc.id, :speech_balloon_template_id => @speech_balloon_template.id, :updated_at => Time.now + 100 - npl = FactoryGirl.create :balloon, :speech_balloon_id => nsb.id, :updated_at => Time.now + 100 + nsb = FactoryGirl.build :speech_balloon, :panel_id => hc.id, :speech_balloon_template_id => @speech_balloon_template.id, :updated_at => Time.now + 100 + nsb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + npl =nsb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id, :updated_at => Time.now + 100) + ) + nsb.boost + nsb.save! r = Balloon.list r.should eq [npl, @balloon] end it '非公開のコマのフキダシ枠は自分のフキダシ枠であっても含まない' do hc = FactoryGirl.create :panel, :author_id => @author.id, :publish => 0 - nsb = FactoryGirl.create :speech_balloon, :panel_id => hc.id, :speech_balloon_template_id => @speech_balloon_template.id, :updated_at => Time.now + 100 + nsb = FactoryGirl.build :speech_balloon, :panel_id => hc.id, :speech_balloon_template_id => @speech_balloon_template.id, :updated_at => Time.now + 100 + nsb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + nsb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + nsb.boost + nsb.save! npl = FactoryGirl.create :balloon, :speech_balloon_id => nsb.id, :updated_at => Time.now + 100 pl = Balloon.list pl.should eq [@balloon] @@ -388,9 +427,15 @@ describe Balloon do end describe 'json一覧出力オプションに於いて' do before do - @sb = FactoryGirl.create :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id - @balloon = FactoryGirl.create :balloon, :speech_balloon_id => @sb.id, :system_picture_id => @sp.id - @speech = FactoryGirl.create :speech, :speech_balloon_id => @sb.id, :writing_format_id => @writing_format.id + @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id + @speech = @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @balloon = @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.boost + @sb.save! end it 'フキダシを含んでいる' do r = Balloon.list.to_json Balloon.list_json_opt @@ -430,9 +475,15 @@ describe Balloon do describe '単体取得に於いて' do before do - @sb = FactoryGirl.create :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id - @balloon = FactoryGirl.create :balloon, :speech_balloon_id => @sb.id, :system_picture_id => @sp.id - @speech = FactoryGirl.create :speech, :speech_balloon_id => @sb.id, :writing_format_id => @writing_format.id + @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id + @speech = @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @balloon = @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.boost + @sb.save! end context 'つつがなく終わるとき' do it '単体取得オプションを利用している' do @@ -499,9 +550,15 @@ describe Balloon do end describe 'json単体出力オプションに於いて' do before do - @sb = FactoryGirl.create :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id - @balloon = FactoryGirl.create :balloon, :speech_balloon_id => @sb.id, :system_picture_id => @sp.id - @speech = FactoryGirl.create :speech, :speech_balloon_id => @sb.id, :writing_format_id => @writing_format.id + @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id + @speech = @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @balloon = @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.boost + @sb.save! end it 'フキダシを含んでいる' do r = Balloon.show(@balloon.id, @author).to_json Balloon.show_json_opt diff --git a/spec/models/panel_spec.rb b/spec/models/panel_spec.rb index 56e18213..64149e9d 100644 --- a/spec/models/panel_spec.rb +++ b/spec/models/panel_spec.rb @@ -17,7 +17,7 @@ describe Panel do @op = FactoryGirl.create :original_picture, :artist_id => @artist.id @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id - @sbt = FactoryGirl.create :speech_balloon_template + @sbt = FactoryGirl.create :speech_balloon_template, "name" => "circle@pettan.com", "classname" => "CircleSpeechBalloon", "caption" => "cc", "system_picture_id" => @sp.id, "settings" => '{}' end describe '検証に於いて' do @@ -762,9 +762,17 @@ describe Panel do #コマを作成しておく。 @panel = FactoryGirl.create :panel, :author_id => @author.id @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :width => @p.width, :height => @p.height - @sb = @panel.speech_balloons.create( + @sb = @panel.speech_balloons.build( FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 0) ) + @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @sb.boost + @sb.save! @gc = @panel.ground_colors.create( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 2) ) @@ -791,9 +799,17 @@ describe Panel do #コマを作成しておく。 @panel = FactoryGirl.create :panel, :author_id => @author.id @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 0, :z => 2, :width => @p.width, :height => @p.height - @sb = @panel.speech_balloons.create( + @sb = @panel.speech_balloons.build( FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 1, :z => 1) ) + @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @sb.boost + @sb.save! @gc = @panel.ground_colors.create( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 2, :z => 3) ) @@ -823,9 +839,17 @@ describe Panel do end context 'さらに末尾にフキダシを追加したとき' do before do - @sb2 = @panel.speech_balloons.create( + @sb2 = @panel.speech_balloons.build( FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 4, :z => 5) ) + @sb2.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb2.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @sb2.boost + @sb2.save! @panel.reload end it 'zでソートしている' do @@ -843,9 +867,17 @@ describe Panel do #コマを作成しておく。 @panel = FactoryGirl.create :panel, :author_id => @author.id @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :width => @p.width, :height => @p.height - @sb = @panel.speech_balloons.create( + @sb = @panel.speech_balloons.build( FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 0) ) + @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @sb.boost + @sb.save! @gc = @panel.ground_colors.create( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 2) ) @@ -874,9 +906,17 @@ describe Panel do end context 'さらに末尾にフキダシを追加したとき' do before do - @sb2 = @panel.speech_balloons.create( + @sb2 = @panel.speech_balloons.build( FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 4) ) + @sb2.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb2.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @sb2.boost + @sb2.save! @panel.reload end it 'tでソートしている' do @@ -894,9 +934,17 @@ describe Panel do #コマを作成しておく。 @panel = FactoryGirl.create :panel, :author_id => @author.id @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :width => @p.width, :height => @p.height - @sb = @panel.speech_balloons.create( + @sb = @panel.speech_balloons.build( FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 0) ) + @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @sb.boost + @sb.save! @gc = @panel.ground_colors.create( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 2) ) @@ -939,14 +987,22 @@ describe Panel do #コマを作成しておく。 @panel = FactoryGirl.create :panel, :author_id => @author.id @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :width => @p.width, :height => @p.height - @sb = @panel.speech_balloons.create( + @sb = @panel.speech_balloons.build( FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 0) ) + @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @sb.boost + @sb.save! @sb.create_balloon( - FactoryGirl.attributes_for(:balloon, :speech_balloon_id => @sb.id) + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) ) @sb.create_speech( - FactoryGirl.attributes_for(:speech, :speech_balloon_id => @sb.id, :writing_format_id => @writing_format.id) + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) ) @gc = @panel.ground_colors.create( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 2) @@ -1012,9 +1068,17 @@ describe Panel do @rp2 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op2.id, :picture_id => @p2.id @panel = FactoryGirl.create :panel, :author_id => @author.id @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :width => @p.width, :height => @p.height, :picture_id => @p.id - @sb = @panel.speech_balloons.create( + @sb = @panel.speech_balloons.build( FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 0) ) + @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @sb.boost + @sb.save! @gc = @panel.ground_colors.create( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 2) ) @@ -1121,23 +1185,27 @@ describe Panel do FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 1, :z => 1+1) ) sb1 = @panel.speech_balloons.build( - FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 2, :z => 2+1) + FactoryGirl.attributes_for(:speech_balloon, :speech_balloon_template_id => @sbt.id, :t => 2, :z => 2+1) ) sb1.build_balloon( - FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb1.id) + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) ) sb1.build_speech( - FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb1.id) + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) ) + sb1.boost + sb1.save! sb2 = @panel.speech_balloons.build( - FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 3, :z => 3+1) + FactoryGirl.attributes_for(:speech_balloon, :speech_balloon_template_id => @sbt.id, :t => 3, :z => 3+1) ) sb2.build_balloon( - FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb2.id) + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) ) sb2.build_speech( - FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb2.id) + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) ) + sb2.boost + sb2.save! @gc = @panel.ground_colors.build( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 4, :z => 4+1) ) @@ -1158,23 +1226,27 @@ describe Panel do FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 1, :z => 1+1) ) sb1 = @panel.speech_balloons.build( - FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 2, :z => 2+1) + FactoryGirl.attributes_for(:speech_balloon, :speech_balloon_template_id => @sbt.id, :t => 2, :z => 2+1) ) sb1.build_balloon( - FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb1.id) + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) ) sb1.build_speech( - FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb1.id) + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) ) + sb1.boost + sb1.save! sb2 = @panel.speech_balloons.build( - FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 4, :z => 3+1) + FactoryGirl.attributes_for(:speech_balloon, :speech_balloon_template_id => @sbt.id, :t => 4, :z => 3+1) ) sb2.build_balloon( - FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb2.id) + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) ) sb2.build_speech( - FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb2.id) + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) ) + sb2.boost + sb2.save! @gc = @panel.ground_colors.build( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 4, :z => 4+1) ) @@ -1195,23 +1267,27 @@ describe Panel do FactoryGirl.attributes_for(:panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :t => 1, :z => 0+1) ) sb1 = @panel.speech_balloons.build( - FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 2, :z => 2+1) + FactoryGirl.attributes_for(:speech_balloon, :speech_balloon_template_id => @sbt.id, :t => 2, :z => 2+1) ) sb1.build_balloon( - FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb1.id) + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) ) sb1.build_speech( - FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb1.id) + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) ) + sb1.boost + sb1.save! sb2 = @panel.speech_balloons.build( - FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 3, :z => 3+1) + FactoryGirl.attributes_for(:speech_balloon, :speech_balloon_template_id => @sbt.id, :t => 3, :z => 3+1) ) sb2.build_balloon( - FactoryGirl.attributes_for(:balloon, :speech_balloon_id => sb2.id) + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) ) sb2.build_speech( - FactoryGirl.attributes_for(:speech, :speech_balloon_id => sb2.id) + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) ) + sb2.boost + sb2.save! @gc = @panel.ground_colors.build( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id, :t => 4, :z => 4+1) ) @@ -1292,14 +1368,76 @@ describe Panel do end end + describe '要素の検証に於いて' do + before do + @panel = Panel.new + @panel.supply_default + @attr = FactoryGirl.attributes_for :panel +@sbattr = { + "speech_balloons_attributes" => { + "0" => { + "caption" => "大きな文字で","z" => "1","t" => "0", + "classname" => "CircleSpeechBalloon","speech_balloon_template_id" => @sbt.id, + "speech_attributes" => { + "content" => "カギッコ","x" => "20","y" => "20","width" => "-60","height" => "60", + "settings" => "","writing_format_id" => @writing_format.id + }, + "balloon_attributes" => { + "r" => "247","x" => "293","y" => "-2","width" => "200","height" => "200", + "system_picture_id" => @sp.id,"settings" => "" + } + } + }, + "publish" => "0" +} +@ppattr = { + "panel_pictures_attributes" => { + "4" => { + "caption" => "司会","x" => "a","y" => "99","z" => "1","t" => "0", + "width" => "156","height" => "245","link" => "","picture_id" => @p.id + } + }, + "publish" => "0" +} + end + context 'フキダシの幅がマイナスで検証に失敗したとき' do + before do + @attr.merge!(@sbattr) + end + it 'エラーメッセージがセットされている' do + r = @panel.store @attr, @author + r.should be_false + @panel.errors.should_not be_empty + end + end + context 'コマ絵の横軸はアルファベットのため検証に失敗したとき' do + before do + @attr.merge!(@ppattr) + end + it 'エラーメッセージがセットされている' do + r = @panel.store @attr, @author + r.should be_false + @panel.errors.should_not be_empty + end + end + end + describe '削除に於いて' do before do @comic = FactoryGirl.create :comic, :author_id => @author.id @panel = FactoryGirl.create :panel, :author_id => @author.id, :publish => 1 @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :width => @p.width, :height => @p.height - @sb = @panel.speech_balloons.create( + @sb = @panel.speech_balloons.build( FactoryGirl.attributes_for(:speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @sbt.id, :t => 0) ) + @sb.build_balloon( + FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id) + ) + @sb.build_speech( + FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id) + ) + @sb.boost + @sb.save! @gc = @panel.ground_colors.create( FactoryGirl.attributes_for(:ground_color, :panel_id => @panel.id) ) -- 2.11.0