#インポート処理
+require 'open-uri'
require 'common'
-module ActiveRecord\r
- class Base\r
+module ActiveRecord
+ class Base
module PettanImporter
def self.included(base)
base.extend(ClassMethods)
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')
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
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