aboutsummaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/import.rb10
-rw-r--r--app/models/import_log_message.rb36
-rw-r--r--app/models/referential.rb37
3 files changed, 49 insertions, 34 deletions
diff --git a/app/models/import.rb b/app/models/import.rb
index fd3fb139d..64b5b5624 100644
--- a/app/models/import.rb
+++ b/app/models/import.rb
@@ -9,6 +9,8 @@ class Import < ActiveRecord::Base
attr_accessor :resources
attr_accessor :loader
+ has_many :log_messages, :class_name => "ImportLogMessage", :order => :position, :dependent => :destroy
+
def loader
@loader ||= ::Chouette::Loader.new(referential.slug)
end
@@ -26,7 +28,7 @@ class Import < ActiveRecord::Base
self.status ||= "pending"
end
- after_create :import
+ after_create :delayed_import
def delayed_import
save_resources
delay.import
@@ -49,8 +51,13 @@ class Import < ActiveRecord::Base
"#{root}/#{id}.zip"
end
+ def name
+ "#{Import.model_name.humanize} #{id}"
+ end
+
def import
begin
+ log_messages.create :key => :started
if resources
with_original_filename do |file|
# chouette-command checks the file extension (and requires .zip) :(
@@ -64,6 +71,7 @@ class Import < ActiveRecord::Base
Rails.logger.error "Import #{id} failed : #{e}, #{e.backtrace}"
update_attribute :status, "failed"
end
+ log_messages.create :key => status
end
end
diff --git a/app/models/import_log_message.rb b/app/models/import_log_message.rb
new file mode 100644
index 000000000..699c9603d
--- /dev/null
+++ b/app/models/import_log_message.rb
@@ -0,0 +1,36 @@
+class ImportLogMessage < ActiveRecord::Base
+ belongs_to :import
+ acts_as_list :scope => :import
+
+ validates_presence_of :key
+ validates_inclusion_of :severity, :in => %w{info warning error}
+
+ def arguments=(arguments)
+ write_attribute :arguments, (arguments.to_json if arguments.present?)
+ end
+
+ def arguments
+ @decoded_arguments ||=
+ begin
+ if (stored_arguments = raw_attributes).present?
+ ActiveSupport::JSON.decode stored_arguments
+ else
+ {}
+ end
+ end
+ end
+
+ def raw_attributes
+ read_attribute(:arguments)
+ end
+
+ before_validation :define_default_attributes, :on => :create
+ def define_default_attributes
+ self.severity ||= "info"
+ end
+
+ def full_message
+ I18n.translate key, arguments.symbolize_keys.merge(:scope => "import_log_messages.messages")
+ end
+
+end
diff --git a/app/models/referential.rb b/app/models/referential.rb
index 84640e43c..d7c5bba7e 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -34,44 +34,15 @@ class Referential < ActiveRecord::Base
self
end
- before_create :prepare
+ before_create :create_schema
before_destroy :destroy_schema
- attr_accessor :resources
- attr_accessor :loader
-
- def loader
- @loader ||= ::Chouette::Loader.new(slug)
- end
+ after_create :import_resources
- 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
+ attr_accessor :resources
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
+ imports.create(:resources => resources) if resources
end
def create_schema