Class: StudyEngine::Assessment

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/study_engine/assessment.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.by_event(event) ⇒ Object



20
21
22
# File 'app/models/study_engine/assessment.rb', line 20

def self.by_event event
  where(event: event)
end

.by_site(site) ⇒ Object



29
30
31
# File 'app/models/study_engine/assessment.rb', line 29

def self.by_site site
  where("study_id RLIKE '...-#{site}-....'")
end

.by_study_id(study_id) ⇒ Object



24
25
26
27
# File 'app/models/study_engine/assessment.rb', line 24

def self.by_study_id study_id
  return none unless study_id
  where(study_id: study_id)
end

.timestamp_attributes_for_createObject

Rails 5.1



11
12
13
# File 'app/models/study_engine/assessment.rb', line 11

def self.timestamp_attributes_for_create
  super + ["assessment_updated_at"]
end

Instance Method Details

#by_mail?Boolean

Returns:

  • (Boolean)


103
104
105
# File 'app/models/study_engine/assessment.rb', line 103

def by_mail?
  method_applied == "By mail"
end

#by_url?Boolean

Returns:

  • (Boolean)


99
100
101
# File 'app/models/study_engine/assessment.rb', line 99

def by_url?
  method_applied == "By URL"
end

#complete?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'app/models/study_engine/assessment.rb', line 83

def complete?
  current_result.nil?
end

#coordinator_emailObject



39
40
41
# File 'app/models/study_engine/assessment.rb', line 39

def coordinator_email
  coordinator.try(:email)
end

#current_resultObject



67
68
69
# File 'app/models/study_engine/assessment.rb', line 67

def current_result
  results.find { |result| !result.finished? }
end

#full_historyObject



95
96
97
# File 'app/models/study_engine/assessment.rb', line 95

def full_history
  persisted_results.flat_map(&:answers).map(&:question_id)
end

#group_index_nameObject



107
108
109
110
# File 'app/models/study_engine/assessment.rb', line 107

def group_index_name
  return "" if group_index.nil?
  event_groups[group_index]
end

#incomplete?Boolean

Returns:

  • (Boolean)


87
88
89
# File 'app/models/study_engine/assessment.rb', line 87

def incomplete?
  !complete?
end

#notes?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'app/models/study_engine/assessment.rb', line 51

def notes?
  notes.present?
end

#percent_completeObject



71
72
73
# File 'app/models/study_engine/assessment.rb', line 71

def percent_complete
  (results.select(&:finished?).count / results.count.to_f * 100).round
end

#restarted_assessmentObject



43
44
45
# File 'app/models/study_engine/assessment.rb', line 43

def restarted_assessment
  Assessment.by_study_id(study_id).where(event: event).where.not(id: id).last
end

#resultsObject



57
58
59
60
61
62
63
64
65
# File 'app/models/study_engine/assessment.rb', line 57

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_summaryObject



91
92
93
# File 'app/models/study_engine/assessment.rb', line 91

def results_summary
  "#{results.select(&:finished?).count}/#{results.count}"
end

#save_answer(answer) ⇒ Object



77
78
79
80
81
# File 'app/models/study_engine/assessment.rb', line 77

def save_answer answer
  current_result.save_answer answer
  save!
  touch :assessment_updated_at
end

#stream_idObject



47
48
49
# File 'app/models/study_engine/assessment.rb', line 47

def stream_id
  StudyID.new("STR-#{study_id.site}-#{1000 + id}") unless new_record?
end

#timestamp_attributes_for_createObject

Rails 5.0



16
17
18
# File 'app/models/study_engine/assessment.rb', line 16

def timestamp_attributes_for_create
  super + ["assessment_updated_at"]
end