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.



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

def initialize(participant)
  @participant = participant
end

Instance Method Details

#emotional_rating_daily_averagesObject



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
57
58
59
# File 'app/support/mood_and_emotion_visualization_service.rb', line 30

def emotional_rating_daily_averages
  averaged_ratings = []

  daily_ratings = @participant.emotional_ratings
                  .group_by { |x| x.created_at.strftime("%Y-%m-%d") }
  # rubocop:disable all
  daily_ratings.each do |day, emotion_array|
    # rubocop:enable all
    positive_ratings = @participant.positive_emotions(emotion_array)
    if positive_ratings.size > 0
      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)
    if negative_ratings.size > 0
      daily_negative = {  day: day,
                          intensity: average_rating(negative_ratings),
                          is_positive: false,
                          drill_down: negative_ratings, data_type: "Emotion"
      }
      averaged_ratings << daily_negative
    end
  end
  averaged_ratings
end

#mood_rating_daily_averagesObject



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

def mood_rating_daily_averages
  averaged_ratings = []
  daily_ratings = @participant
                  .moods
                  .group_by { |x| x.created_at.strftime("%Y-%m-%d") }
  # rubocop:disable all
  daily_ratings.each do |day, moods_array|
    # rubocop:enable all
    ratings = moods_array.collect do |mood|
      [mood.rating, mood.created_at].compact
    end
    if ratings.size > 0
      averaged_ratings << { day: day,
                            intensity: average_rating(ratings),
                            is_positive: true,
                            drill_down: ratings,
                            data_type: "Mood"
      }
    end
  end
  averaged_ratings
end