OSDN Git Service

0a8da8d4bbb11297ce029db228d30b69cca8a57d
[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 = [data] if data.is_a?(Hash)
15           data.each do |d|
16             yield d
17           end
18         end
19         
20         def import(data, &blk)
21           d = JSON.parse_no_except(data)
22           return false unless d
23           res = []
24           self.transaction do
25             self.each_import(d) do |i|
26               m = blk.call(i)
27               res.push(m) unless m.valid?
28             end
29             raise ActiveRecord::Rollback unless res.empty?
30           end
31           res
32         end
33         
34         def import_file(filename)
35           t = nil
36           begin
37             t = File.open(filename, 'r').read
38           rescue
39             return false
40           end
41           self.import t
42         end
43         
44       end
45       
46       module InstanceMethods
47         private
48         
49         public
50         
51       end
52       
53     end
54     include PettanImporter
55   end
56 end
57