OSDN Git Service

t#29826:up;importer replace
[pettanr/pettanr.git] / vendor / plugins / pettan_importer / lib / pettan_importer.rb
1 #インポート処理
2 require 'common'
3
4 module ActiveRecord\r
5   class Base\r
6     module PettanImporter
7       def self.included(base)
8         base.extend(ClassMethods)
9         base.__send__ :include, InstanceMethods
10       end
11       
12       module ClassMethods
13         def each_import data
14           data.each do |n, d|
15             yield n, d
16           end
17         end
18         
19         def import_system_picture attr
20           d = attr["text"]
21           return false if d.blank?
22           imager = PettanImager.load(Base64.decode64(d.to_s))
23           return false unless imager
24           sp = SystemPicture.store(imager)
25           return false unless sp
26           sp.id
27         end
28         
29         def replace_system_picture attr
30           attr.each do |name, value|
31             if value.is_a? Hash
32               r = if name.to_s =~ /_id$/
33                 self.import_system_picture value
34               else
35                 self.replace_system_picture value
36               end
37               return false unless r
38               attr[name] = r
39             end
40           end
41         end
42         
43         def modify_object(name, attr, key = 'name')
44           c = 'find_by_' + key.to_s
45           r = self.__send__ c, name
46           if r
47             r.attributes = attr
48           else
49             r = self.new attr
50             r[key] = name
51           end
52           r
53         end
54         
55         def import_text(data, &blk)
56           d = JSON.parse_no_except(data)
57           return false unless d
58           res = []
59           self.transaction do
60             d.each do |name, item|
61               m = blk.call(name, item)
62               res.push(m) unless m.valid?
63             end
64             raise ActiveRecord::Rollback unless res.empty?
65           end
66           res
67         end
68         
69         def import_file(filename, &blk)
70           t = nil
71           begin
72             t = File.open(filename, 'r').read
73           rescue
74             return false
75           end
76           self.import_text t, &blk
77         end
78         
79       end
80       
81       module InstanceMethods
82         private
83         
84         public
85         
86       end
87       
88     end
89     include PettanImporter
90   end
91 end
92