diff options
Diffstat (limited to 'app/models/referential.rb')
| -rw-r--r-- | app/models/referential.rb | 54 | 
1 files changed, 35 insertions, 19 deletions
| diff --git a/app/models/referential.rb b/app/models/referential.rb index 486c3c495..c7c22604d 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -58,7 +58,7 @@ class Referential < ApplicationModel    belongs_to :referential_suite -  scope :pending, -> { where(ready: false, failed_at: nil, archived_at: nil, failed_at: nil) } +  scope :pending, -> { where(ready: false, failed_at: nil, archived_at: nil) }    scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) }    scope :failed, -> { where.not(failed_at: nil) }    scope :archived, -> { where.not(archived_at: nil) } @@ -122,24 +122,6 @@ class Referential < ApplicationModel      @_models_with_checksum || []    end -  def state -    return :failed if failed_at.present? -    return :archived if archived_at.present? -    ready ? :ready : :pending -  end - -  def failed! -    update ready: false, failed_at: Time.now, archived_at: nil -  end - -  def ready! -    update ready: true, failed_at: nil, archived_at: nil -  end - -  def archived! -    update ready: true, failed_at: nil, archived_at: Time.now -  end -    def lines      if metadatas.blank?        workbench ? workbench.lines : associated_lines @@ -551,6 +533,40 @@ class Referential < ApplicationModel      ready.not_merged.not_in_referential_suite    end +  ### STATE + +  def state +    return :failed if failed_at.present? +    return :archived if archived_at.present? +    ready ? :ready : :pending +  end + +  def pending! +    update ready: false, failed_at: nil, archived_at: nil +  end + +  def failed! +    update ready: false, failed_at: Time.now, archived_at: nil +  end + +  def ready! +    update ready: true, failed_at: nil, archived_at: nil +  end + +  def archived! +    update failed_at: nil, archived_at: Time.now +  end + +  def pending_while +    vals = attributes.slice(*%w(ready archived_at failed_at)) +    pending! +    begin +      yield +    ensure +      update vals +    end +  end +    private    def lock_table | 
