Module: Fe::AnswerSheetConcern

Extended by:
ActiveSupport::Concern
Included in:
AnswerSheet, ReferenceSheet
Defined in:
app/models/fe/concerns/answer_sheet_concern.rb

Instance Method Summary collapse

Instance Method Details

#answers_by_questionObject

answers for this sheet, grouped by question id



47
48
49
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 47

def answers_by_question
  @answers_by_question ||= answers.group_by { |answer| answer.question_id }
end

#collat_titleObject



79
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 79

def collat_title() "" end

#complete?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 42

def complete?
  !completed_at.nil?
end

#completely_filled_out?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 60

def completely_filled_out?
  pages.all? {|p| p.complete?(self)}
end

#has_answer_for?(question_id) ⇒ Boolean

Returns:

  • (Boolean)


64
65
66
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 64

def has_answer_for?(question_id)
  !answers_by_question[question_id].nil?
end

#languagesObject



32
33
34
35
36
37
38
39
40
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 32

def languages
  return [] unless question_sheets.first

  unless @languages
    @languages = question_sheets.first.languages
    question_sheets[1..-1].each { |qs| @languages &= qs.languages.select(&:present?) }
  end
  @languages
end

#pagesObject



56
57
58
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 56

def pages
  Page.where(:question_sheet_id => question_sheets.collect(&:id)).order('number')
end

#percent_completeObject



72
73
74
75
76
77
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 72

def percent_complete
  num_questions = question_sheets.inject(0.0) { |sum, qs| qs.nil? ? sum : qs.questions_count + sum }
  return 0 if num_questions == 0
  num_answers = answers.where("(value IS NOT NULL) AND (value != '')").select("DISTINCT question_id").count
  [ [ (num_answers.to_f / num_questions.to_f * 100.0).to_i, 100 ].min, 0 ].max
end

#question_sheetObject

Convenience method if there is only one question sheet in your system



52
53
54
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 52

def question_sheet
  question_sheets.first
end

#question_sheet_idsObject



81
82
83
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 81

def question_sheet_ids
  question_sheets.collect(&:id)
end

#reference?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 68

def reference?
  false
end