OSDN Git Service

update license test
[pettanr/pettanr.git] / app / models / common_license.rb
1 #コモンライセンス
2 class CommonLicense < ActiveRecord::Base
3   belongs_to :license
4   
5   validates :name, :presence => true, :length => {:maximum => 50}
6   validates :url, :presence => true, :length => {:maximum => 200}, :uniqueness => true
7   validates :license_id, :presence => true, :numericality => true, :existence => true
8   
9   def self.default_page_size
10     25
11   end
12   
13   def self.max_page_size
14     100
15   end
16   
17   def self.page prm = nil
18     page = prm.to_i
19     page = 1 if page < 1
20     page
21   end
22   
23   def self.page_size prm = self.default_page_size
24     page_size = prm.to_i
25     page_size = self.max_page_size if page_size > self.max_page_size
26     page_size = self.default_page_size if page_size < 1
27     page_size
28   end
29   
30   def self.list opt = {}, page = 1, page_size = self.default_page_size
31     opt.merge!(self.list_opt) unless opt[:include]
32     opt.merge!({
33       :order => 'name', :limit => page_size, :offset => (page -1) * page_size}
34     )
35     CommonLicense.find(:all, opt)
36   end
37   
38   def self.list_opt
39     {:include => [:license]}
40   end
41   
42   def self.list_json_opt
43     {:include => [:license]}
44   end
45   
46   def self.show cid, opt = {}
47     cl = CommonLicense.find(cid, :include => self.show_include_opt(opt))
48 #    raise ActiveRecord::Forbidden unless pic.own?(author)
49     cl
50   end
51   
52   def self.show_include_opt opt = {}
53     res = [:license]
54     res.push(opt[:include]) if opt[:include]
55     res
56   end
57   
58   def self.show_json_include_opt
59     {:include => [:license]}
60   end
61   
62   def self.update_common_license data
63     if r = CommonLicense.find_by_url(data[:url])
64       r.attributes = data
65     else
66       r = CommonLicense.new data
67     end
68     r
69   end
70   
71   def store
72     res = nil
73     CommonLicense.transaction do
74       l = License.update_license self
75       if res = l.save
76         self.license_id = l.id
77         res = self.save
78         raise ActiveRecord::Rollback unless res
79       else
80         raise ActiveRecord::Rollback
81       end
82     end
83     res
84   end
85   
86   def self.store params
87     cl = CommonLicense.update_common_license params
88     cl.store
89     cl
90   end
91   
92   def self.each_license data
93     data = [data] if data.is_a?(Hash)
94     data.each do |d|
95       yield d
96     end
97   end
98   
99   def self.parse(data)
100     res = data
101     begin
102       res = JSON.parse(data) if data.is_a?(String)
103     rescue 
104       return false
105     end
106     res
107   end
108   
109   def self.import(data)
110     d = CommonLicense.parse(data)
111     return false unless d
112     res = []
113     CommonLicense.transaction do
114       CommonLicense.each_license(d) do |lch|
115         cl = CommonLicense.store lch
116         res.push(cl) unless cl.valid?
117       end
118       raise ActiveRecord::Rollback unless res.empty?
119     end
120     res
121   end
122   
123   def self.import_file(filename)
124     t = nil
125     begin
126       t = File.open(filename, 'r').read
127     rescue
128       return false
129     end
130     CommonLicense.import t
131   end
132   
133   def import_error_message(c = '\n')
134     self.errors.each do |atr, messages|
135       if atr == :base
136       end
137       full_messages.join c
138     end
139   end
140   
141 end