diff options
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/import.rb | 10 | ||||
| -rw-r--r-- | app/models/import_log_message.rb | 36 | ||||
| -rw-r--r-- | app/models/referential.rb | 37 |
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 |
