aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/referential.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/referential.rb')
-rw-r--r--app/models/referential.rb43
1 files changed, 39 insertions, 4 deletions
diff --git a/app/models/referential.rb b/app/models/referential.rb
index c78c81a75..8faeea170 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -2,9 +2,6 @@ class Referential < ActiveRecord::Base
validates_presence_of :name
validates_presence_of :slug
- before_create :create_schema
- before_destroy :destroy_schema
-
def lines
Chouette::Line.scoped
end
@@ -35,7 +32,45 @@ class Referential < ActiveRecord::Base
self
end
- private
+ before_create :prepare
+ before_destroy :destroy_schema
+
+ attr_accessor :resources
+ attr_accessor :loader
+
+ def loader
+ @loader ||= ::Chouette::Loader.new(slug)
+ end
+
+ def prepare
+ if resources
+ import_resources
+ else
+ create_schema
+ end
+ 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
+
+ def import_resources
+ # Apartment::Database.create create tables
+ loader.create
+ begin
+ with_original_filename do |file|
+ # chouette-command checks the file extension (and requires .zip) :(
+ loader.import file
+ end
+ rescue => e
+ loader.drop
+ raise e
+ end
+ end
def create_schema
Apartment::Database.create slug