diff options
| author | Marc Florisson | 2014-01-22 17:41:04 +0100 | 
|---|---|---|
| committer | Marc Florisson | 2014-01-22 17:41:04 +0100 | 
| commit | c9437fc2e96f415e38c1e72fa10337769381f289 (patch) | |
| tree | 199b39a7c8c5cc2cfef539f73f73c1b5fbea8a72 /app/models/compliance_check_task.rb | |
| parent | 4e71abdc01f9f04ce6eec1989fa756ffc823fd65 (diff) | |
| download | chouette-core-c9437fc2e96f415e38c1e72fa10337769381f289.tar.bz2 | |
merge branch validation
Diffstat (limited to 'app/models/compliance_check_task.rb')
| -rw-r--r-- | app/models/compliance_check_task.rb | 95 | 
1 files changed, 95 insertions, 0 deletions
diff --git a/app/models/compliance_check_task.rb b/app/models/compliance_check_task.rb new file mode 100644 index 000000000..756f4ba13 --- /dev/null +++ b/app/models/compliance_check_task.rb @@ -0,0 +1,95 @@ +class ComplianceCheckTask < ActiveRecord::Base +  attr_accessor :rule_parameter_set_id + +  belongs_to :referential +  belongs_to :import_task + +  validates_presence_of :referential +  validates_presence_of :user_id +  validates_presence_of :user_name +  validates_inclusion_of :status, :in => %w{ pending processing completed failed } + +  has_many :compliance_check_results, :order => :status + +  serialize :parameter_set, JSON + +  include ::TypeIdsModelable + +  def chouette_command +    Chouette::Command.new(:schema => referential.slug) +  end + +  before_validation :define_default_attributes, :on => :create +  def define_default_attributes +    self.status ||= "pending" +    if self.rule_parameter_set +      self.parameter_set = self.rule_parameter_set.parameters +      self.parameter_set_name = self.rule_parameter_set.name +    end +  end + +  @@references_types = [ Chouette::Line, Chouette::Network, Chouette::Company, Chouette::GroupOfLine ] +  cattr_reader :references_types + +  #validates_inclusion_of :references_type, :in => references_types.map(&:to_s), :allow_blank => true, :allow_nil => true + +  after_destroy :destroy_import_task +  def destroy_import_task +    import_task.destroy if import_task +  end + +  def delayed_validate +    delay.validate if import_task.blank? +  end + +  def name +    "#{self.class.model_name.human} #{id}" +  end + +  def levels +    [].tap do |l| +      l.concat( [1 , 2]) if self.import_task +      l << 3 if self.parameter_set +    end +  end + +  def level1? +    levels.include?( 1) +  end + +  def level2? +    levels.include?( 2) +  end + +  def level3? +    levels.include?( 3) +  end + +  def rule_parameter_set_archived +    return nil unless parameter_set +    RuleParameterSet.new( :name => parameter_set_name).tap do |rs| +      rs.parameters = parameter_set +    end +  end + +  def rule_parameter_set +    return nil if self.rule_parameter_set_id.blank? +    RuleParameterSet.find( self.rule_parameter_set_id) +  end + +  def chouette_command_args +    {:c => "validate", :id => id} +  end + +  def validate +    begin +      chouette_command.run! chouette_command_args +      update_attribute :status, "completed" +    rescue => e +      Rails.logger.error "Validation #{id} failed : #{e}, #{e.backtrace}" +      update_attribute :status, "failed" +    end +  end + + +end  | 
