af83/chouette-core

View on GitHub
app/models/concerns/import_resources_support.rb

Summary

Maintainability
A
0 mins
Test Coverage
module ImportResourcesSupport
  extend ActiveSupport::Concern

  def main_resource
    @resource ||= parent.resources.find_or_create_by(name: referential_name, resource_type: 'referential', reference: self.name) if parent
  end

  def update_main_resource_status
    main_resource&.update_status_from_importer status
    true
  end

  def create_message args, opts={}
    resource = opts[:resource] || main_resource || self
    message = resource.messages.build args
    return message unless opts[:commit]
    begin
      resource.save!
    rescue
      Rails.logger.error "Invalid resource: #{resource.errors.inspect}"
      Rails.logger.error "Last message: #{resource.messages.last.errors.inspect}"
      raise
    end
    resource.update_status_from_messages
  end

  def create_resource name
    resources.find_or_initialize_by(name: name, resource_type: 'file', reference: name).tap do |r|
      r.import = self
    end
  end
end