OSDN Git Service

t#29400:update:itr2
[pettanr/pettanr.git] / app / models / comic.rb
1 #コミック
2 class Comic < ActiveRecord::Base
3   has_many :stories
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   
9   def supply_default
10     self.visible = 0 if self.visible.blank?
11   end
12   
13   def overwrite au
14     return false unless au
15     self.author_id = au.id
16   end
17   
18   def own? author
19     return false unless author
20     self.author_id == author.id
21   end
22   
23   def visible? author
24     self.visible > 0 or self.own?(author)
25   end
26   
27   def disp_visible
28     visible == 1 ? 'O' : 'X'
29   end
30   
31   def self.default_page_size
32     25
33   end
34   
35   def self.max_page_size
36     100
37   end
38   
39   def self.default_panel_size
40     30
41   end
42   
43   def self.max_panel_size
44     200
45   end
46   
47   def self.page prm = nil
48     page = prm.to_i
49     page = 1 if page < 1
50     page
51   end
52   
53   def self.page_size prm = self.default_page_size
54     page_size = prm.to_i
55     page_size = self.max_page_size if page_size > self.max_page_size
56     page_size = self.default_page_size if page_size < 1
57     page_size
58   end
59   
60   def self.list page = 1, page_size = self.default_page_size
61     opt = {}
62     opt.merge!(Comic.list_opt)
63     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
64     opt.merge!({:conditions => ['visible > 0'], :order => 'updated_at desc'})
65     Comic.find(:all, opt)
66   end
67   
68   def self.list_opt
69     {:include => {:stories => {:panel => {}}, :author => {}}}
70   end
71   
72   def self.list_json_opt
73     {:include => {:stories => {:panel => {}}, :author => {}}}
74   end
75   
76   def self.mylist au, page = 1, page_size = Author.default_comic_page_size
77     opt = {}
78     opt.merge!(Comic.list_opt)
79     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
80     opt.merge!({:conditions => ['comics.author_id = ?', au.id], :order => 'comics.updated_at desc'})
81     Comic.find(:all, opt)
82   end
83   
84   def self.show cid, au
85     opt = {}
86     opt.merge!(Comic.show_opt)
87     res = Comic.find(cid, opt)
88     raise ActiveRecord::Forbidden unless res.visible?(au)
89     res
90   end
91   
92   def self.edit cid, au
93     opt = {}
94     opt.merge!(Comic.show_opt)
95     res = Comic.find(cid, opt)
96     raise ActiveRecord::Forbidden unless res.own?(au)
97     res
98   end
99   
100   def self.show_opt
101     {:include => {:stories => {:panel => {}}, :author => {}}}
102   end
103   
104   def self.show_json_opt
105     {:include => {:stories => {:panel => {}}, :author => {}}}
106   end
107   
108   def self.visible_count
109     Comic.count 'visible > 0'
110   end
111   
112 end