app/models/response_set.rb in surveyor-0.9.5 vs app/models/response_set.rb in surveyor-0.9.6

- old
+ new

@@ -87,34 +87,60 @@ def complete! self.completed_at = Time.now end - def has_not_answered_question?(question) - self.responses.find_all_by_question_id(question.id).empty? + def correct? + responses.all?(&:correct?) end + def correctness_hash + { :questions => @survey.sections_with_questions.map(&:questions).flatten.compact.size, + :responses => responses.compact.size, + :correct => responses.find_all(&:correct?).compact.size + } + end + def mandatory_questions_complete? + progress_hash[:triggered_mandatory] == progress_hash[:triggered_mandatory_completed] + end + def progress_hash + qs = @survey.sections_with_questions.map(&:questions).flatten + ds = dependencies(qs.map(&:id)) + triggered = qs - ds.select{|d| !d.is_met?(self)}.map(&:question) + { :questions => qs.compact.size, + :triggered => triggered.compact.size, + :triggered_mandatory => triggered.select{|q| q.mandatory?}.compact.size, + :triggered_mandatory_completed => triggered.select{|q| q.mandatory? and is_answered?(q)}.compact.size + } + end + def is_answered?(question) + !is_unanswered?(question) + end + def is_unanswered?(question) + self.responses.detect{|r| r.question_id == question.id}.nil? + end # Returns the number of response groups (count of group responses enterted) for this question group def count_group_responses(questions) questions.map{|q| responses.select{|r| (r.question_id.to_i == q.id.to_i) && !r.response_group.nil?}.group_by(&:response_group).size }.max end def unanswered_dependencies - dependencies.select{|d| d.is_met?(self) and self.has_not_answered_question?(d.question)}.map(&:question) + dependencies.select{|d| d.is_met?(self) and self.is_unanswered?(d.question)}.map(&:question) end def all_dependencies arr = dependencies.partition{|d| d.is_met?(self) } {:show => arr[0].map{|d| d.question_group_id.nil? ? "question_#{d.question_id}" : "question_group_#{d.question_group_id}"}, :hide => arr[1].map{|d| d.question_group_id.nil? ? "question_#{d.question_id}" : "question_group_#{d.question_group_id}"}} end protected - def dependencies - question_ids = Question.find_all_by_survey_section_id(current_section_id).map(&:id) + def dependencies(question_ids = nil) + question_ids ||= Question.find_all_by_survey_section_id(current_section_id).map(&:id) depdendecy_ids = DependencyCondition.all(:conditions => {:question_id => question_ids}).map(&:dependency_id) Dependency.find(depdendecy_ids, :include => :dependency_conditions) end + end # responses # "responses"=>{ \ No newline at end of file