+#コモンライセンス
class CommonLicense < ActiveRecord::Base
belongs_to :license
- def save_save
- license = License.new( {
- :name => self.name, :url => self.url, :cc_by => self.cc_by, :cc_sa => self.cc_sa, :cc_nd => self.cc_nd, :cc_nc => self.cc_nc,
- :no_resize => self.no_resize, :no_flip => self.no_flip, :no_convert => self.no_convert, :keep_aspect_ratio => self.keep_aspect_ratio
- })
- self.license_id = 0
- res = self.save
- return false unless res
- return false unless license.save
- self.license_id = license.id
- res = self.save
+ validates :name, :presence => true, :length => {:maximum => 50}
+ validates :url, :presence => true, :length => {:maximum => 200}, :uniqueness => true
+ validates :license_id, :presence => true, :numericality => true, :existence => true
+
+ def self.default_page_size
+ 25
+ end
+
+ def self.max_page_size
+ 100
+ end
+
+ def self.page prm = nil
+ page = prm.to_i
+ page = 1 if page < 1
+ page
+ end
+
+ def self.page_size prm = self.default_page_size
+ page_size = prm.to_i
+ page_size = self.max_page_size if page_size > self.max_page_size
+ page_size = self.default_page_size if page_size < 1
+ page_size
+ end
+
+ def self.list opt = {}, page = 1, page_size = self.default_page_size
+ opt.merge!(self.list_opt) unless opt[:include]
+ opt.merge!({
+ :order => 'name', :limit => page_size, :offset => (page -1) * page_size}
+ )
+ CommonLicense.find(:all, opt)
+ end
+
+ def self.list_opt
+ {:include => [:license]}
+ end
+
+ def self.list_json_opt
+ {:include => [:license]}
+ end
+
+ def self.show cid, opt = {}
+ cl = CommonLicense.find(cid, :include => self.show_include_opt(opt))
+# raise ActiveRecord::Forbidden unless pic.own?(author)
+ cl
+ end
+
+ def self.show_include_opt opt = {}
+ res = [:license]
+ res.push(opt[:include]) if opt[:include]
+ res
+ end
+
+ def self.show_json_include_opt
+ {:include => [:license]}
+ end
+
+ def self.update_common_license data
+ if r = CommonLicense.find_by_url(data[:url])
+ r.attributes = data
+ else
+ r = CommonLicense.new data
+ end
+ r
+ end
+
+ def store
+ res = nil
+ CommonLicense.transaction do
+ l = License.update_license self
+ if res = l.save
+ self.license_id = l.id
+ res = self.save
+ raise ActiveRecord::Rollback unless res
+ else
+ raise ActiveRecord::Rollback
+ end
+ end
+ res
+ end
+
+ def self.store params
+ cl = CommonLicense.update_common_license params
+ cl.store
+ cl
+ end
+
+ def self.each_license data
+ data = [data] if data.is_a?(Hash)
+ data.each do |d|
+ yield d
+ end
+ end
+
+ def self.parse(data)
+ res = data
+ begin
+ res = JSON.parse(data) if data.is_a?(String)
+ rescue
+ return false
+ end
+ res
+ end
+
+ def self.import(data)
+ d = CommonLicense.parse(data)
+ return false unless d
+ res = []
+ CommonLicense.transaction do
+ CommonLicense.each_license(d) do |lch|
+ cl = CommonLicense.store lch
+ res.push(cl) unless cl.valid?
+ end
+ raise ActiveRecord::Rollback unless res.empty?
+ end
res
end
def self.import_file(filename)
- t = File.open(filename, 'r').read
- j = JSON.parse t
- l = CommonLicense.new j
- l.save_save
- p l.id
+ t = nil
+ begin
+ t = File.open(filename, 'r').read
+ rescue
+ return false
+ end
+ CommonLicense.import t
+ end
+
+ def import_error_message(c = '\n')
+ self.errors.each do |atr, messages|
+ if atr == :base
+ end
+ full_messages.join c
+ end
end
end