OSDN Git Service

a56901348c6b36936710d0eeb9e0b7e6e70551aa
[pettanr/pettanr.git] / app / models / scroll.rb
1 class Scroll < Peta::Content
2   load_manifest
3   has_many :scroll_panels
4   belongs_to :author
5   
6   validates :title, :presence => true, :length => {:maximum => 100}
7   validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..1}
8   validates :author_id, :presence => true, :numericality => true, :existence => {:both => false}
9   def supply_default
10     self.visible = 0 if self.visible.blank?
11   end
12   
13   def overwrite operators
14     return false unless operators.author
15     self.author_id = operators.author.id
16   end
17   
18   def visible? operators
19     return false unless super
20     self.visible > 0
21   end
22   
23   def scroll_panels_count
24     ScrollPanel.where(['scroll_panels.scroll_id = ?', self.id]).count
25   end
26   
27   def self.list_order
28     'scrolls.updated_at desc'
29   end
30   
31   def self.list_where
32     'scrolls.visible > 0'
33   end
34   
35   def self.list_opt
36     {:scroll_panels => {:panel => {}}, :author => {} }
37   end
38   
39   def self.list_json_opt
40     {:include => {:scroll_panels => {:include => {:panel => {}}}, :author => {}}}
41   end
42   
43   def self.show_opt
44     {:include => {:scroll_panels => {:panel => {}}, :author => {}}}
45   end
46   
47   def self.show_json_opt
48     {:include => {:scroll_panels => {:include => {:panel => {}}}, :author => {}}}
49   end
50   
51   def self.visible_count
52     Scroll.count 'visible > 0'
53   end
54   
55   def destroy_with_scroll_panel
56     res = false
57     Scroll.transaction do
58       self.scroll_panels.each do |scroll_panel|
59         raise ActiveRecord::Rollback unless scroll_panel.destroy
60       end
61       raise ActiveRecord::Rollback unless self.destroy
62       res = true
63     end
64     res
65   end
66   
67   def scenario
68     panels.map {|panel|
69       panel.scenario
70     }.join
71   end
72   
73   def plain_scenario
74     panels.map {|panel|
75       panel.plain_scenario
76     }.join
77   end
78   
79 end