OSDN Git Service

t#29620:json output include child
[pettanr/pettanr.git] / app / models / artist.rb
1 class Artist < ActiveRecord::Base
2   belongs_to :author
3   has_many :original_pictures
4   has_many :pictures
5   has_many :resource_pictures
6   
7   validates :name, :presence => true, :length => {:maximum => 30}
8   validates :author_id, :numericality => {:allow_blank => true}
9   
10   def supply_default
11     self.name = 'no name' if self.name.blank?
12   end
13   
14   def overwrite au
15     return false unless au
16     self.author_id = au.id
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     true
26   end
27   
28   def self.find_by_author author
29     Artist.find( :first, :conditions => ['author_id = ?', author.id])
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.page prm = nil
41     page = prm.to_i
42     page = 1 if page < 1
43     page
44   end
45   
46   def self.page_size prm = self.default_page_size
47     page_size = prm.to_i
48     page_size = self.max_page_size if page_size > self.max_page_size
49     page_size = self.default_page_size if page_size < 1
50     page_size
51   end
52   
53   def self.offset cnt, prm = nil
54     offset = prm.to_i
55     offset = cnt - 1 if offset >= cnt
56     offset = cnt - offset.abs if offset < 0
57     offset = 0 if offset < 0
58     offset
59   end
60   
61   def self.list page = 1, page_size = self.default_page_size
62     opt = {}
63     opt.merge!(Artist.list_opt)
64     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
65     opt.merge!({:order => 'created_at desc'})
66     Artist.find(:all, opt)
67   end
68   
69   def self.list_opt
70     {:include => {:author => {}} }
71   end
72   
73   def self.list_json_opt
74     {:include => {:author => {}} }
75   end
76   
77   def self.show aid, au
78     opt = {}
79     opt.merge!(Artist.show_opt)
80     res = Artist.find(aid, opt)
81     raise ActiveRecord::Forbidden unless res.visible?(au)
82     res
83   end
84   
85   def self.edit sid, au
86     opt = {}
87     opt.merge!(Artist.show_opt)
88     res = Artist.find sid, opt
89     raise ActiveRecord::Forbidden unless res.own?(au)
90     res
91   end
92   
93   def self.show_opt
94     {:include => {:author => {}} }
95   end
96   
97   def self.show_json_opt
98     {:include => {:author => {}} }
99   end
100   
101   def self.visible_count
102     Artist.count
103   end
104   
105 end