mooc-data-parser 0.0.1 → 0.0.3

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: ef30888b18e521abbe650bbb3f66655a28ac5058
4
- data.tar.gz: 237e3ebef04827ac78c9e6566b0cdedaaf335541
3
+ metadata.gz: 23122ed3f4e7051ac6a952ff2adf73eb2baf8272
4
+ data.tar.gz: 770b789ec3c408141a70f28f7aaaafcb496f0997
5
5
  SHA512:
6
- metadata.gz: be54dfa5face8632270d842f5bd6e8510be40fa3209b53816347d25881a7f9e230639ce2a7cf660c80be2b03dd380fb79f719eb42cbd2cec258d3722700f56e8
7
- data.tar.gz: 355deeba3ab80be18c49895ddd9971aabf677ddbbb2f73bccfc93cadf8c55173eb50a98f7cb3646bd5097944acb5d412c4a86c75ac5fdb7204a02b6462425e78
6
+ metadata.gz: 92d0ed65d8546d19fe4158a75103675700e99b7e7655fb4b0183b275a11e06fc198f1b40efddf3d0982e60593a677b196d9e1e600202f1069c14a3249cf98665
7
+ data.tar.gz: 82c2cf673b4aa5ec4462e1d86eb4b918372ad3dbe8a9bae078b8a025b16f81ac09ceb2e7415829eff493a1367120e98c5b33b248cb9d78e64a44f84dcdc990f5
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  begin
4
- require 'mooc-data-parser'
4
+ require 'mooc_data_parser'
5
5
  rescue LoadError
6
6
  require 'rubygems'
7
- require 'mooc-data-parser'
7
+ require 'mooc_data_parser'
8
8
  end
9
9
 
10
- Mooc::Data::Parser::App.new.run(ARGV)
10
+ MoocDataParser::App.new.run(ARGV)
11
11
 
@@ -0,0 +1,11 @@
1
+ require "mooc_data_parser/app"
2
+ require "mooc_data_parser/dummy_cacher"
3
+ require "mooc_data_parser/version"
4
+ module MoocDataParser
5
+ require 'optparse'
6
+ require 'ostruct'
7
+ require 'httparty'
8
+ require 'json'
9
+ require 'io/console'
10
+ end
11
+
@@ -0,0 +1,257 @@
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
@@ -0,0 +1,62 @@
1
+
2
+ module MoocDataParser
3
+ require 'fileutils'
4
+ require 'tmpdir'
5
+ class DummyCacher
6
+ def initialize
7
+ FileUtils.mkdir_p(path)
8
+ end
9
+ # Yep, well just overwrite it if it exists
10
+ def cache_file(file)
11
+ FileUtils.cp(file, path)
12
+ end
13
+
14
+ def write_file_to_cache(filename, contents)
15
+ Dir.chdir(path) do
16
+ File.open(filename, "wb") { |file| file.write(contents) }
17
+ end
18
+ end
19
+
20
+ def read_file_from_cache(filename)
21
+ Dir.chdir(path) do
22
+ File.read(filename)
23
+ end
24
+ end
25
+
26
+ def get_from_cache(file_name)
27
+ File.join(path, file_name)
28
+ end
29
+
30
+ def file_exists?(file_name)
31
+ File.exists? get_from_cache(file_name)
32
+ end
33
+
34
+ def tmpdir_path
35
+ Dir.tmpdir
36
+ end
37
+
38
+ def unzip_file(file_name)
39
+ Dir.chdir(path) do
40
+ # Because I have found rubyzip to be buggy, we rely that your system has zip-command available
41
+ `unzip -o #{file_name}`
42
+ end
43
+ end
44
+
45
+ def find_files_matching(matcher)
46
+ files = []
47
+ Dir.chdir(path) do
48
+ files = Dir.glob(matcher)
49
+ end
50
+ files
51
+ end
52
+
53
+ def path
54
+ File.join(tmpdir_path, "mooc-data-analyser")
55
+ end
56
+
57
+ def clean!
58
+ FileUtils.rm_rf path
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ module MoocDataParser
2
+ VERSION = "0.0.3"
3
+ end
@@ -1,15 +1,15 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'mooc/data/parser/version'
4
+ require 'mooc_data_parser/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "mooc-data-parser"
8
- spec.version = Mooc::Data::Parser::VERSION
8
+ spec.version = MoocDataParser::VERSION
9
9
  spec.authors = ["Jarmo Isotalo"]
10
10
  spec.email = ["jamo@isotalo.fi"]
11
11
  spec.summary = %q{A small command line utility to show data from our tmc-server.}
12
- spec.homepage = ""
12
+ spec.homepage = "https://github.com/jamox/mooc-data-parser"
13
13
  spec.license = "MIT"
14
14
 
15
15
  spec.files = `git ls-files -z`.split("\x0")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mooc-data-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarmo Isotalo
@@ -66,12 +66,12 @@ files:
66
66
  - Rakefile
67
67
  - Readme.md
68
68
  - bin/mooc-data-parser
69
- - lib/mooc/data/parser.rb
70
- - lib/mooc/data/parser/App.rb
71
- - lib/mooc/data/parser/dummy_cacher.rb
72
- - lib/mooc/data/parser/version.rb
69
+ - lib/mooc_data_parser.rb
70
+ - lib/mooc_data_parser/App.rb
71
+ - lib/mooc_data_parser/dummy_cacher.rb
72
+ - lib/mooc_data_parser/version.rb
73
73
  - mooc-data-parser.gemspec
74
- homepage: ''
74
+ homepage: https://github.com/jamox/mooc-data-parser
75
75
  licenses:
76
76
  - MIT
77
77
  metadata: {}
@@ -1,15 +0,0 @@
1
- require "mooc/data/parser/app"
2
- require "mooc/data/parser/dummy_cacher"
3
- require "mooc/data/parser/version"
4
- module Mooc
5
- module Data
6
- require 'optparse'
7
- require 'ostruct'
8
- require 'httparty'
9
- require 'json'
10
- require 'io/console'
11
- module Parser
12
- end
13
- end
14
- end
15
-
@@ -1,262 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- module Mooc
3
- module Data
4
- require 'optparse'
5
- require 'ostruct'
6
- require 'httparty'
7
- require 'json'
8
- require 'io/console'
9
- module Parser
10
- class App
11
- def run(args)
12
- $cache ||= Mooc::Data::Parser::DummyCacher.new
13
- @notes = begin JSON.parse($cache.read_file_from_cache('data.json')) rescue {} end
14
-
15
- @options = OpenStruct.new
16
- opt = OptionParser.new do |opts|
17
- opts.banner = "Usage: show-mooc-details.rb [options]"
18
-
19
- opts.on("-f", "--force", "Reload data from server") do |v|
20
- @options.reload = true
21
- end
22
- opts.on("-u", "--user username", "Show details for user") do |v|
23
- @options.user = v
24
- end
25
- opts.on("-m", "--missing-points", "Show missing compulsary points") do |v|
26
- @options.show_missing_compulsory_points = true
27
- end
28
- opts.on("-c", "--completion-precentige", "Show completition percentige") do |v|
29
- @options.show_completion_percentige = true
30
- end
31
- opts.on("-e", "--email emailaddress", "Show details for user") do |v|
32
- @options.user_email = v
33
- end
34
- opts.on("-t", "--tmc-account tmc-account", "Show details for user") do |v|
35
- @options.user_tmc_username = v
36
- end
37
- opts.on("-l", "--list", "Show the basic list") do |v|
38
- @options.list = true
39
- end
40
- opts.on_tail("-h", "--help", "Show this message") do
41
- puts opts
42
- exit
43
- end
44
- end
45
- opt.parse!(args)
46
-
47
- json = maybe_fetch_json()
48
- if @options.user
49
- show_info_about(@options.user, 'username', json)
50
- elsif @options.user_email
51
- show_info_about(@options.user_email, 'email', json)
52
- elsif @options.user_tmc_username
53
- show_info_about(@options.user_tmc_username, 'username', json)
54
- elsif @options.list
55
- list_and_filter_participants(json)
56
- else
57
- $cache.write_file_to_cache('data.json', @notes.to_json)
58
- puts opt
59
- abort
60
- end
61
- $cache.write_file_to_cache('data.json', @notes.to_json)
62
- end
63
-
64
- def get_auth
65
- print 'username: '
66
- username = $stdin.gets.strip
67
- print 'password: '
68
- password = $stdin.noecho(&:gets).strip
69
- puts
70
- {username: username, password: password}
71
- end
72
-
73
- def maybe_fetch_json()
74
- if @options.reload or @notes['user_info'].nil? or @notes['week_data'].nil?
75
-
76
- t = -> do
77
- loop do
78
- print '.'
79
- sleep 0.5
80
- end
81
- puts
82
- end
83
-
84
- auth = get_auth()
85
- th = Thread.new(&t)
86
-
87
- 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"
88
- user_info = JSON.parse(HTTParty.get(url, basic_auth: auth).body)['participants']
89
- week_data = fetch_week_datas(auth)
90
- @notes['user_info'] = user_info.clone
91
- @notes['week_data'] = week_data.clone
92
- th.kill
93
- puts
94
- {participants: user_info, week_data: week_data}
95
- else
96
- {participants: @notes['user_info'].clone, week_data: @notes['week_data'].clone}
97
- end
98
- end
99
-
100
- def show_info_about(user, user_field = 'username', json)
101
- participants = json[:participants]
102
- week_data = json[:week_data]
103
- my_user = participants.find{|a| a[user_field] == user }
104
- if my_user.nil?
105
- abort "User not found"
106
- end
107
- formatted_print_user_details ["Username", my_user['username']]
108
- formatted_print_user_details ["Email", my_user['email']]
109
- formatted_print_user_details ["Hakee yliopistoon", my_user['hakee_yliopistoon_2014']]
110
- formatted_print_user_details ["Koko nimi", my_user['koko_nimi']]
111
-
112
- if @options.show_completion_percentige
113
- formatted_print_user_details ["Points per week"]
114
- done_exercise_percents(my_user, participants).each do |k|
115
- begin
116
- k = k.first
117
- formatted_print_user_details [k[0], k[1]]
118
- rescue
119
- nil
120
- end
121
- end
122
- end
123
-
124
- if @options.show_missing_compulsory_points
125
- formatted_print_user_details ["Compulsory points"]
126
- get_points_info_for_user(my_user, week_data).each do |k,v|
127
- formatted_print_user_details [k, v.join(", ")]
128
- end
129
- end
130
-
131
- end
132
-
133
- def formatted_print_user_details(details)
134
- case details.size
135
- when 1
136
- puts "%18s" % details
137
- when 2
138
- puts "%18s: %-20s" % details
139
- end
140
- end
141
-
142
- def fetch_week_datas(auth)
143
- base_url = "http://tmc.mooc.fi/mooc/courses/18/points/"
144
- weeks = %w(1 2 3 4 5 6 7 8 9 10 11 12)
145
- rest = ".json?api_version=7"
146
- week_data = {}
147
- weeks.each do |week|
148
- week_data[week] = JSON.parse(HTTParty.get(base_url + week + rest, basic_auth: auth).body)['users_to_points']
149
- end
150
- week_data
151
- end
152
-
153
- def list_and_filter_participants(json)
154
- wanted_fields = %W(username email koko_nimi)
155
-
156
- participants = json[:participants]
157
- week_data = json[:week_data]
158
- everyone_in_course = participants.size
159
- only_applying!(participants)
160
- hakee_yliopistoon = participants.size
161
-
162
- puts "%-20s %-35s %-25s %-120s" % ["Username", "Email", "Real name", "Missing points"]
163
- puts '-'*200
164
- participants.each do |participant|
165
- nice_string_in_array = wanted_fields.map do |key|
166
- participant[key]
167
- end
168
- if @options.show_completion_percentige
169
- nice_string_in_array << format_done_exercises_percents(done_exercise_percents(participant, participants))
170
- end
171
- if @options.show_missing_compulsory_points
172
- nice_string_in_array << missing_points_to_list_string(get_points_info_for_user(participant, week_data))
173
- end
174
-
175
-
176
- to_be_printed = "%-20s %-35s %-25s "
177
- to_be_printed << "%-180s " if @options.show_completion_percentige
178
- to_be_printed << "%-120s" if @options.show_missing_compulsory_points
179
-
180
- puts to_be_printed % nice_string_in_array
181
- end
182
-
183
- puts
184
- puts
185
- puts "Stats: "
186
- puts "%25s: %4d" % ["Kaikenkaikkiaan kurssilla", everyone_in_course]
187
- puts "%25s: %4d" % ["Hakee yliopistoon", hakee_yliopistoon]
188
-
189
- end
190
-
191
-
192
- def format_done_exercises_percents(hash)
193
- hash.map do |k|
194
- begin
195
- k = k.first
196
- "#{k[0].scan(/\d+/).first}: #{k[1]}"
197
- rescue
198
- nil
199
- end
200
- end.compact.join(", ")
201
- end
202
-
203
-
204
- def done_exercise_percents(participant, participants_data)
205
- user_info = participants_data.find{ |p| p['username'] == participant['username'] }
206
- exercise_weeks = user_info['groups']
207
- week_keys = (1..12).map{|i| "viikko#{i}"}
208
-
209
- week_keys.map do |week|
210
- details = exercise_weeks[week]
211
- unless details.nil?
212
- {week => ("%3.1f%" % [(details['points'].to_f / details['total'].to_f) * 100])}
213
- end
214
- end
215
- end
216
-
217
- def missing_points_to_list_string(missing_by_week)
218
- str = ""
219
- missing_by_week.keys.each do |week|
220
- missing = missing_by_week[week]
221
- unless missing.nil? or missing.length == 0
222
- str << week
223
- str << ": "
224
- str << missing.join(",")
225
- str << " "
226
- end
227
- end
228
-
229
- str
230
-
231
- end
232
-
233
- def get_points_info_for_user(participant, week_data)
234
- # TODO: täydennä data viikolle 12
235
- 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),
236
- '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()}
237
- points_by_week = {}
238
- week_data.keys.each do |week|
239
- points_by_week[week] = week_data[week][participant['username']]
240
- end
241
-
242
-
243
- missing_by_week = {}
244
- points_by_week.keys.each do |week|
245
- weeks_points = points_by_week[week] || [] #palauttaa arrayn
246
- weeks_compulsory_points = compulsory_exercises[week] || []
247
- missing_by_week[week] = weeks_compulsory_points - weeks_points
248
- end
249
-
250
- missing_by_week
251
- end
252
-
253
- def only_applying!(participants)
254
- participants.select! do |participant|
255
- participant['hakee_yliopistoon_2014']
256
- end
257
- end
258
- end
259
- end
260
- end
261
- end
262
- __END__
@@ -1,65 +0,0 @@
1
-
2
- module Mooc
3
- module Data
4
- module Parser
5
- require 'fileutils'
6
- class DummyCacher
7
- def initialize
8
- FileUtils.mkdir_p(path)
9
- end
10
- # Yep, well just overwrite it if it exists
11
- def cache_file(file)
12
- FileUtils.cp(file, path)
13
- end
14
-
15
- def write_file_to_cache(filename, contents)
16
- Dir.chdir(path) do
17
- File.open(filename, "wb") { |file| file.write(contents) }
18
- end
19
- end
20
-
21
- def read_file_from_cache(filename)
22
- Dir.chdir(path) do
23
- File.read(filename)
24
- end
25
- end
26
-
27
- def get_from_cache(file_name)
28
- File.join(path, file_name)
29
- end
30
-
31
- def file_exists?(file_name)
32
- File.exists? get_from_cache(file_name)
33
- end
34
-
35
- def tmpdir_path
36
- Dir.tmpdir
37
- end
38
-
39
- def unzip_file(file_name)
40
- Dir.chdir(path) do
41
- # Because I have found rubyzip to be buggy, we rely that your system has zip-command available
42
- `unzip -o #{file_name}`
43
- end
44
- end
45
-
46
- def find_files_matching(matcher)
47
- files = []
48
- Dir.chdir(path) do
49
- files = Dir.glob(matcher)
50
- end
51
- files
52
- end
53
-
54
- def path
55
- File.join(Dir.tmpdir, "mooc-data-analyser")
56
- end
57
-
58
- def clean!
59
- FileUtils.rm_rf path
60
- end
61
-
62
- end
63
- end
64
- end
65
- end
@@ -1,7 +0,0 @@
1
- module Mooc
2
- module Data
3
- module Parser
4
- VERSION = "0.0.1"
5
- end
6
- end
7
- end