diff options
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/concerns/iev_interfaces/message.rb | 9 | ||||
| -rw-r--r-- | app/models/concerns/iev_interfaces/resource.rb | 9 | ||||
| -rw-r--r-- | app/models/concerns/iev_interfaces/task.rb | 51 | ||||
| -rw-r--r-- | app/models/import.rb | 103 | ||||
| -rw-r--r-- | app/models/import/base.rb | 73 | ||||
| -rw-r--r-- | app/models/import/gtfs.rb (renamed from app/models/gtfs_import.rb) | 2 | ||||
| -rw-r--r-- | app/models/import/message.rb | 8 | ||||
| -rw-r--r-- | app/models/import/netex.rb (renamed from app/models/netex_import.rb) | 2 | ||||
| -rw-r--r-- | app/models/import/resource.rb | 8 | ||||
| -rw-r--r-- | app/models/import/workbench.rb (renamed from app/models/workbench_import.rb) | 2 | ||||
| -rw-r--r-- | app/models/import_message.rb | 8 | ||||
| -rw-r--r-- | app/models/import_resource.rb | 11 | ||||
| -rw-r--r-- | app/models/workbench.rb | 4 | 
13 files changed, 163 insertions, 127 deletions
| diff --git a/app/models/concerns/iev_interfaces/message.rb b/app/models/concerns/iev_interfaces/message.rb new file mode 100644 index 000000000..ad41e98b7 --- /dev/null +++ b/app/models/concerns/iev_interfaces/message.rb @@ -0,0 +1,9 @@ +module IevInterfaces::Message +  extend ActiveSupport::Concern + +  included do +    extend Enumerize +    enumerize :criticity, in: %i(info warning error) +    validates :criticity, presence: true +  end +end diff --git a/app/models/concerns/iev_interfaces/resource.rb b/app/models/concerns/iev_interfaces/resource.rb new file mode 100644 index 000000000..7f8c3eefd --- /dev/null +++ b/app/models/concerns/iev_interfaces/resource.rb @@ -0,0 +1,9 @@ +module IevInterfaces::Resource +  extend ActiveSupport::Concern + +  included do +    extend Enumerize +    enumerize :status, in: %i(OK ERROR WARNING IGNORED), scope: true +    validates_presence_of :name, :resource_type, :reference +  end +end diff --git a/app/models/concerns/iev_interfaces/task.rb b/app/models/concerns/iev_interfaces/task.rb new file mode 100644 index 000000000..2eb0c532f --- /dev/null +++ b/app/models/concerns/iev_interfaces/task.rb @@ -0,0 +1,51 @@ +module IevInterfaces::Task +  extend ActiveSupport::Concern + +  included do +    belongs_to :parent, polymorphic: true +    belongs_to :workbench, class_name: "::Workbench" +    belongs_to :referential + +    extend Enumerize +    enumerize :status, in: %w(new pending successful warning failed running aborted canceled), scope: true, default: :new + +    validates :name, presence: true +    validates_presence_of :workbench, :creator + +    has_many :messages, class_name: messages_class_name, dependent: :destroy, foreign_key: :import_id +    has_many :resources, class_name: resources_class_name, dependent: :destroy, foreign_key: :import_id + +    scope :where_started_at_in, ->(period_range) do +      where('started_at BETWEEN :begin AND :end', begin: period_range.begin, end: period_range.end) +    end + +    scope :blocked, -> { where('created_at < ? AND status = ?', 4.hours.ago, 'running') } +  end + +  module ClassMethods +    def launched_statuses +      %w(new pending) +    end + +    def failed_statuses +      %w(failed aborted canceled) +    end + +    def finished_statuses +      %w(successful failed warning aborted canceled) +    end + +    def abort_old +      where( +        'created_at < ? AND status NOT IN (?)', +        4.hours.ago, +        finished_statuses +      ).update_all(status: 'aborted') +    end +  end + +  def notify_parent +    parent.child_change +    update(notified_parent_at: DateTime.now) +  end +end diff --git a/app/models/import.rb b/app/models/import.rb deleted file mode 100644 index adad39b59..000000000 --- a/app/models/import.rb +++ /dev/null @@ -1,103 +0,0 @@ -class Import < ActiveRecord::Base -  mount_uploader :file, ImportUploader -  belongs_to :workbench -  belongs_to :referential - -  belongs_to :parent, polymorphic: true - -  has_many :messages, class_name: "ImportMessage", dependent: :destroy -  has_many :resources, class_name: "ImportResource", dependent: :destroy -  has_many :children, foreign_key: :parent_id, class_name: "Import", dependent: :destroy - -  scope :where_started_at_in, ->(period_range) do -    where('started_at BETWEEN :begin AND :end', begin: period_range.begin, end: period_range.end) -  end - -  scope :blocked, -> { where('created_at < ? AND status = ?', 4.hours.ago, 'running') } - -  extend Enumerize -  enumerize :status, in: %w(new pending successful warning failed running aborted canceled), scope: true, default: :new - -  validates :name, presence: true -  validates :file, presence: true -  validates_presence_of :workbench, :creator - -  before_create :initialize_fields - -  def self.model_name -    ActiveModel::Name.new Import, Import, "Import" -  end - -  def children_succeedeed -    children.with_status(:successful, :warning).count -  end - -  def self.launched_statuses -    %w(new pending) -  end - -  def self.failed_statuses -    %w(failed aborted canceled) -  end - -  def self.finished_statuses -    %w(successful failed warning aborted canceled) -  end - -  def self.abort_old -    where( -      'created_at < ? AND status NOT IN (?)', -      4.hours.ago, -      finished_statuses -    ).update_all(status: 'aborted') -  end - -  def notify_parent -    parent.child_change -    update(notified_parent_at: DateTime.now) -  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/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/gtfs_import.rb b/app/models/import/gtfs.rb index d09ca4cb3..03cf49e60 100644 --- a/app/models/gtfs_import.rb +++ b/app/models/import/gtfs.rb @@ -1,5 +1,5 @@  require 'net/http' -class GtfsImport < Import +class Import::Gtfs < Import::Base    before_destroy :destroy_non_ready_referential    after_commit :launch_java_import, on: :create 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/netex_import.rb b/app/models/import/netex.rb index b21af3408..a4bf0920d 100644 --- a/app/models/netex_import.rb +++ b/app/models/import/netex.rb @@ -1,5 +1,5 @@  require 'net/http' -class NetexImport < Import +class Import::Netex < Import::Base    before_destroy :destroy_non_ready_referential    after_commit :launch_java_import, on: :create 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/workbench_import.rb b/app/models/import/workbench.rb index 27f53a44f..f6e15cb89 100644 --- a/app/models/workbench_import.rb +++ b/app/models/import/workbench.rb @@ -1,4 +1,4 @@ -class WorkbenchImport < Import +class Import::Workbench < Import::Base    after_commit :launch_worker, :on => :create    def launch_worker diff --git a/app/models/import_message.rb b/app/models/import_message.rb deleted file mode 100644 index de70c35d1..000000000 --- a/app/models/import_message.rb +++ /dev/null @@ -1,8 +0,0 @@ -class ImportMessage < ActiveRecord::Base -  extend Enumerize -  belongs_to :import -  belongs_to :resource, class_name: ImportResource -  enumerize :criticity, in: %i(info warning error) - -  validates :criticity, presence: true -end diff --git a/app/models/import_resource.rb b/app/models/import_resource.rb deleted file mode 100644 index 55e752e74..000000000 --- a/app/models/import_resource.rb +++ /dev/null @@ -1,11 +0,0 @@ -class ImportResource < ActiveRecord::Base -  belongs_to :import - -  extend Enumerize -  enumerize :status, in: %i(OK ERROR WARNING IGNORED), scope: true - -  validates_presence_of :name, :resource_type, :reference - -  has_many :messages, class_name: "ImportMessage", foreign_key: :resource_id - -end diff --git a/app/models/workbench.rb b/app/models/workbench.rb index b6f90c7dc..44415f102 100644 --- a/app/models/workbench.rb +++ b/app/models/workbench.rb @@ -13,8 +13,8 @@ class Workbench < ActiveRecord::Base    has_many :companies, through: :line_referential    has_many :group_of_lines, through: :line_referential    has_many :stop_areas, through: :stop_area_referential -  has_many :imports -  has_many :workbench_imports +  has_many :imports, class_name: Import::Base +  has_many :workbench_imports, class_name: Import::Workbench    has_many :compliance_check_sets    has_many :compliance_control_sets    has_many :merges | 
