OSDN Git Service

v07
[pettanr/pettanr.git] / app / models / provider.rb
1 class Provider < ActiveRecord::Base
2   belongs_to :provider_status
3   
4   validates :name, :presence => true, :length => {:maximum => 50}, :uniqueness => true
5   validates :caption, :presence => true, :length => {:maximum => 30}
6   validates :url, :presence => true, :length => {:maximum => 200}, :url => {:message => I18n.t('errors.messages.url')}
7   validates :description, :presence => true
8   validates :demander_url, :presence => true, :length => {:maximum => 200}, :url => {:message => I18n.t('errors.messages.url')}
9   validates :provider_status_id, :presence => true, :numericality => true, :existence => {:both => false}
10
11   def supply_default
12     self.provider_status_id = nil
13   end
14   
15   def overwrite
16   end
17   
18   def own? ad
19     return false unless ad
20     ad.is_a?(Admin)
21   end
22   
23   def visible? ad
24     return false unless ad
25     ad.is_a?(Admin)
26   end
27   
28   def status
29     self.provider_status.status
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.page prm = nil
45     page = prm.to_i
46     page = 1 if page < 1
47     page
48   end
49   
50   def self.page_size prm = self.default_page_size
51     page_size = prm.to_i
52     page_size = self.max_page_size if page_size > self.max_page_size
53     page_size = self.default_page_size if page_size < 1
54     page_size
55   end
56   
57   def self.list page = 1, page_size = self.default_page_size
58     opt = {}
59     opt.merge!(Provider.list_opt)
60     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
61     opt.merge!({:order => 'providers.name'})
62     Provider.find(:all, opt)
63   end
64   
65   def self.available_list page = 1, page_size = self.default_page_size
66     opt = {}
67     opt.merge!(Provider.list_opt)
68     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
69     opt.merge!({:conditions => ['provider_statuses.token is null'], :order => 'providers.name'})
70     Provider.find(:all, opt)
71   end
72   
73   def self.list_opt
74     {:include => {:provider_status => {}} }
75   end
76   
77   def self.list_json_opt
78     {:include => {:provider_status => {}} }
79   end
80   
81   def self.show pid, ad
82     opt = {}
83     opt.merge!(Provider.show_opt)
84     res = Provider.find(pid, opt)
85     raise ActiveRecord::Forbidden unless res.visible?(ad)
86     res
87   end
88   
89   def self.edit pid, ad
90     opt = {}
91     opt.merge!(Provider.show_opt)
92     res = Provider.find(pid, opt)
93     raise ActiveRecord::Forbidden unless res.own?(ad)
94     res
95   end
96   
97   def self.show_opt
98     {:include => {:provider_status => {}} }
99   end
100   
101   def self.show_json_opt
102     {:include => {:provider_status => {}} }
103   end
104   
105   def self.store name, attr
106     r = Provider.modify_object name, attr
107     Provider.transaction do
108       if r.new_record?
109         ps = ProviderStatus.new
110         ps.supply_default
111         if ps.save
112           r.provider_status_id = ps.id
113         else
114           r.provider_status_id = nil
115        end
116       end
117       raise ActiveRecord::Rollback unless r.save
118     end
119     r
120   end
121   
122   def self.import urls
123     Provider.import_urls(urls) {|name, attr| Provider.store(name, attr)}
124   end
125   
126   def export_url action
127     u = self.demander_url + (self.demander_url[-1] == '/' ? '' : '/')
128     u = URI.join(u, action + '.json')
129     u.to_s
130   end
131   
132 end