aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/import
diff options
context:
space:
mode:
authorZog2018-03-07 07:50:02 +0100
committerZog2018-03-12 12:00:13 +0100
commitb810deb08cadd56caeb76eb81cff363458bb79a3 (patch)
tree6fd0c1bc383a9fa501666f6d86cee2ec06c573cd /app/models/import
parent7b53b4c86d0469c21b54f4f974fbae5fc205ed0f (diff)
downloadchouette-core-b810deb08cadd56caeb76eb81cff363458bb79a3.tar.bz2
Refs #6133; Fix specs
Diffstat (limited to 'app/models/import')
-rw-r--r--app/models/import/base.rb73
-rw-r--r--app/models/import/gtfs.rb36
-rw-r--r--app/models/import/message.rb8
-rw-r--r--app/models/import/netex.rb38
-rw-r--r--app/models/import/resource.rb8
-rw-r--r--app/models/import/workbench.rb7
6 files changed, 170 insertions, 0 deletions
diff --git a/app/models/import/base.rb b/app/models/import/base.rb
new file mode 100644
index 000000000..0e1eae2c0
--- /dev/null
+++ b/app/models/import/base.rb
@@ -0,0 +1,73 @@
+class Import::Base < ActiveRecord::Base
+ self.table_name = "imports"
+
+ def self.messages_class_name
+ "Import::Message"
+ end
+
+ def self.resources_class_name
+ "Import::Resource"
+ end
+
+ include IevInterfaces::Task
+
+ mount_uploader :file, ImportUploader
+
+ has_many :children, foreign_key: :parent_id, class_name: "Import::Base", dependent: :destroy
+
+ validates :file, presence: true
+
+ before_create :initialize_fields
+
+ def self.model_name
+ ActiveModel::Name.new Import::Base, Import::Base, "Import::Base"
+ end
+
+ def children_succeedeed
+ children.with_status(:successful, :warning).count
+ end
+
+ def child_change
+ return if self.class.finished_statuses.include?(status)
+
+ update_status
+ update_referentials
+ end
+
+ def update_status
+ status =
+ if children.where(status: self.class.failed_statuses).count > 0
+ 'failed'
+ elsif children.where(status: "warning").count > 0
+ 'warning'
+ elsif children.where(status: "successful").count == children.count
+ 'successful'
+ end
+
+ attributes = {
+ current_step: children.count,
+ status: status
+ }
+
+ if self.class.finished_statuses.include?(status)
+ attributes[:ended_at] = Time.now
+ end
+
+ update attributes
+ end
+
+ def update_referentials
+ return unless self.class.finished_statuses.include?(status)
+
+ children.each do |import|
+ import.referential.update(ready: true) if import.referential
+ end
+ end
+
+ private
+
+ def initialize_fields
+ self.token_download = SecureRandom.urlsafe_base64
+ end
+
+end
diff --git a/app/models/import/gtfs.rb b/app/models/import/gtfs.rb
new file mode 100644
index 000000000..03cf49e60
--- /dev/null
+++ b/app/models/import/gtfs.rb
@@ -0,0 +1,36 @@
+require 'net/http'
+class Import::Gtfs < Import::Base
+ before_destroy :destroy_non_ready_referential
+
+ after_commit :launch_java_import, on: :create
+ before_save def abort_unless_referential
+ self.status = 'aborted' unless referential
+ end
+
+ def launch_java_import
+ return if self.class.finished_statuses.include?(status)
+ threaded_call_boiv_iev
+ end
+
+ private
+
+ def destroy_non_ready_referential
+ if referential && !referential.ready
+ referential.destroy
+ end
+ end
+
+ def threaded_call_boiv_iev
+ Thread.new(&method(:call_boiv_iev))
+ end
+
+ def call_boiv_iev
+ Rails.logger.error("Begin IEV call for import")
+ Net::HTTP.get(URI("#{Rails.configuration.iev_url}/boiv_iev/referentials/importer/new?id=#{id}"))
+ Rails.logger.error("End IEV call for import")
+ rescue Exception => e
+ logger.error "IEV server error : #{e.message}"
+ logger.error e.backtrace.inspect
+ end
+
+end
diff --git a/app/models/import/message.rb b/app/models/import/message.rb
new file mode 100644
index 000000000..c1900a718
--- /dev/null
+++ b/app/models/import/message.rb
@@ -0,0 +1,8 @@
+class Import::Message < ActiveRecord::Base
+ self.table_name = :import_messages
+
+ include IevInterfaces::Message
+
+ belongs_to :import, class_name: Import::Base
+ belongs_to :resource, class_name: Import::Resource
+end
diff --git a/app/models/import/netex.rb b/app/models/import/netex.rb
new file mode 100644
index 000000000..a4bf0920d
--- /dev/null
+++ b/app/models/import/netex.rb
@@ -0,0 +1,38 @@
+require 'net/http'
+class Import::Netex < Import::Base
+ before_destroy :destroy_non_ready_referential
+
+ after_commit :launch_java_import, on: :create
+ before_save def abort_unless_referential
+ self.status = 'aborted' unless referential
+ end
+
+ validates_presence_of :parent
+
+ def launch_java_import
+ return if self.class.finished_statuses.include?(status)
+ threaded_call_boiv_iev
+ end
+
+ private
+
+ def destroy_non_ready_referential
+ if referential && !referential.ready
+ referential.destroy
+ end
+ end
+
+ def threaded_call_boiv_iev
+ Thread.new(&method(:call_boiv_iev))
+ end
+
+ def call_boiv_iev
+ Rails.logger.error("Begin IEV call for import")
+ Net::HTTP.get(URI("#{Rails.configuration.iev_url}/boiv_iev/referentials/importer/new?id=#{id}"))
+ Rails.logger.error("End IEV call for import")
+ rescue Exception => e
+ logger.error "IEV server error : #{e.message}"
+ logger.error e.backtrace.inspect
+ end
+
+end
diff --git a/app/models/import/resource.rb b/app/models/import/resource.rb
new file mode 100644
index 000000000..73be04d0e
--- /dev/null
+++ b/app/models/import/resource.rb
@@ -0,0 +1,8 @@
+class Import::Resource < ActiveRecord::Base
+ self.table_name = :import_resources
+
+ include IevInterfaces::Resource
+
+ belongs_to :import, class_name: Import::Base
+ has_many :messages, class_name: "ImportMessage", foreign_key: :resource_id
+end
diff --git a/app/models/import/workbench.rb b/app/models/import/workbench.rb
new file mode 100644
index 000000000..f6e15cb89
--- /dev/null
+++ b/app/models/import/workbench.rb
@@ -0,0 +1,7 @@
+class Import::Workbench < Import::Base
+ after_commit :launch_worker, :on => :create
+
+ def launch_worker
+ WorkbenchImportWorker.perform_async(id)
+ end
+end