X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=app%2Fmodels%2Fspeech_balloon.rb;h=367af4ad552594b64ccf75037a35563bb7d32ee1;hb=9edc3731389bcae0de05ef6045cceb6b7581cc8f;hp=c4a7273397cde1dd9320a0ee944ef0df480d5130;hpb=1c1b60dd45979db866f8a66b423bb5e75602b74f;p=pettanr%2Fpettanr.git diff --git a/app/models/speech_balloon.rb b/app/models/speech_balloon.rb index c4a72733..367af4ad 100644 --- a/app/models/speech_balloon.rb +++ b/app/models/speech_balloon.rb @@ -1,89 +1,103 @@ -class SpeechBalloon < ActiveRecord::Base - has_many :balloons, :dependent => :destroy - has_many :speeches, :dependent => :destroy +class SpeechBalloon < Peta::Element + load_manifest + has_one :balloon, :dependent => :destroy + has_one :speech, :dependent => :destroy belongs_to :speech_balloon_template belongs_to :panel - accepts_nested_attributes_for :balloons - accepts_nested_attributes_for :speeches + accepts_nested_attributes_for :balloon, :allow_destroy => true + accepts_nested_attributes_for :speech, :allow_destroy => true validates :panel_id, :numericality => {:allow_blank => true} validates :speech_balloon_template_id, :presence => true, :numericality => true, :existence => {:both => false} - validates :classname, :presence => true, :length => {:maximum => 50} + validates :speech_balloon_template_module_name, :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 :speech_balloon_template_settings, :boost => {:boost_name => :speech_balloon_template} - before_validation :valid_encode + scope :with_panel, -> do + includes(:panel) + end - def valid_encode - ['classname', 'settings'].each do |a| - next if attributes[a] == nil - raise Pettanr::BadRequest unless attributes[a].valid_encoding? - end + scope :with_speech_balloon_template, -> do + includes(:speech_balloon_template) end - def visible? roles - if MagicNumber['run_mode'] == 0 - return false unless guest_role_check(roles) - else - return false unless reader_role_check(roles) - end - return true if self.panel.own?(roles) - self.panel.visible? roles + scope :find_index, -> do + with_panel.where(Panel.arel_table[:publish].gt 0).references(:panel) + end + + scope :find_private, -> (operators) do + with_panel.where(Panel.arel_table[:author_id].eq operators.author.id).references(:panel) + end + + scope :find_by_panel, -> (panel_id) do + find_index.where(panel_id: panel_id).references(:panel) + end + + scope :find_by_speech_balloon_template, -> (speech_balloon_template_id) do + find_index.where(speech_balloon_template_id: speech_balloon_template_id).references(:panel) end - def self.default_page_size - 25 + scope :find_by_author, -> (author_id) do + find_index.where(Panel.arel_table[:author_id].eq author_id).references(:panel) end - def self.max_page_size - 100 + def self.by_author_list_includes + { + :panel => { + :author => {} + } + } end - def self.page prm = nil - page = prm.to_i - page = 1 if page < 1 - page + def self.has_picture? + false end - def self.page_size prm = self.default_page_size - page_size = prm.to_i - page_size = self.max_page_size if page_size > self.max_page_size - page_size = self.default_page_size if page_size < 1 - page_size + def supply_default + if self.panel + self.t = self.panel.new_t + self.z = self.panel.new_z + end end - def self.list page = 1, page_size = self.default_page_size - opt = {} - opt.merge!(SpeechBalloon.list_opt) - opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0 - opt.merge!({:conditions => 'panels.publish > 0', :order => 'speech_balloons.updated_at desc'}) - SpeechBalloon.find(:all, opt) + def overwrite pid + self.panel_id = pid end - def self.list_opt - {:include => {:panel => {:author => {}}, :balloons => {}, :speeches => {}, :speech_balloon_template => {} }} + def symbol_option + self.speech_balloon_template.symbol_option end - def self.list_json_opt - {:include => {:panel => {:include => {:author => {} }}, :balloons => {}, :speeches => {}, :speech_balloon_template => {} }} + def filer_caption + self.plain_scenario end - def self.show cid, au - opt = {} - opt.merge!(SpeechBalloon.show_opt) - res = SpeechBalloon.find(cid, opt) - raise ActiveRecord::Forbidden unless res.visible?(au) - res + def self.public_list_where list + 'panels.publish > 0' end def self.show_opt - {:include => {:panel => {:author => {}}, :balloons => {}, :speeches => {}, :speech_balloon_template => {} }} + {:include => {:panel => {:author => {}}, :balloon => {}, :speech => {}, :speech_balloon_template => {} }} + end + + def scenario_template with_engine = false + self.path_name(true) + '/scenario' + end + + def element_face_template with_engine = false + self.path_name(false) + '/element_face' + end + + def scenario + ERB::Util.html_escape(self.caption.to_s) + self.balloon.scenario.to_s + + self.speech.scenario.to_s end - def self.show_json_opt - {:include => {:panel => {:include => {:author => {} }}, :balloons => {}, :speeches => {}, :speech_balloon_template => {} }} + def plain_scenario + self.caption.to_s + self.balloon.plain_scenario.to_s + + self.speech.plain_scenario.to_s end end