OSDN Git Service

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