OSDN Git Service

t#29400:itr3?
[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 replace_system_picture attr
20           d = attr["system_picture"]
21           return nil if d.blank?
22           imager = PettanImager.load(Base64.decode64(d.to_s))
23           return nil unless imager
24           sp = SystemPicture.store(imager)
25           return false unless sp
26           attr["system_picture_id"] = sp.id
27           attr.delete "system_picture"
28           true
29         end
30         
31         def modify_object(name, attr, key = 'name')
32           c = 'find_by_' + key.to_s
33           r = self.__send__ c, name
34           if r
35             r.attributes = attr
36           else
37             r = self.new attr
38             r[key] = name
39           end
40           r
41         end
42         
43         def import_text(data, &blk)
44           d = JSON.parse_no_except(data)
45           return false unless d
46           res = []
47           self.transaction do
48             d.each do |name, item|
49               m = blk.call(name, item)
50               res.push(m) unless m.valid?
51             end
52             raise ActiveRecord::Rollback unless res.empty?
53           end
54           res
55         end
56         
57         def import_file(filename, &blk)
58           t = nil
59           begin
60             t = File.open(filename, 'r').read
61           rescue
62             return false
63           end
64           self.import_text t, &blk
65         end
66         
67       end
68       
69       module InstanceMethods
70         private
71         
72         public
73         
74       end
75       
76     end
77     include PettanImporter
78   end
79 end
80