Class: StudyEngine::Report

Inherits:
Struct
  • Object
show all
Defined in:
app/models/study_engine/report.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#assessmentsObject

Returns the value of attribute assessments

Returns:

  • (Object)

    the current value of assessments



4
5
6
# File 'app/models/study_engine/report.rb', line 4

def assessments
  @assessments
end

#directionObject

Returns the value of attribute direction

Returns:

  • (Object)

    the current value of direction



4
5
6
# File 'app/models/study_engine/report.rb', line 4

def direction
  @direction
end

#fieldObject

Returns the value of attribute field

Returns:

  • (Object)

    the current value of field



4
5
6
# File 'app/models/study_engine/report.rb', line 4

def field
  @field
end

Class Method Details

.event_fieldsObject



5
6
7
# File 'app/models/study_engine/report.rb', line 5

def self.event_fields
  StudyEngine.events.map.with_index { |_, index| :"event_#{index}" }
end

.group_classObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/models/study_engine/report.rb', line 9

def self.group_class
  Struct.new(:study_id, *event_fields) do
    def each(&block)
      Report.event_fields.map { |field| send(field) }.each(&block)
    end

    def max_count
      Report.event_fields.map { |field| send(field).count }.max
    end

    def == other
      values == other.values
    end
  end
end

Instance Method Details

#ascending?Boolean

Returns:

  • (Boolean)


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

def ascending?
  direction == "ASC"
end

#build_groupsObject



29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/models/study_engine/report.rb', line 29

def build_groups
  assessments.reduce({}) do |groups, assessment|
    group = groups[assessment.study_id.to_s] || new_empty_group(assessment.study_id)

    field = field_map[assessment.event]

    group.send(field).push assessment
    group.send(field).sort_by! { |a| a.completed_at ? -1 : 1 }

    groups.merge(assessment.study_id.to_s => group)
  end.values
end

#groupsObject



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

def groups
  sort build_groups
end

#sort(groups) ⇒ Object



42
43
44
45
46
47
48
# File 'app/models/study_engine/report.rb', line 42

def sort groups
  groups.sort do |a, b|
    a = a.send(field)
    b = b.send(field)
    ascending? ? a <=> b : b <=> a
  end
end