OSDN Git Service

test update
[pettanr/pettanr.git] / app / models / common_license.rb
index d480437..906fbfd 100644 (file)
+#コモンライセンス
 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
   
 end