Class: MoodAndEmotionVisualizationService

Inherits:
Object
  • Object
show all
Defined in:
app/support/mood_and_emotion_visualization_service.rb

Overview

Grouping logic for the visualization of participant mood and emotion data.

Instance Method Summary collapse

Constructor Details

#initialize(participant) ⇒ MoodAndEmotionVisualizationService

Returns a new instance of MoodAndEmotionVisualizationService.



4
5
6
# File 'app/support/mood_and_emotion_visualization_service.rb', line 4

def initialize(participant)
  @participant = participant
end

Instance Method Details

#emotional_rating_daily_averagesObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'app/support/mood_and_emotion_visualization_service.rb', line 29

def emotional_rating_daily_averages
  averaged_ratings = []

  daily_ratings = @participant
                  .emotional_ratings
                  .group_by { |x| x.created_at.strftime("%Y-%m-%d") }
  daily_ratings.each do |day, emotion_array|
    positive_ratings = @participant.positive_emotions(emotion_array)
    unless positive_ratings.empty?
      daily_positive = { day: day,
                         intensity: average_rating(positive_ratings),
                         is_positive: true,
                         drill_down: positive_ratings,
                         data_type: "Emotion" }
      averaged_ratings << daily_positive
    end
    negative_ratings = @participant.negative_emotions(emotion_array)

    next if negative_ratings.empty?

    daily_negative = {  day: day,
                        intensity: average_rating(negative_ratings),
                        is_positive: false,
                        drill_down: negative_ratings, data_type: "Emotion" }
    averaged_ratings << daily_negative
  end
  averaged_ratings
end

#mood_rating_daily_averagesObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/support/mood_and_emotion_visualization_service.rb', line 8

def mood_rating_daily_averages
  averaged_ratings = []
  daily_ratings = @participant
                  .moods
                  .group_by { |x| x.created_at.strftime("%Y-%m-%d") }
  daily_ratings.each do |day, moods_array|
    ratings = moods_array.collect do |mood|
      [mood.rating, mood.created_at].compact
    end

    next if ratings.empty?

    averaged_ratings << { day: day,
                          intensity: average_rating(ratings),
                          is_positive: true,
                          drill_down: ratings,
                          data_type: "Mood" }
  end
  averaged_ratings
end