Sha256: 9cd1afc730357aa8e1b9f6e70dd2b41ae458ad93c2edd2e538bfafdee960f740

Contents?: true

Size: 1.46 KB

Versions: 5

Compression:

Stored size: 1.46 KB

Contents

class DependencyCondition < ActiveRecord::Base

  # Extending surveyor
  include "#{self.name}Extensions".constantize if Surveyor::Config['extend'].include?(self.name.underscore)

  # Constants
  OPERATORS = %w(== != < > <= >=) # CONSTANT or @@class_variable when validations listed before class method

  # Associations
  belongs_to :answer
  belongs_to :dependency
  belongs_to :dependent_question, :foreign_key => :question_id, :class_name => :question
  belongs_to :question

  # Validations
  validates_numericality_of :dependency_id, :question_id, :answer_id
  validates_presence_of :operator, :rule_key
  validates_inclusion_of :operator, :in => OPERATORS
  validates_uniqueness_of :rule_key, :scope => :dependency_id

  acts_as_response # includes "as" instance method
  
  # Class methods
  def self.operators
    OPERATORS
  end

  # Instance methods
  def to_hash(response_set)
    response = response_set.responses.detect{|r| r.answer_id.to_i == self.answer_id.to_i} || false # eval("nil and false") => nil so return false if no response is found
    {rule_key.to_sym => (response and self.is_met?(response))}
  end

  # Checks to see if the response passed in meets the dependency condition
  def is_met?(response)
    klass = response.answer.response_class
    return case self.operator
    when "==", "<", ">", "<=", ">="
      response.as(klass).send(self.operator, self.as(klass))
    when "!="
      !(response.as(klass) == self.as(klass))
    else
      false
    end
  end

end

Version data entries

5 entries across 5 versions & 3 rubygems

Version Path
ccls-surveyor-1.0.0 app/models/dependency_condition.rb
jakewendt-surveyor-0.11.3 app/models/dependency_condition.rb
surveyor-0.12.1 app/models/dependency_condition.rb
surveyor-0.11.0 app/models/dependency_condition.rb
surveyor-0.10.0 app/models/dependency_condition.rb