mooc-data-parser 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 23122ed3f4e7051ac6a952ff2adf73eb2baf8272
4
- data.tar.gz: 770b789ec3c408141a70f28f7aaaafcb496f0997
3
+ metadata.gz: b10527539a617caf47b8b4e10a441fa82473d6cb
4
+ data.tar.gz: 4ea29ecdefc4f79259d488e0ad49af5964a8eedf
5
5
  SHA512:
6
- metadata.gz: 92d0ed65d8546d19fe4158a75103675700e99b7e7655fb4b0183b275a11e06fc198f1b40efddf3d0982e60593a677b196d9e1e600202f1069c14a3249cf98665
7
- data.tar.gz: 82c2cf673b4aa5ec4462e1d86eb4b918372ad3dbe8a9bae078b8a025b16f81ac09ceb2e7415829eff493a1367120e98c5b33b248cb9d78e64a44f84dcdc990f5
6
+ metadata.gz: f5b3ab28a7cc01efb5b2e6330c56a856babaf4f904ffa058f6b0cd9f55676919e165b458193c92ddfdeb95cf2c8d60b83629660e2158435bdd5f866e97248b50
7
+ data.tar.gz: 828f9ab0f05d60202b576f2c559ff01b0e826fc8cc0e8b20e017c30ebe3e418cca19d2450dc4a8c8cc20e8eb2944c144a3f49a38b68acfe2f6674c431b9d75ac
data/Readme.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Mooc Data Parser
2
2
 
3
+ [![CodeClimate](https://codeclimate.com/github/jamox/mooc-data-parser.png)](https://codeclimate.com/github/jamox/mooc-data-parser)
4
+
3
5
  ## Installation
4
6
 
5
7
  Or install it yourself as:
@@ -10,7 +12,7 @@ Scripts made to process some data for our Massive Open Online Courses.
10
12
  ## Usage
11
13
 
12
14
  ```bash
13
- Usage: show-mooc-details.rb [options]
15
+ Usage: show-mooc-details [options]
14
16
  -f, --force Reload data from server
15
17
  -u, --user username Show details for user
16
18
  -m, --missing-points Show missing compulsary points
@@ -30,33 +32,33 @@ To get fresh data, use `-f` command line parameter.
30
32
 
31
33
  Show basic info for applicants
32
34
  ```bash
33
- ./show-mooc-data.rb -l
35
+ mooc-data-parser -l
34
36
  ```
35
37
 
36
38
  Show basic info for applicants and percents for each week
37
39
  ```bash
38
- ./show-mooc-data.rb -l -c
40
+ mooc-data-parser -l -c
39
41
  ```
40
42
 
41
43
  Show basic info for applicants and missing points
42
44
  ```bash
43
- ./show-mooc-data.rb -l -m
45
+ mooc-data-parser -l -m
44
46
  ```
45
47
 
46
48
  Show basic info for applicants and percents for each week and missing points
47
49
  ```bash
48
- ./show-mooc-data.rb -l -c -m
50
+ mooc-data-parser -l -c -m
49
51
  ```
50
52
 
51
53
  Find info about a user
52
54
  * by email:
53
55
  ```bash
54
- ./show-mooc-data.rb -e <email>
56
+ mooc-data-parser -e <email>
55
57
  ```
56
58
 
57
59
  * by username:
58
60
  ```bash
59
- ./show-mooc-data.rb -u <username>
61
+ mooc-data-parser -u <username>
60
62
  ```
61
63
 
62
64
  Flags `-c` and `-l` can be used with these too.
@@ -1,11 +1,9 @@
1
- require "mooc_data_parser/app"
2
1
  require "mooc_data_parser/dummy_cacher"
2
+ require "mooc_data_parser/app"
3
+ require "mooc_data_parser/auth_coordinator"
4
+ require "mooc_data_parser/options_parser_logic"
5
+ require "mooc_data_parser/data_downloader"
3
6
  require "mooc_data_parser/version"
4
7
  module MoocDataParser
5
- require 'optparse'
6
- require 'ostruct'
7
- require 'httparty'
8
- require 'json'
9
- require 'io/console'
10
8
  end
11
9
 
@@ -0,0 +1,220 @@
1
+ module MoocDataParser
2
+ require 'json'
3
+ class App
4
+
5
+ def run(args)
6
+ init_variables()
7
+ parse_options(args)
8
+ decide_what_to_do(maybe_fetch_json())
9
+ $cache.write_file_to_cache('data.json', @notes.to_json)
10
+ end
11
+
12
+ def decide_what_to_do(json)
13
+ if @options.user
14
+ show_info_about(@options.user, 'username', json)
15
+ elsif @options.user_email
16
+ show_info_about(@options.user_email, 'email', json)
17
+ elsif @options.user_tmc_username
18
+ show_info_about(@options.user_tmc_username, 'username', json)
19
+ elsif @options.list
20
+ list_and_filter_participants(json)
21
+ else
22
+ $cache.write_file_to_cache('data.json', @notes.to_json)
23
+ puts @opt
24
+ abort
25
+ end
26
+ end
27
+
28
+ def init_variables
29
+ $cache ||= MoocDataParser::DummyCacher.new
30
+ @notes = begin JSON.parse($cache.read_file_from_cache('data.json')) rescue {} end
31
+ end
32
+
33
+ def parse_options(args)
34
+ @options, @opt = MoocDataParser::OptionsParserLogic.new(args).parse
35
+ end
36
+
37
+ def maybe_fetch_json()
38
+ if @options.reload or @notes['user_info'].nil? or @notes['week_data'].nil?
39
+ download_data()
40
+ else
41
+ {participants: @notes['user_info'].clone, week_data: @notes['week_data'].clone}
42
+ end
43
+ end
44
+
45
+ def download_data
46
+ MoocDataParser::DataDownloader.new(@notes).download!
47
+ end
48
+
49
+ def show_info_about(user, user_field = 'username', json)
50
+ participants = json[:participants]
51
+ week_data = json[:week_data]
52
+ my_user = participants.find{|a| a[user_field] == user }
53
+
54
+ abort "User not found" if my_user.nil?
55
+
56
+ show_user_print_basic_info(my_user)
57
+ show_user_print_completion_percentage(my_user, week_data, participants) if @options.show_completion_percentige
58
+ show_user_print_missing_points(my_user, week_data) if @options.show_missing_compulsory_points
59
+ end
60
+
61
+ def show_user_print_basic_info(my_user)
62
+ formatted_print_user_details ["Username", my_user['username']]
63
+ formatted_print_user_details ["Email", my_user['email']]
64
+ formatted_print_user_details ["Hakee yliopistoon", my_user['hakee_yliopistoon_2014']]
65
+ formatted_print_user_details ["Koko nimi", my_user['koko_nimi']]
66
+ end
67
+
68
+ def show_user_print_missing_points(my_user, week_data)
69
+ formatted_print_user_details ["Compulsory points"]
70
+ get_points_info_for_user(my_user, week_data).each do |k,v|
71
+ formatted_print_user_details [k, v.join(", ")]
72
+ end
73
+ end
74
+
75
+ def show_user_print_completion_percentage(my_user, week_data, participants)
76
+ formatted_print_user_details ["Points per week"]
77
+ done_exercise_percents(my_user, participants).each do |k|
78
+ begin
79
+ k = k.first
80
+ formatted_print_user_details [k[0], k[1]]
81
+ rescue
82
+ nil
83
+ end
84
+ end
85
+ end
86
+
87
+ def formatted_print_user_details(details)
88
+ case details.size
89
+ when 1
90
+ puts "%18s" % details
91
+ when 2
92
+ puts "%18s: %-20s" % details
93
+ end
94
+ end
95
+
96
+
97
+ def wanted_fields
98
+ %w(username email koko_nimi)
99
+ end
100
+
101
+ def list_and_filter_participants(json)
102
+ participants = json[:participants]
103
+ week_data = json[:week_data]
104
+ everyone_in_course = participants.size
105
+ only_applying!(participants)
106
+ hakee_yliopistoon = participants.size
107
+
108
+ print_headers()
109
+ process_participants(participants, week_data)
110
+ print_list_stats(everyone_in_course, hakee_yliopistoon)
111
+ end
112
+
113
+ def print_headers
114
+ puts "%-20s %-35s %-25s %-120s" % ["Username", "Email", "Real name", "Missing points"]
115
+ puts '-'*200
116
+ end
117
+
118
+ def print_list_stats(everyone_in_course, hakee_yliopistoon)
119
+ puts "\n"
120
+ puts "Stats: "
121
+ puts "%25s: %4d" % ["Kaikenkaikkiaan kurssilla", everyone_in_course]
122
+ puts "%25s: %4d" % ["Hakee yliopistoon", hakee_yliopistoon]
123
+ end
124
+
125
+ def process_participants(participants, week_data)
126
+ participants.each do |participant|
127
+ nice_string_in_array = wanted_fields.map do |key|
128
+ participant[key]
129
+ end
130
+
131
+ to_be_printed = "%-20s %-35s %-25s "
132
+
133
+ maybe_add_extra_fields(nice_string_in_array, to_be_printed, participants, participant, week_data)
134
+
135
+ puts to_be_printed % nice_string_in_array
136
+ end
137
+ end
138
+
139
+ def maybe_add_extra_fields(nice_string_in_array, to_be_printed, participants, participant, week_data)
140
+ if @options.show_completion_percentige
141
+ nice_string_in_array << format_done_exercises_percents(done_exercise_percents(participant, participants))
142
+ to_be_printed << "%-180s "
143
+ end
144
+ if @options.show_missing_compulsory_points
145
+ nice_string_in_array << missing_points_to_list_string(get_points_info_for_user(participant, week_data))
146
+ to_be_printed << "%-120s"
147
+ end
148
+ end
149
+
150
+ def format_done_exercises_percents(hash)
151
+ hash.map do |k|
152
+ begin
153
+ k = k.first
154
+ "#{k[0].scan(/\d+/).first}: #{k[1]}"
155
+ rescue
156
+ nil
157
+ end
158
+ end.compact.join(", ")
159
+ end
160
+
161
+ def done_exercise_percents(participant, participants_data)
162
+ user_info = participants_data.find{ |p| p['username'] == participant['username'] }
163
+ map_week_keys(user_info)
164
+ end
165
+
166
+ def week_keys
167
+ (1..12).map{|i| "viikko#{i}"}
168
+ end
169
+
170
+ def map_week_keys(user_info)
171
+ exercise_weeks = user_info['groups']
172
+ week_keys.map do |week|
173
+ details = exercise_weeks[week]
174
+ unless details.nil?
175
+ {week => ("%3.1f%" % [(details['points'].to_f / details['total'].to_f) * 100])}
176
+ end
177
+ end
178
+ end
179
+
180
+ def missing_points_to_list_string(missing_by_week)
181
+ str = ""
182
+ missing_by_week.keys.each do |week|
183
+ missing = missing_by_week[week]
184
+ unless missing.nil? or missing.length == 0
185
+ str << week
186
+ str << ": "
187
+ str << missing.join(",")
188
+ str << " "
189
+ end
190
+ end
191
+
192
+ str
193
+ end
194
+
195
+ def compulsory_exercises
196
+ # TODO: täydennä data viikolle 12
197
+ {'6' => %w(102.1 102.2 102.3 103.1 103.2 103.3), '7' => %w(116.1 116.2 116.3), '8' => %w(124.1 124.2 124.3 124.4),
198
+ '9' => %w(134.1 134.2 134.3 134.4 134.5), '10' => %w(141.1 141.2 141.3 141.4), '11' => %w(151.1 151.2 151.3 151.4), '12' => %w()}
199
+ end
200
+
201
+ def get_points_info_for_user(participant, week_data)
202
+ points_by_week = week_data.keys.each_with_object({}) do |week, points_by_week|
203
+ points_by_week[week] = week_data[week][participant['username']]
204
+ end
205
+
206
+ points_by_week.keys.each_with_object({}) do |week, missing_by_week|
207
+ weeks_points = points_by_week[week] || [] #palauttaa arrayn
208
+ weeks_compulsory_points = compulsory_exercises[week] || []
209
+ missing_by_week[week] = weeks_compulsory_points - weeks_points
210
+ end
211
+ end
212
+
213
+ def only_applying!(participants)
214
+ participants.select! do |participant|
215
+ participant['hakee_yliopistoon_2014']
216
+ end
217
+ end
218
+
219
+ end
220
+ end
@@ -0,0 +1,15 @@
1
+ module MoocDataParser
2
+ require 'io/console'
3
+ class AuthCoordinator
4
+
5
+ def auth
6
+ print 'username: '
7
+ username = $stdin.gets.strip
8
+ print 'password: '
9
+ password = $stdin.noecho(&:gets).strip
10
+ puts
11
+ {username: username, password: password}
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,49 @@
1
+
2
+ module MoocDataParser
3
+ require 'httparty'
4
+ require 'json'
5
+ class DataDownloader
6
+
7
+ def initialize(notes)
8
+ @notes = notes
9
+ end
10
+
11
+ def download!
12
+ auth = get_auth()
13
+ thread = get_process_thread()
14
+ url = "http://tmc.mooc.fi/mooc/participants.json?api_version=7&utf8=%E2%9C%93&filter_koko_nimi=&column_username=1&column_email=1&column_koko_nimi=1&column_hakee_yliopistoon_2014=1&group_completion_course_id=18"
15
+ user_info = JSON.parse(HTTParty.get(url, basic_auth: auth).body)['participants']
16
+ week_data = fetch_week_datas(auth)
17
+ @notes['user_info'] = user_info.clone
18
+ @notes['week_data'] = week_data.clone
19
+ thread.kill
20
+ puts
21
+ {participants: user_info, week_data: week_data}
22
+ end
23
+
24
+ def get_auth
25
+ AuthCoordinator.new.auth
26
+ end
27
+
28
+ def get_process_thread
29
+ t = -> do
30
+ loop do
31
+ print '.'
32
+ sleep 0.5
33
+ end
34
+ end
35
+ Thread.new(&t)
36
+ end
37
+
38
+ def fetch_week_datas(auth)
39
+ base_url = "http://tmc.mooc.fi/mooc/courses/18/points/"
40
+ weeks = %w(1 2 3 4 5 6 7 8 9 10 11 12)
41
+ rest = ".json?api_version=7"
42
+ week_data = {}
43
+ weeks.each do |week|
44
+ week_data[week] = JSON.parse(HTTParty.get(base_url + week + rest, basic_auth: auth).body)['users_to_points']
45
+ end
46
+ week_data
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,45 @@
1
+ module MoocDataParser
2
+ require 'optparse'
3
+ require 'ostruct'
4
+ class OptionsParserLogic
5
+
6
+ def initialize(args)
7
+ @args = args
8
+ end
9
+
10
+ def parse
11
+ options = OpenStruct.new
12
+ opt = OptionParser.new do |opts|
13
+ opts.banner = "Usage: show-mooc-details.rb [options]"
14
+
15
+ opts.on("-f", "--force", "Reload data from server") do |v|
16
+ options.reload = true
17
+ end
18
+ opts.on("-u", "--user username", "Show details for user") do |v|
19
+ options.user = v
20
+ end
21
+ opts.on("-m", "--missing-points", "Show missing compulsary points") do |v|
22
+ options.show_missing_compulsory_points = true
23
+ end
24
+ opts.on("-c", "--completion-precentige", "Show completition percentige") do |v|
25
+ options.show_completion_percentige = true
26
+ end
27
+ opts.on("-e", "--email emailaddress", "Show details for user") do |v|
28
+ options.user_email = v
29
+ end
30
+ opts.on("-t", "--tmc-account tmc-account", "Show details for user") do |v|
31
+ options.user_tmc_username = v
32
+ end
33
+ opts.on("-l", "--list", "Show the basic list") do |v|
34
+ options.list = true
35
+ end
36
+ opts.on_tail("-h", "--help", "Show this message") do
37
+ puts opts
38
+ exit
39
+ end
40
+ end
41
+ opt.parse!(@args)
42
+ [options, opt]
43
+ end
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module MoocDataParser
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mooc-data-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarmo Isotalo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-15 00:00:00.000000000 Z
11
+ date: 2014-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -67,8 +67,11 @@ files:
67
67
  - Readme.md
68
68
  - bin/mooc-data-parser
69
69
  - lib/mooc_data_parser.rb
70
- - lib/mooc_data_parser/App.rb
70
+ - lib/mooc_data_parser/app.rb
71
+ - lib/mooc_data_parser/auth_coordinator.rb
72
+ - lib/mooc_data_parser/data_downloader.rb
71
73
  - lib/mooc_data_parser/dummy_cacher.rb
74
+ - lib/mooc_data_parser/options_parser_logic.rb
72
75
  - lib/mooc_data_parser/version.rb
73
76
  - mooc-data-parser.gemspec
74
77
  homepage: https://github.com/jamox/mooc-data-parser
@@ -1,257 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- module MoocDataParser
3
- require 'optparse'
4
- require 'ostruct'
5
- require 'httparty'
6
- require 'json'
7
- require 'io/console'
8
- class App
9
- def run(args)
10
- $cache ||= MoocDataParser::DummyCacher.new
11
- @notes = begin JSON.parse($cache.read_file_from_cache('data.json')) rescue {} end
12
-
13
- @options = OpenStruct.new
14
- opt = OptionParser.new do |opts|
15
- opts.banner = "Usage: show-mooc-details.rb [options]"
16
-
17
- opts.on("-f", "--force", "Reload data from server") do |v|
18
- @options.reload = true
19
- end
20
- opts.on("-u", "--user username", "Show details for user") do |v|
21
- @options.user = v
22
- end
23
- opts.on("-m", "--missing-points", "Show missing compulsary points") do |v|
24
- @options.show_missing_compulsory_points = true
25
- end
26
- opts.on("-c", "--completion-precentige", "Show completition percentige") do |v|
27
- @options.show_completion_percentige = true
28
- end
29
- opts.on("-e", "--email emailaddress", "Show details for user") do |v|
30
- @options.user_email = v
31
- end
32
- opts.on("-t", "--tmc-account tmc-account", "Show details for user") do |v|
33
- @options.user_tmc_username = v
34
- end
35
- opts.on("-l", "--list", "Show the basic list") do |v|
36
- @options.list = true
37
- end
38
- opts.on_tail("-h", "--help", "Show this message") do
39
- puts opts
40
- exit
41
- end
42
- end
43
- opt.parse!(args)
44
-
45
- json = maybe_fetch_json()
46
- if @options.user
47
- show_info_about(@options.user, 'username', json)
48
- elsif @options.user_email
49
- show_info_about(@options.user_email, 'email', json)
50
- elsif @options.user_tmc_username
51
- show_info_about(@options.user_tmc_username, 'username', json)
52
- elsif @options.list
53
- list_and_filter_participants(json)
54
- else
55
- $cache.write_file_to_cache('data.json', @notes.to_json)
56
- puts opt
57
- abort
58
- end
59
- $cache.write_file_to_cache('data.json', @notes.to_json)
60
- end
61
-
62
- def get_auth
63
- print 'username: '
64
- username = $stdin.gets.strip
65
- print 'password: '
66
- password = $stdin.noecho(&:gets).strip
67
- puts
68
- {username: username, password: password}
69
- end
70
-
71
- def maybe_fetch_json()
72
- if @options.reload or @notes['user_info'].nil? or @notes['week_data'].nil?
73
-
74
- t = -> do
75
- loop do
76
- print '.'
77
- sleep 0.5
78
- end
79
- puts
80
- end
81
-
82
- auth = get_auth()
83
- th = Thread.new(&t)
84
-
85
- url = "http://tmc.mooc.fi/mooc/participants.json?api_version=7&utf8=%E2%9C%93&filter_koko_nimi=&column_username=1&column_email=1&column_koko_nimi=1&column_hakee_yliopistoon_2014=1&group_completion_course_id=18"
86
- user_info = JSON.parse(HTTParty.get(url, basic_auth: auth).body)['participants']
87
- week_data = fetch_week_datas(auth)
88
- @notes['user_info'] = user_info.clone
89
- @notes['week_data'] = week_data.clone
90
- th.kill
91
- puts
92
- {participants: user_info, week_data: week_data}
93
- else
94
- {participants: @notes['user_info'].clone, week_data: @notes['week_data'].clone}
95
- end
96
- end
97
-
98
- def show_info_about(user, user_field = 'username', json)
99
- participants = json[:participants]
100
- week_data = json[:week_data]
101
- my_user = participants.find{|a| a[user_field] == user }
102
- if my_user.nil?
103
- abort "User not found"
104
- end
105
- formatted_print_user_details ["Username", my_user['username']]
106
- formatted_print_user_details ["Email", my_user['email']]
107
- formatted_print_user_details ["Hakee yliopistoon", my_user['hakee_yliopistoon_2014']]
108
- formatted_print_user_details ["Koko nimi", my_user['koko_nimi']]
109
-
110
- if @options.show_completion_percentige
111
- formatted_print_user_details ["Points per week"]
112
- done_exercise_percents(my_user, participants).each do |k|
113
- begin
114
- k = k.first
115
- formatted_print_user_details [k[0], k[1]]
116
- rescue
117
- nil
118
- end
119
- end
120
- end
121
-
122
- if @options.show_missing_compulsory_points
123
- formatted_print_user_details ["Compulsory points"]
124
- get_points_info_for_user(my_user, week_data).each do |k,v|
125
- formatted_print_user_details [k, v.join(", ")]
126
- end
127
- end
128
-
129
- end
130
-
131
- def formatted_print_user_details(details)
132
- case details.size
133
- when 1
134
- puts "%18s" % details
135
- when 2
136
- puts "%18s: %-20s" % details
137
- end
138
- end
139
-
140
- def fetch_week_datas(auth)
141
- base_url = "http://tmc.mooc.fi/mooc/courses/18/points/"
142
- weeks = %w(1 2 3 4 5 6 7 8 9 10 11 12)
143
- rest = ".json?api_version=7"
144
- week_data = {}
145
- weeks.each do |week|
146
- week_data[week] = JSON.parse(HTTParty.get(base_url + week + rest, basic_auth: auth).body)['users_to_points']
147
- end
148
- week_data
149
- end
150
-
151
- def list_and_filter_participants(json)
152
- wanted_fields = %W(username email koko_nimi)
153
-
154
- participants = json[:participants]
155
- week_data = json[:week_data]
156
- everyone_in_course = participants.size
157
- only_applying!(participants)
158
- hakee_yliopistoon = participants.size
159
-
160
- puts "%-20s %-35s %-25s %-120s" % ["Username", "Email", "Real name", "Missing points"]
161
- puts '-'*200
162
- participants.each do |participant|
163
- nice_string_in_array = wanted_fields.map do |key|
164
- participant[key]
165
- end
166
- if @options.show_completion_percentige
167
- nice_string_in_array << format_done_exercises_percents(done_exercise_percents(participant, participants))
168
- end
169
- if @options.show_missing_compulsory_points
170
- nice_string_in_array << missing_points_to_list_string(get_points_info_for_user(participant, week_data))
171
- end
172
-
173
-
174
- to_be_printed = "%-20s %-35s %-25s "
175
- to_be_printed << "%-180s " if @options.show_completion_percentige
176
- to_be_printed << "%-120s" if @options.show_missing_compulsory_points
177
-
178
- puts to_be_printed % nice_string_in_array
179
- end
180
-
181
- puts
182
- puts
183
- puts "Stats: "
184
- puts "%25s: %4d" % ["Kaikenkaikkiaan kurssilla", everyone_in_course]
185
- puts "%25s: %4d" % ["Hakee yliopistoon", hakee_yliopistoon]
186
-
187
- end
188
-
189
-
190
- def format_done_exercises_percents(hash)
191
- hash.map do |k|
192
- begin
193
- k = k.first
194
- "#{k[0].scan(/\d+/).first}: #{k[1]}"
195
- rescue
196
- nil
197
- end
198
- end.compact.join(", ")
199
- end
200
-
201
-
202
- def done_exercise_percents(participant, participants_data)
203
- user_info = participants_data.find{ |p| p['username'] == participant['username'] }
204
- exercise_weeks = user_info['groups']
205
- week_keys = (1..12).map{|i| "viikko#{i}"}
206
-
207
- week_keys.map do |week|
208
- details = exercise_weeks[week]
209
- unless details.nil?
210
- {week => ("%3.1f%" % [(details['points'].to_f / details['total'].to_f) * 100])}
211
- end
212
- end
213
- end
214
-
215
- def missing_points_to_list_string(missing_by_week)
216
- str = ""
217
- missing_by_week.keys.each do |week|
218
- missing = missing_by_week[week]
219
- unless missing.nil? or missing.length == 0
220
- str << week
221
- str << ": "
222
- str << missing.join(",")
223
- str << " "
224
- end
225
- end
226
-
227
- str
228
-
229
- end
230
-
231
- def get_points_info_for_user(participant, week_data)
232
- # TODO: täydennä data viikolle 12
233
- compulsory_exercises = {'6' => %w(102.1 102.2 102.3 103.1 103.2 103.3), '7' => %w(116.1 116.2 116.3), '8' => %w(124.1 124.2 124.3 124.4),
234
- '9' => %w(134.1 134.2 134.3 134.4 134.5), '10' => %w(141.1 141.2 141.3 141.4), '11' => %w(151.1 151.2 151.3 151.4), '12' => %w()}
235
- points_by_week = {}
236
- week_data.keys.each do |week|
237
- points_by_week[week] = week_data[week][participant['username']]
238
- end
239
-
240
-
241
- missing_by_week = {}
242
- points_by_week.keys.each do |week|
243
- weeks_points = points_by_week[week] || [] #palauttaa arrayn
244
- weeks_compulsory_points = compulsory_exercises[week] || []
245
- missing_by_week[week] = weeks_compulsory_points - weeks_points
246
- end
247
-
248
- missing_by_week
249
- end
250
-
251
- def only_applying!(participants)
252
- participants.select! do |participant|
253
- participant['hakee_yliopistoon_2014']
254
- end
255
- end
256
- end
257
- end