processing.rb 2.68 KB
class Kalibro::Processing < Kalibro::Model

  attr_accessor :id, :date, :state, :error, :process_time, :results_root_id

  def self.processing_of(repository_id)
    if has_ready_processing(repository_id)
      last_ready_processing_of(repository_id)
    else #always exists a processing, we send a requisition to kalibro to process repository
      last_processing_of(repository_id)
    end
  end

  def self.processing_with_date_of(repository_id, date)
    date = date.is_a?(String) ? DateTime.parse(date) : date
    if has_processing_after(repository_id, date)
      first_processing_after(repository_id, date)
    elsif has_processing_before(repository_id, date)
      last_processing_before(repository_id, date)
    else
      last_processing_of(repository_id)        
    end
  end

  def id=(value)
    @id = value.to_i
  end

  def date=(value)
    @date = value.is_a?(String) ? DateTime.parse(value) : value
  end

  def process_times=(value)
    process_time=value
  end

  def process_time=(value)
    @process_time = Kalibro::ProcessTime.to_objects_array value
  end

  def process_times
    process_time
  end

  def error=(value)
    @error = Kalibro::Throwable.to_object value
  end

  def results_root_id=(value)
    @results_root_id = value.to_i
  end

  private

  def self.has_processing(repository_id)
    request(:has_processing, {:repository_id => repository_id})[:exists]
  end
  
  def self.has_ready_processing(repository_id)
    request(:has_ready_processing, {:repository_id => repository_id})[:exists]
  end
  
  def self.has_processing_after(repository_id, date)
    request(:has_processing_after, {:repository_id => repository_id, :date => date})[:exists]
  end

  def self.has_processing_before(repository_id, date)
    request(:has_processing_before, {:repository_id => repository_id, :date => date})[:exists]
  end

  def self.last_processing_state_of(repository_id)
    request(:last_processing_state, {:repository_id => repository_id})[:process_state]
  end
  
  def self.last_ready_processing_of(repository_id)
    new request(:last_ready_processing, {:repository_id => repository_id})[:processing]
  end

  def self.first_processing_of(repository_id)
    new request(:first_processing, {:repository_id => repository_id})[:processing]
  end

  def self.last_processing_of(repository_id)
    new request(:last_processing, {:repository_id => repository_id})[:processing]
  end

  def self.first_processing_after(repository_id, date)
    new request(:first_processing_after, {:repository_id => repository_id, :date => date})[:processing]
  end

  def self.last_processing_before(repository_id, date)
    new request(:last_processing_before, {:repository_id => repository_id, :date => date})[:processing]
  end

end