blob: ec6caa660d269ae0372ef83afcf596d27258503a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
class Import < ActiveRecord::Base
belongs_to :referential
validates_presence_of :referential_id
validates_presence_of :resources
validates_inclusion_of :status, :in => %w{ pending completed failed }
attr_accessor :resources
attr_accessor :loader
def loader
@loader ||= ::Chouette::Loader.new(referential.slug)
end
def with_original_filename
Dir.mktmpdir do |tmp_dir|
tmp_link = File.join(tmp_dir, resources.original_filename)
FileUtils.ln_s resources.path, tmp_link
yield tmp_link
end
end
before_validation :define_default_attributes, :on => :create
def define_default_attributes
self.status ||= "pending"
end
after_create :delayed_import
def delayed_import
save_resources
delay.import
end
@@root = "#{Rails.root}/tmp/imports"
cattr_accessor :root
def save_resources
FileUtils.mkdir_p root
FileUtils.cp resources.path, saved_resources
end
after_destroy :destroy_resources
def destroy_resources
FileUtils.rm saved_resources if File.exists? saved_resources
end
def saved_resources
"#{root}/#{id}.zip"
end
def import
begin
if resources
with_original_filename do |file|
# chouette-command checks the file extension (and requires .zip) :(
loader.import file
end
else
loader.import saved_resources
end
update_attribute :status, "completed"
rescue => e
Rails.logger.error "Import #{id} failed : #{e}, #{e.backtrace}"
update_attribute :status, "failed"
end
end
end
|