Class: StudyEngine::Assessment
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- StudyEngine::Assessment
- Defined in:
- app/models/study_engine/assessment.rb
Class Method Summary collapse
Instance Method Summary collapse
- #by_mail? ⇒ Boolean
- #by_url? ⇒ Boolean
- #complete? ⇒ Boolean
- #coordinator_email ⇒ Object
- #current_result ⇒ Object
- #full_history ⇒ Object
- #group_index_name ⇒ Object
- #incomplete? ⇒ Boolean
- #notes? ⇒ Boolean
- #percent_complete ⇒ Object
- #restarted_assessment ⇒ Object
- #results ⇒ Object
- #results_summary ⇒ Object
- #save_answer(answer) ⇒ Object
- #stream_id ⇒ Object
- #timestamp_attributes_for_create ⇒ Object
Class Method Details
.by_event(event) ⇒ Object
14 15 16 |
# File 'app/models/study_engine/assessment.rb', line 14 def self.by_event event where(event: event) end |
.by_site(site) ⇒ Object
23 24 25 |
# File 'app/models/study_engine/assessment.rb', line 23 def self.by_site site where("study_id RLIKE '...-#{site}-....'") end |
.by_study_id(study_id) ⇒ Object
18 19 20 21 |
# File 'app/models/study_engine/assessment.rb', line 18 def self.by_study_id study_id return none unless study_id where(study_id: study_id) end |
Instance Method Details
#by_mail? ⇒ Boolean
97 98 99 |
# File 'app/models/study_engine/assessment.rb', line 97 def by_mail? method_applied == "By mail" end |
#by_url? ⇒ Boolean
93 94 95 |
# File 'app/models/study_engine/assessment.rb', line 93 def by_url? method_applied == "By URL" end |
#complete? ⇒ Boolean
77 78 79 |
# File 'app/models/study_engine/assessment.rb', line 77 def complete? current_result.nil? end |
#coordinator_email ⇒ Object
33 34 35 |
# File 'app/models/study_engine/assessment.rb', line 33 def coordinator_email coordinator.try(:email) end |
#current_result ⇒ Object
61 62 63 |
# File 'app/models/study_engine/assessment.rb', line 61 def current_result results.find { |result| !result.finished? } end |
#full_history ⇒ Object
89 90 91 |
# File 'app/models/study_engine/assessment.rb', line 89 def full_history persisted_results.flat_map(&:answers).map(&:question_id) end |
#group_index_name ⇒ Object
101 102 103 104 |
# File 'app/models/study_engine/assessment.rb', line 101 def group_index_name return "" if group_index.nil? event_groups[group_index] end |
#incomplete? ⇒ Boolean
81 82 83 |
# File 'app/models/study_engine/assessment.rb', line 81 def incomplete? !complete? end |
#notes? ⇒ Boolean
45 46 47 |
# File 'app/models/study_engine/assessment.rb', line 45 def notes? notes.present? end |
#percent_complete ⇒ Object
65 66 67 |
# File 'app/models/study_engine/assessment.rb', line 65 def percent_complete (results.select(&:finished?).count / results.count.to_f * 100).round end |
#restarted_assessment ⇒ Object
37 38 39 |
# File 'app/models/study_engine/assessment.rb', line 37 def restarted_assessment Assessment.by_study_id(study_id).where(event: event).where.not(id: id).last end |
#results ⇒ Object
51 52 53 54 55 56 57 58 59 |
# File 'app/models/study_engine/assessment.rb', line 51 def results @results ||= begin bank_ids = StudyEngine.bank_finder.call(self) return persisted_results if persisted_results.length == bank_ids.length bank_ids.map do |bank_id| persisted_results.find_or_initialize_by(bank_id: bank_id) end end end |
#results_summary ⇒ Object
85 86 87 |
# File 'app/models/study_engine/assessment.rb', line 85 def results_summary "#{results.select(&:finished?).count}/#{results.count}" end |
#save_answer(answer) ⇒ Object
71 72 73 74 75 |
# File 'app/models/study_engine/assessment.rb', line 71 def save_answer answer current_result.save_answer answer save! touch :assessment_updated_at end |
#stream_id ⇒ Object
41 42 43 |
# File 'app/models/study_engine/assessment.rb', line 41 def stream_id StudyID.new("STR-#{study_id.site}-#{1000 + id}") unless new_record? end |
#timestamp_attributes_for_create ⇒ Object
10 11 12 |
# File 'app/models/study_engine/assessment.rb', line 10 def super + [:assessment_updated_at] end |