OSDN Git Service

temp
[pettanr/pettanr.git] / app / models / scroll.rb
1 class Scroll < Pettanr::Item
2   has_many :scroll_panels
3   belongs_to :author
4   
5   validates :title, :presence => true, :length => {:maximum => 100}
6   validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..1}
7   validates :author_id, :presence => true, :numericality => true, :existence => {:both => false}
8
9   def self.singular
10     'Scroll'
11   end
12   
13   def self.plural
14     'Scrolls'
15   end
16   
17   def self.owner_type
18     :author
19   end
20   
21   def self.valid_encode_columns
22     super.merge ['title']
23   end
24   
25   def supply_default
26     self.visible = 0 if self.visible.blank?
27   end
28   
29   def overwrite operators
30     return false unless operators.author
31     self.author_id = operators.author.id
32   end
33   
34   def own? roles
35     roles = [roles] unless roles.respond_to?(:each)
36     au = Scroll.get_author_from_roles roles
37     return false unless au
38     self.author_id == au.id
39   end
40   
41   def visible? operators
42     return false unless super
43     self.visible > 0
44   end
45   
46   def scroll_panels_count
47     ScrollPanel.where(['scroll_panels.scroll_id = ?', self.id]).count
48   end
49   
50   def self.list_order
51     'scrolls.updated_at desc'
52   end
53   
54   def self.list_where
55     'scrolls.visible > 0'
56   end
57   
58   def self.list_opt
59     {:scroll_panels => {:panel => {}}, :author => {} }
60   end
61   
62   def self.list_json_opt
63     {:include => {:scroll_panels => {:include => {:panel => {}}}, :author => {}}}
64   end
65   
66   def self.show sid, operators
67     opt = {}
68     opt.merge!(Scroll.show_opt)
69     res = Scroll.find(sid, opt)
70     raise ActiveRecord::Forbidden unless res.visible?(operators)
71     res
72   end
73   
74   def self.edit sid, au
75     opt = {}
76     opt.merge!(Scroll.show_opt)
77     res = Scroll.find(sid, opt)
78     raise ActiveRecord::Forbidden unless res.own?(au)
79     res
80   end
81   
82   def self.show_opt
83     {:include => {:scroll_panels => {:panel => {}}, :author => {}}}
84   end
85   
86   def self.show_json_opt
87     {:include => {:scroll_panels => {:include => {:panel => {}}}, :author => {}}}
88   end
89   
90   def self.visible_count
91     Scroll.count 'visible > 0'
92   end
93   
94   def destroy_with_scroll_panel
95     res = false
96     Scroll.transaction do
97       self.scroll_panels.each do |scroll_panel|
98         raise ActiveRecord::Rollback unless scroll_panel.destroy
99       end
100       raise ActiveRecord::Rollback unless self.destroy
101       res = true
102     end
103     res
104   end
105   
106   def scenario
107     panels.map {|panel|
108       panel.scenario
109     }.join
110   end
111   
112   def plain_scenario
113     panels.map {|panel|
114       panel.plain_scenario
115     }.join
116   end
117   
118 end