OSDN Git Service

fix panel editor
[pettanr/pettanr.git] / vendor / plugins / pettan_importer / lib / pettan_importer.rb
index f28ce1e..ef79e29 100644 (file)
@@ -1,8 +1,9 @@
 #インポート処理
+require 'open-uri'
 require 'common'
 
-module ActiveRecord\r
-  class Base\r
+module ActiveRecord
+  class Base
     module PettanImporter
       def self.included(base)
         base.extend(ClassMethods)
@@ -16,14 +17,28 @@ module ActiveRecord
           end
         end
         
-        def replace_system_picture attr
-          d = attr["system_picture"]
-          return nil if d.blank?
-          sp = SystemPicture.store Base64.decode64(d.to_s)
+        def import_system_picture attr
+          d = attr["text"]
+          return false if d.blank?
+          imager = PettanImager.load(Base64.decode64(d.to_s))
+          return false unless imager
+          sp = SystemPicture.store(imager)
           return false unless sp
-          attr["system_picture_id"] = sp.id
-          attr.delete "system_picture"
-          true
+          sp.id
+        end
+        
+        def replace_system_picture attr
+          attr.each do |name, value|
+            if value.is_a? Hash
+              r = if name.to_s =~ /_id$/
+                self.import_system_picture value
+              else
+                self.replace_system_picture value
+              end
+              return false unless r
+              attr[name] = r
+            end
+          end
         end
         
         def modify_object(name, attr, key = 'name')
@@ -38,12 +53,10 @@ module ActiveRecord
           r
         end
         
-        def import_text(data, &blk)
-          d = JSON.parse_no_except(data)
-          return false unless d
+        def import_list(attrs, &blk)
           res = []
           self.transaction do
-            d.each do |name, item|
+            attrs.each do |name, item|
               m = blk.call(name, item)
               res.push(m) unless m.valid?
             end
@@ -52,14 +65,33 @@ module ActiveRecord
           res
         end
         
+        def import_text(text, &blk)
+          attrs = JSON.parse(text)
+          import_list attrs, &blk
+        end
+        
         def import_file(filename, &blk)
-          t = nil
-          begin
-            t = File.open(filename, 'r').read
-          rescue
-            return false
+          text = File.open(filename, 'r').read
+          self.import_text text, &blk
+        end
+        
+        def import_url(url, &blk)
+          text = open(url).read
+          self.import_text text, &blk
+        end
+        
+        def import_urls(urls, &blk)
+          r = {}
+          urls.each do |url|
+            h = {}
+            begin
+              h[:validations] = import_url(url, &blk)
+            rescue
+              h[:exception] = {:location => $@, :message => $!}
+            end
+            r[url] = h
           end
-          self.import_text t, &blk
+          r
         end
         
       end