OSDN Git Service

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