diff options
| author | Zog | 2018-03-07 07:50:02 +0100 | 
|---|---|---|
| committer | Zog | 2018-03-12 12:00:13 +0100 | 
| commit | b810deb08cadd56caeb76eb81cff363458bb79a3 (patch) | |
| tree | 6fd0c1bc383a9fa501666f6d86cee2ec06c573cd /app/models/import | |
| parent | 7b53b4c86d0469c21b54f4f974fbae5fc205ed0f (diff) | |
| download | chouette-core-b810deb08cadd56caeb76eb81cff363458bb79a3.tar.bz2 | |
Refs #6133; Fix specs
Diffstat (limited to 'app/models/import')
| -rw-r--r-- | app/models/import/base.rb | 73 | ||||
| -rw-r--r-- | app/models/import/gtfs.rb | 36 | ||||
| -rw-r--r-- | app/models/import/message.rb | 8 | ||||
| -rw-r--r-- | app/models/import/netex.rb | 38 | ||||
| -rw-r--r-- | app/models/import/resource.rb | 8 | ||||
| -rw-r--r-- | app/models/import/workbench.rb | 7 | 
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 | 
