OSDN Git Service

Merge branch 'v04' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v04
[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 :width, :presence => true, :numericality => true, :natural_number => true
8   validates :height, :presence => true, :numericality => true, :natural_number => true
9   validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..3}
10   
11   before_save do |r|
12     r.supply_default
13   end
14   
15   def supply_default
16     self.visible = 0 if self.visible.blank?
17   end
18   
19   def own? author
20     return false unless author
21     self.author_id == author.id
22   end
23   
24   def visible? author
25     self.visible > 0 or self.own?(author)
26   end
27   
28   def disp_visible
29     visible == 1 ? 'O' : 'X'
30   end
31   
32   def self.default_page_size
33     25
34   end
35   
36   def self.max_page_size
37     100
38   end
39   
40   def self.default_panel_size
41     30
42   end
43   
44   def self.max_panel_size
45     200
46   end
47   
48   def self.page prm = nil
49     page = prm.to_i
50     page = 1 if page < 1
51     page
52   end
53   
54   def self.page_size prm = self.default_page_size
55     page_size = prm.to_i
56     page_size = self.max_page_size if page_size > self.max_page_size
57     page_size = self.default_page_size if page_size < 1
58     page_size
59   end
60   
61   def self.list opt = {}, page = 1, page_size = self.default_page_size
62     opt.merge!(self.list_opt) unless opt[:include]
63     opt.merge!({:conditions => ['visible > 0'], :order => 'updated_at desc', :limit => page_size, :offset => (page -1) * page_size})
64     Comic.find(:all, opt)
65   end
66   
67   def self.list_opt
68     {:include => {:stories => {:panel => {}}, :author => {}}}
69   end
70   
71   def self.list_json_opt
72     {:include => {:stories => {:panel => {}}, :author => {}}}
73   end
74   
75   def self.mylist au, opt = {}, page = 1, comic_page_size = Author.default_comic_page_size
76     opt.merge!(self.list_opt) unless opt[:include]
77     opt.merge!({:conditions => ['comics.author_id = ?', au.id], :order => 'comics.updated_at desc', :limit => page_size, :offset => (page -1) * comic_page_size})
78     Comic.find(:all, opt)
79   end
80   
81   def self.show cid, au, opt = {}
82     c = Comic.find(cid, :include => self.show_include_opt(opt))
83     raise ActiveRecord::Forbidden unless c.visible?(au)
84     c
85   end
86   
87   def self.show_include_opt opt = {}
88     res = {:stories => {:panel => {}}, :author => {}}
89     res.push(opt[:include]) if opt[:include]
90     res
91   end
92   
93   def self.show_json_include_opt
94     {:include => {:stories => {:panel => {}}, :author => {}}}
95   end
96   
97   def self.visible_count
98     Comic.count 'visible > 0'
99   end
100   
101 end