aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/export
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/export')
-rw-r--r--app/models/export/base.rb4
-rw-r--r--app/models/export/simple_exporter/base.rb94
2 files changed, 97 insertions, 1 deletions
diff --git a/app/models/export/base.rb b/app/models/export/base.rb
index 6a1eb791d..6cf4c6b02 100644
--- a/app/models/export/base.rb
+++ b/app/models/export/base.rb
@@ -1,7 +1,9 @@
class Export::Base < ActiveRecord::Base
self.table_name = "exports"
- validates :type, presence: true
+ belongs_to :referential
+
+ validates :type, :referential_id, presence: true
def self.messages_class_name
"Export::Message"
diff --git a/app/models/export/simple_exporter/base.rb b/app/models/export/simple_exporter/base.rb
new file mode 100644
index 000000000..4e6e8eba4
--- /dev/null
+++ b/app/models/export/simple_exporter/base.rb
@@ -0,0 +1,94 @@
+class Export::SimpleExporter::Base < Export::Base
+ after_commit :call_exporter_async, on: :create
+
+ def self.user_visible?
+ false
+ end
+
+ def self.inherited child
+ super child
+ child.options = @options
+ child.instance_eval do
+ def self.user_visible?
+ true
+ end
+ end
+ end
+
+ def call_exporter_async
+ SimpleExportWorker.perform_async(id)
+ end
+
+ def simple_exporter_configuration_name
+
+ end
+
+ def exporter
+ @exporter ||= begin
+ if options[:_exporter_id]
+ exporter = SimpleJsonExporter.find options[:_exporter_id]
+ else
+ exporter = SimpleJsonExporter.create configuration_name: simple_exporter_configuration_name
+ options[:_exporter_id] = exporter.id
+ end
+ exporter
+ end
+ end
+
+ def configure_exporter config
+ end
+
+ def call_exporter
+ tmp = Tempfile.new [simple_exporter_configuration_name.to_s, ".json"]
+ referential.switch
+ exporter.configure do |config|
+ configure_exporter config
+ end
+ exporter.filepath = tmp.path
+ exporter.export
+ set_status_from_exporter
+ convert_exporter_journal_to_messages
+ self.file = tmp
+ self.save!
+ end
+
+ def set_status_from_exporter
+ if exporter.status.to_s == "error"
+ self.status = :failed
+ elsif exporter.status.to_s == "success"
+ self.status = :successful
+ else
+ self.status = :warning
+ end
+ end
+
+ def convert_exporter_journal_to_messages
+ self.messages.destroy_all
+ exporter.journal.each do |journal_item|
+ journal_item.symbolize_keys!
+ vals = {}
+
+ if journal_item[:kind].to_s == "warning"
+ vals[:criticity] = :warning
+ elsif journal_item[:kind].to_s == "error"
+ vals[:criticity] = :error
+ else
+ vals[:criticity] = :info
+ if journal_item[:event].to_s == "success"
+ vals[:message_key] = :success
+ end
+ end
+ vals[:resource_attributes] = journal_item[:row]
+
+ if journal_item[:message].present?
+ vals[:message_key] = :full_text
+ vals[:message_attributes] = {
+ text: journal_item[:message]
+ }
+ end
+ vals[:message_attributes] ||= {}
+ vals[:message_attributes][:line] = journal_item[:line]
+ self.messages.build vals
+ end
+ end
+end