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
-
#answers_by_question ⇒ Object
answers for this sheet, grouped by question id.
- #collat_title ⇒ Object
- #complete? ⇒ Boolean
- #completely_filled_out? ⇒ Boolean
- #has_answer_for?(question_id) ⇒ Boolean
- #languages ⇒ Object
- #pages ⇒ Object
- #percent_complete ⇒ Object
-
#question_sheet ⇒ Object
Convenience method if there is only one question sheet in your system.
- #question_sheet_ids ⇒ Object
- #reference? ⇒ Boolean
Instance Method Details
#answers_by_question ⇒ Object
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_title ⇒ Object
79 |
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 79 def collat_title() "" end |
#complete? ⇒ 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
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
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 |
#languages ⇒ Object
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 |
#pages ⇒ Object
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_complete ⇒ Object
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_sheet ⇒ Object
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_ids ⇒ Object
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
68 69 70 |
# File 'app/models/fe/concerns/answer_sheet_concern.rb', line 68 def reference? false end |