think_feel_do_engine 3.12.2 → 3.12.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +3 -3
- data/app/assets/javascripts/think_feel_do_engine/feel/mood.js +63 -0
- data/app/models/activity.rb +3 -4
- data/app/models/delivered_message.rb +2 -2
- data/app/models/group.rb +16 -29
- data/app/models/membership.rb +12 -8
- data/app/models/participant.rb +1 -1
- data/app/views/think_feel_do_engine/emotions/index.html.erb +1 -39
- data/lib/think_feel_do_engine/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 294cb733b7d6aaab9041418769aadaf0af82f003
|
4
|
+
data.tar.gz: ea4ca81298e6edfc3f6d92fcd559910c195c71ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d82dfd3f54e0bbb82f27c16dd77f8e33d184a71df5598f5bba85c627e6988855645d857e06049f07b789277615fff3aed79b27a2c9c0df298cf2790e6d10abc3
|
7
|
+
data.tar.gz: 4c7a4ae3116ef79dd1495b5ef419b48db9482494eafdede5519f9aa5ce01550d69eb2ab7a270634e10ef3d75435e524cdf787f608588adca5b494347842a8882
|
data/Rakefile
CHANGED
@@ -25,9 +25,9 @@ end
|
|
25
25
|
|
26
26
|
require "jshintrb/jshinttask"
|
27
27
|
Jshintrb::JshintTask.new :jshint do |t|
|
28
|
-
t.pattern =
|
28
|
+
t.pattern = %w( spec/dummy/spec/javascripts/**/*.js app/assets/javascripts/think_feel_do_engine/**/mood.js )
|
29
29
|
t.options = :defaults
|
30
|
-
t.globals = ["$".to_sym, :spyOn, :afterEach, :beforeEach, :describe, :expect, :it, :jasmine, :sc]
|
30
|
+
t.globals = ["$".to_sym, :spyOn, :afterEach, :beforeEach, :describe, :expect, :it, :jasmine, :sc, :Graph, :appendDateRange, :columnChart, :d3, :moment]
|
31
31
|
end
|
32
32
|
|
33
33
|
require "rubocop/rake_task"
|
@@ -44,6 +44,6 @@ task :default do
|
|
44
44
|
Rake::Task["brakeman"].invoke
|
45
45
|
Rake::Task["jshint"].invoke
|
46
46
|
Rake::Task["rubocop"].invoke
|
47
|
-
Rake::Task["spec"].invoke
|
48
47
|
Rake::Task["js_spec"].invoke
|
48
|
+
Rake::Task["spec"].invoke
|
49
49
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
(function () {
|
2
|
+
'use strict';
|
3
|
+
|
4
|
+
sc.calcStartOfDay = function(date) {
|
5
|
+
return moment(date.day, 'YYYY-MM-DDTHH:mm:ss.sssZ').startOf('day')._d;
|
6
|
+
};
|
7
|
+
|
8
|
+
sc.drawMoodEmotionGraphs = function(graphParameters) {
|
9
|
+
var NOTES = '*Click each day for more information.';
|
10
|
+
|
11
|
+
function clearContainers() {
|
12
|
+
$('div#mood, div#mood-legend, div#emotions, div#emotion-legend')
|
13
|
+
.empty();
|
14
|
+
}
|
15
|
+
|
16
|
+
function drawMoodViz(graphParameters) {
|
17
|
+
var GRAPH_DIV_ID = '#mood';
|
18
|
+
var GRAPH_TITLE = 'Mood*';
|
19
|
+
var LEGEND = [['Mood', '#4682B4'], ['Daily Average', 'green']];
|
20
|
+
var LEGEND_DIV_ID = '#mood-legend';
|
21
|
+
var PIXEL_HEIGHT = 300;
|
22
|
+
var Y_MAX = 10;
|
23
|
+
var Y_MIN = 0;
|
24
|
+
var YLABEL = 'mood';
|
25
|
+
|
26
|
+
d3.select(GRAPH_DIV_ID)
|
27
|
+
.datum(graphParameters.moodData)
|
28
|
+
.call(columnChart(graphParameters.startDate, graphParameters.endDate, Y_MIN, Y_MAX, GRAPH_TITLE, YLABEL)
|
29
|
+
.width(graphParameters.graphWidth)
|
30
|
+
.height(PIXEL_HEIGHT)
|
31
|
+
.x(function(date, i) {
|
32
|
+
return sc.calcStartOfDay(date);
|
33
|
+
})
|
34
|
+
.y(function(d, i) {
|
35
|
+
return d.intensity;
|
36
|
+
})
|
37
|
+
.drawLegend(LEGEND_DIV_ID, LEGEND, [NOTES]));
|
38
|
+
}
|
39
|
+
|
40
|
+
function drawEmotionViz(graphParameters) {
|
41
|
+
var GRAPH_DIV_ID = '#emotions';
|
42
|
+
var GRAPH_TITLE = 'Positive and Negative Emotions*';
|
43
|
+
var LEGEND = [['Positive', '#4682B4'], ['Negative', '#A52A2A'], ['Daily Average', 'green']];
|
44
|
+
var LEGEND_DIV_ID = '#emotion-legend';
|
45
|
+
var PIXEL_HEIGHT = 400;
|
46
|
+
var Y_MAX = 10;
|
47
|
+
var Y_MIN = -10;
|
48
|
+
var YLABEL = 'Intensity';
|
49
|
+
|
50
|
+
d3.select(GRAPH_DIV_ID)
|
51
|
+
.datum(graphParameters.emotionsData)
|
52
|
+
.call(columnChart(graphParameters.startDate, graphParameters.endDate, Y_MIN, Y_MAX, GRAPH_TITLE, YLABEL)
|
53
|
+
.width(graphParameters.graphWidth)
|
54
|
+
.height(PIXEL_HEIGHT)
|
55
|
+
.drawLegend(LEGEND_DIV_ID, LEGEND, [NOTES]));
|
56
|
+
}
|
57
|
+
|
58
|
+
clearContainers();
|
59
|
+
drawMoodViz(graphParameters);
|
60
|
+
drawEmotionViz(graphParameters);
|
61
|
+
return appendDateRange(graphParameters);
|
62
|
+
};
|
63
|
+
})();
|
data/app/models/activity.rb
CHANGED
@@ -355,8 +355,7 @@ class Activity < ActiveRecord::Base
|
|
355
355
|
end
|
356
356
|
|
357
357
|
def set_end_time
|
358
|
-
unless
|
359
|
-
|
360
|
-
end
|
358
|
+
return unless end_time.nil? && start_time.present?
|
359
|
+
self.end_time = start_time + 1.hour
|
361
360
|
end
|
362
|
-
end
|
361
|
+
end
|
@@ -32,7 +32,7 @@ class DeliveredMessage < ActiveRecord::Base
|
|
32
32
|
if recipient.instance_of? User
|
33
33
|
ThinkFeelDoEngine::MessageNotifications
|
34
34
|
.new_for_coach(recipient, sender.active_group)
|
35
|
-
.
|
35
|
+
.deliver_now
|
36
36
|
elsif recipient.notify_by_sms?
|
37
37
|
MessageSmsNotification
|
38
38
|
.new(
|
@@ -42,7 +42,7 @@ class DeliveredMessage < ActiveRecord::Base
|
|
42
42
|
else
|
43
43
|
ThinkFeelDoEngine::MessageNotifications
|
44
44
|
.new_for_participant(recipient)
|
45
|
-
.
|
45
|
+
.deliver_now
|
46
46
|
end
|
47
47
|
rescue => exception
|
48
48
|
::Raven.capture_message(exception)
|
data/app/models/group.rb
CHANGED
@@ -42,8 +42,10 @@ class Group < ActiveRecord::Base
|
|
42
42
|
membership
|
43
43
|
.participant
|
44
44
|
.thoughts
|
45
|
-
.where(thoughts[:created_at]
|
46
|
-
|
45
|
+
.where(thoughts[:created_at]
|
46
|
+
.gteq(membership.week_start_day(week_number)))
|
47
|
+
.where(thoughts[:created_at]
|
48
|
+
.lt(membership.week_end_day(week_number)))
|
47
49
|
end.map(&:count).sum
|
48
50
|
end
|
49
51
|
|
@@ -55,8 +57,8 @@ class Group < ActiveRecord::Base
|
|
55
57
|
.participant
|
56
58
|
.activities
|
57
59
|
.in_the_past
|
58
|
-
.where(activities[:
|
59
|
-
|
60
|
+
.where(activities[:start_time]
|
61
|
+
.gteq(membership.week_start_day(week_number)))
|
60
62
|
end.map(&:count).sum
|
61
63
|
end
|
62
64
|
|
@@ -68,8 +70,8 @@ class Group < ActiveRecord::Base
|
|
68
70
|
.participant
|
69
71
|
.activities
|
70
72
|
.unscheduled_or_in_the_future
|
71
|
-
.where(activities[:
|
72
|
-
|
73
|
+
.where(activities[:start_time]
|
74
|
+
.lt(membership.week_end_day(week_number)))
|
73
75
|
end.map(&:count).sum
|
74
76
|
end
|
75
77
|
|
@@ -80,9 +82,9 @@ class Group < ActiveRecord::Base
|
|
80
82
|
SocialNetworking::Goal
|
81
83
|
.where(participant: membership.participant)
|
82
84
|
.where(social_networking_goals[:created_at]
|
83
|
-
.gteq(week_start_day(week_number)))
|
85
|
+
.gteq(membership.week_start_day(week_number)))
|
84
86
|
.where(social_networking_goals[:created_at]
|
85
|
-
.lt(week_end_day(week_number)))
|
87
|
+
.lt(membership.week_end_day(week_number)))
|
86
88
|
end.map(&:count).sum
|
87
89
|
end
|
88
90
|
|
@@ -93,9 +95,9 @@ class Group < ActiveRecord::Base
|
|
93
95
|
SocialNetworking::Comment
|
94
96
|
.where(participant: membership.participant)
|
95
97
|
.where(social_networking_comments[:created_at]
|
96
|
-
.gteq(week_start_day(week_number)))
|
98
|
+
.gteq(membership.week_start_day(week_number)))
|
97
99
|
.where(social_networking_comments[:created_at]
|
98
|
-
.lt(week_end_day(week_number)))
|
100
|
+
.lt(membership.week_end_day(week_number)))
|
99
101
|
end.map(&:count).sum
|
100
102
|
end
|
101
103
|
|
@@ -107,9 +109,9 @@ class Group < ActiveRecord::Base
|
|
107
109
|
SocialNetworking::OnTheMindStatement
|
108
110
|
.where(participant: membership.participant)
|
109
111
|
.where(social_networking_on_the_mind_statements[:created_at]
|
110
|
-
.gteq(week_start_day(week_number)))
|
112
|
+
.gteq(membership.week_start_day(week_number)))
|
111
113
|
.where(social_networking_on_the_mind_statements[:created_at]
|
112
|
-
.lt(week_end_day(week_number)))
|
114
|
+
.lt(membership.week_end_day(week_number)))
|
113
115
|
end.map(&:count).sum
|
114
116
|
end
|
115
117
|
|
@@ -121,24 +123,9 @@ class Group < ActiveRecord::Base
|
|
121
123
|
SocialNetworking::Like
|
122
124
|
.where(participant: membership.participant)
|
123
125
|
.where(social_networking_likes[:created_at]
|
124
|
-
.gteq(week_start_day(week_number)))
|
126
|
+
.gteq(membership.week_start_day(week_number)))
|
125
127
|
.where(social_networking_likes[:created_at]
|
126
|
-
.lt(week_end_day(week_number)))
|
128
|
+
.lt(membership.week_end_day(week_number)))
|
127
129
|
end.map(&:count).sum
|
128
130
|
end
|
129
|
-
|
130
|
-
private
|
131
|
-
|
132
|
-
# Returns the earliest start date of all the group's memberships
|
133
|
-
def start_date
|
134
|
-
memberships.order(start_date: :asc).first.start_date
|
135
|
-
end
|
136
|
-
|
137
|
-
def week_start_day(week_number)
|
138
|
-
start_date + ((week_number - 1) * 7).days
|
139
|
-
end
|
140
|
-
|
141
|
-
def week_end_day(week_number)
|
142
|
-
start_date + (week_number * 7).days
|
143
|
-
end
|
144
131
|
end
|
data/app/models/membership.rb
CHANGED
@@ -154,6 +154,14 @@ class Membership < ActiveRecord::Base
|
|
154
154
|
update_columns(end_date: Date.current - 1.day, is_complete: true)
|
155
155
|
end
|
156
156
|
|
157
|
+
def week_start_day(week_number)
|
158
|
+
start_date_with_zone + ((week_number - 1) * 7).days
|
159
|
+
end
|
160
|
+
|
161
|
+
def week_end_day(week_number)
|
162
|
+
start_date_with_zone + (week_number * 7).days
|
163
|
+
end
|
164
|
+
|
157
165
|
private
|
158
166
|
|
159
167
|
def create_task_statuses
|
@@ -183,17 +191,13 @@ class Membership < ActiveRecord::Base
|
|
183
191
|
errors.add :is_complete, "cannot be set to true for end dates in the future"
|
184
192
|
end
|
185
193
|
|
186
|
-
def week_start_day(week_number)
|
187
|
-
start_date + ((week_number - 1) * 7).days
|
188
|
-
end
|
189
|
-
|
190
|
-
def week_end_day(week_number)
|
191
|
-
start_date + (week_number * 7).days
|
192
|
-
end
|
193
|
-
|
194
194
|
def not_ending_in_the_past
|
195
195
|
return unless end_date && end_date_changed? && end_date < Date.current
|
196
196
|
|
197
197
|
errors.add :end_date, "must not be in the past"
|
198
198
|
end
|
199
|
+
|
200
|
+
def start_date_with_zone
|
201
|
+
start_date.to_time
|
202
|
+
end
|
199
203
|
end
|
data/app/models/participant.rb
CHANGED
@@ -319,7 +319,7 @@ class Participant < ActiveRecord::Base
|
|
319
319
|
|
320
320
|
def mood_rating_daily_averages
|
321
321
|
averaged_ratings = []
|
322
|
-
daily_ratings = moods.group_by
|
322
|
+
daily_ratings = moods.group_by(&:created_at)
|
323
323
|
# rubocop:disable all
|
324
324
|
daily_ratings.each do |day, moods_array|
|
325
325
|
# rubocop:enable all
|
@@ -31,45 +31,7 @@
|
|
31
31
|
var activationDate = activation("<%= current_participant.created_at %>")
|
32
32
|
|
33
33
|
var graphParameters = new Graph(<%= sanitize(mood_ratings.to_json) %>, <%= sanitize(emotional_ratings.to_json) %>, null, $("#viz-container"));
|
34
|
-
var yLabel = "Intensity"
|
35
34
|
|
36
|
-
sc.
|
37
|
-
var emotionGraphTitle,
|
38
|
-
emotionLegendJSON,
|
39
|
-
emotionLegendNotes,
|
40
|
-
moodGraphTitle,
|
41
|
-
moodLegendJSON,
|
42
|
-
moodLegendNotes;
|
43
|
-
|
44
|
-
$("div#mood, div#mood-legend, div#emotions, div#emotion-legend").empty();
|
45
|
-
|
46
|
-
// mood viz
|
47
|
-
moodGraphTitle = "Mood*";
|
48
|
-
moodLegendJSON = [["Mood", "#4682B4"], ["Daily Average", "green"]];
|
49
|
-
moodLegendNotes = ["*Click each day for more information."];
|
50
|
-
d3.select("#mood")
|
51
|
-
.datum(graphParameters.moodData)
|
52
|
-
.call(columnChart(graphParameters.startDate, graphParameters.endDate, 0, 10, moodGraphTitle, "mood")
|
53
|
-
.width(graphParameters.graphWidth)
|
54
|
-
.height(300)
|
55
|
-
.x(function(d, i) { return moment(new Date(d.day)).startOf("day")._d; })
|
56
|
-
.y(function(d, i) { return d.intensity; })
|
57
|
-
.drawLegend("#mood-legend", moodLegendJSON, moodLegendNotes));
|
58
|
-
|
59
|
-
// emotion viz
|
60
|
-
emotionGraphTitle = "Positive and Negative Emotions*";
|
61
|
-
emotionLegendJSON = [["Positive", "#4682B4"], ["Negative", "#A52A2A"], ["Daily Average", "green"]];
|
62
|
-
emotionLegendNotes = ["*Click each day for more information."];
|
63
|
-
d3.select("#emotions")
|
64
|
-
.datum(graphParameters.emotionsData)
|
65
|
-
.call(columnChart(graphParameters.startDate, graphParameters.endDate, -10, 10, emotionGraphTitle, yLabel)
|
66
|
-
.width(graphParameters.graphWidth)
|
67
|
-
.height(400)
|
68
|
-
.drawLegend("#emotion-legend", emotionLegendJSON, emotionLegendNotes));
|
69
|
-
|
70
|
-
return appendDateRange(graphParameters);
|
71
|
-
};
|
72
|
-
|
73
|
-
sc.drawGraphs();
|
35
|
+
sc.drawMoodEmotionGraphs(graphParameters);
|
74
36
|
sc.filterEmotionMoodViz(graphParameters);
|
75
37
|
</script>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: think_feel_do_engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.12.
|
4
|
+
version: 3.12.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Carty-Fickes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -268,14 +268,14 @@ dependencies:
|
|
268
268
|
requirements:
|
269
269
|
- - "~>"
|
270
270
|
- !ruby/object:Gem::Version
|
271
|
-
version: '1.
|
271
|
+
version: '1.8'
|
272
272
|
type: :development
|
273
273
|
prerelease: false
|
274
274
|
version_requirements: !ruby/object:Gem::Requirement
|
275
275
|
requirements:
|
276
276
|
- - "~>"
|
277
277
|
- !ruby/object:Gem::Version
|
278
|
-
version: '1.
|
278
|
+
version: '1.8'
|
279
279
|
- !ruby/object:Gem::Dependency
|
280
280
|
name: database_cleaner
|
281
281
|
requirement: !ruby/object:Gem::Requirement
|
@@ -349,6 +349,7 @@ files:
|
|
349
349
|
- app/assets/javascripts/think_feel_do_engine/event_capture/init.js
|
350
350
|
- app/assets/javascripts/think_feel_do_engine/feel/emotion_mood_viz.js
|
351
351
|
- app/assets/javascripts/think_feel_do_engine/feel/emotions.js
|
352
|
+
- app/assets/javascripts/think_feel_do_engine/feel/mood.js
|
352
353
|
- app/assets/javascripts/think_feel_do_engine/feel/timeago.js
|
353
354
|
- app/assets/javascripts/think_feel_do_engine/forms/multi_page.js.erb
|
354
355
|
- app/assets/javascripts/think_feel_do_engine/forms/multi_page_thought.js.erb
|