aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/compliance_check_task.rb
diff options
context:
space:
mode:
authorMarc Florisson2014-01-22 17:41:04 +0100
committerMarc Florisson2014-01-22 17:41:04 +0100
commitc9437fc2e96f415e38c1e72fa10337769381f289 (patch)
tree199b39a7c8c5cc2cfef539f73f73c1b5fbea8a72 /app/models/compliance_check_task.rb
parent4e71abdc01f9f04ce6eec1989fa756ffc823fd65 (diff)
downloadchouette-core-c9437fc2e96f415e38c1e72fa10337769381f289.tar.bz2
merge branch validation
Diffstat (limited to 'app/models/compliance_check_task.rb')
-rw-r--r--app/models/compliance_check_task.rb95
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