2 class Story < Peta::Binder
4 has_many :comic_stories
8 validates :title, :presence => true, :length => {:maximum => 100}
9 validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..1}
10 validates :author_id, :presence => true, :numericality => true, :existence => {:both => false}
13 self.visible = 0 if self.visible.blank?
16 def overwrite operators
17 return false unless operators.author
18 self.author_id = operators.author.id
22 def visible? operators
24 when nil # super return
33 def story_sheets_count
34 StorySheet.where(['story_sheets.story_id = ?', self.id]).count
37 def self.public_list_where
42 'stories.updated_at desc'
46 {:comic_stories => {:comic => {}}, :author => {} }
49 def self.list_json_opt
50 {:include => {:comic_stories => {:include => {:comic => {}}}, :author => {}}}
54 {:include => {:comic_stories => {:comic => {}}, :author => {}}}
57 def self.show_json_opt
58 {:include => {:comic_stories => {:include => {:comic => {}}}, :author => {}}}
61 def self.visible_count
62 Story.count 'visible > 0'
65 def destroy_with_story_sheet
68 self.story_sheets.each do |story_sheet|
69 raise ActiveRecord::Rollback unless story_sheet.destroy
71 raise ActiveRecord::Rollback unless self.destroy
83 self.parts_element.each do |e|
91 self.parts_element.each do |e|
97 def self.collect_element_value elements, name
99 if e['_destroy'] or e[:_destroy]
107 def self.validate_serial ary, offset = 0
109 ary.compact.sort.each do |n|
110 break false unless n == i
113 ary.compact.size == i - offset
116 def self.validate_element_serial elements, name, offset = 0
117 self.validate_serial(self.collect_element_value(elements, name), offset)
120 def self.validate_elements_serial c
122 self.validate_element_serial(conf[:elements], conf[:name], conf[:offset]) ? nil : false
126 def validate_serial_list
128 {:elements => self.leafs_items, :name => :t, :offset => 0},
129 {:elements => self.leafs_items, :name => :z, :offset => 1}
133 # r1 = Panel.validate_elements_id validate_id_list
134 self.class.validate_elements_serial validate_serial_list
137 def store attr, operators
139 self.errors.add :base, I18n.t('errors.invalid_json')
142 self.attributes = attr
143 self.overwrite operators
146 self.story_elements.each do |elm|
151 unless validate_child
153 self.errors.add :base, I18n.t('errors.invalid_t')
154 raise ActiveRecord::Rollback
160 def destroy_and_shorten
163 Story.update_all('t = t - 1', ['comic_id = ? and (t > ?)', self.comic_id, self.t])
164 raise ActiveRecord::Rollback unless self.destroy_with_story_sheet