Class: StudyEngine::Assessment

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.by_event(event) ⇒ Object



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

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

.by_site(site) ⇒ Object



32
33
34
# File 'app/models/study_engine/assessment.rb', line 32

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

.by_study_id(study_id) ⇒ Object



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

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



14
15
16
# File 'app/models/study_engine/assessment.rb', line 14

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

Instance Method Details

#by_mail?Boolean

Returns:

  • (Boolean)


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

def by_mail?
  method_applied == "By mail"
end

#by_url?Boolean

Returns:

  • (Boolean)


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

def by_url?
  method_applied == "By URL"
end

#complete?Boolean

Returns:

  • (Boolean)


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

def complete?
  current_result.nil?
end

#coordinator_emailObject



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

def coordinator_email
  coordinator.try(:email)
end

#current_resultObject



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

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

#full_historyObject



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

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

#group_index_nameObject



110
111
112
113
# File 'app/models/study_engine/assessment.rb', line 110

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

#incomplete?Boolean

Returns:

  • (Boolean)


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

def incomplete?
  !complete?
end

#notes?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'app/models/study_engine/assessment.rb', line 54

def notes?
  notes.present?
end

#percent_completeObject



74
75
76
# File 'app/models/study_engine/assessment.rb', line 74

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

#restarted_assessmentObject



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

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

#resultsObject



60
61
62
63
64
65
66
67
68
# File 'app/models/study_engine/assessment.rb', line 60

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



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

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

#save_answer(answer) ⇒ Object



80
81
82
83
84
# File 'app/models/study_engine/assessment.rb', line 80

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

#stream_idObject



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

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

#timestamp_attributes_for_createObject

Rails 5.0



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

def timestamp_attributes_for_create
  super + ["assessment_updated_at"]
end