Class: Studium::Statistics::ReportHowManyExamQuestionsWereAnswered

Inherits:
Base
  • Object
show all
Defined in:
lib/studium/statistics/report_how_many_exam_questions_were_answered.rb

Overview

Studium::Statistics::ReportHowManyExamQuestionsWereAnswered

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect

Constants inherited from Base

Base::ARRAY_HTML_COLOURS_IN_USE, Base::CHECK_FOR_INCORRECT_ENTRIES_IN_THE_QUESTION_ANSWER_FILE_THAT_SHOULD_BE_COMMENTS, Base::COLOURS, Base::COMMON_YEAR_DAYS_IN_MONTH, Base::GRAY, Base::LEFT_PADDING, Base::N_CHARACTERS_PER_LINE, Base::UNICODE_RIGHT_ARROW

Constants included from Colours

Colours::COLOURS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#add_proper_year_entry_to_this_line, #already_solved_this_lva_number?, #append_what_into, #available_topics_as_short_name, #average_grade, #bachelor_master_or_diploma, #base_dir?, #be_silent, #be_verbose?, #beautiful_url, #change_directory, #cheering_person, #cliner, #colour_for_ects_points, #colourize_percentage, #commandline_arguments?, #commandline_arguments_joined, #commandline_arguments_with_hyphens?, #convert_this_array_of_lectures_into_the_full_dataset, #copy, #cpruby, #create_directory, #create_file, #csv_file?, #current_month?, #datum?, #day_month_year, #debug?, #delete_file, #directory_of_the_exam_topics?, #directory_to_my_exam_topics, #directory_to_the_exam_topics?, #disable_colours, #disable_colours_globally, #do_not_be_verbose, #do_not_use_opn, #do_these_curricula_include_both_a_bachelor_and_a_master_curriculum?, #does_this_line_include_a_german_weekday?, #does_this_line_include_a_html_colour?, #e, #ecomment, #editor?, #ee, #enable_colours, #enable_colours_globally, #enable_debug, #encoding?, #english_to_german_weekday, #ensure_main_encoding, #ensure_that_the_log_directory_exists, #eparse, #erev, #esystem, #etomato, #exit_program, #expand_topic, #extract_dd_mm_yyyy, #file_lecture_information?, #file_read_with_proper_encoding, #filter_away_invalid_questions, #find_corresponding_exam_topic, #first_argument?, #first_non_hyphen_argument?, #from_curriculum_id_to_university, #german_date_notation, #german_weekday?, #german_weekdays?, #has_a_bachelor_curriculum?, #has_a_master_curriculum?, #has_this_exam_topic_been_solved?, #has_year_entry?, #hh_mm_ss_dd_mm_yyyy, #horizontal_bar?, #html_log_directory?, #is_a_master_lecture?, #is_a_weekday?, #is_connected_to_the_www?, #is_on_roebe?, #is_prüfungsimmanent?, #is_this_a_valid_html_colour?, #is_this_day_today?, #konsole_support?, #last_file?, #lectures_from_indi1, #lectures_from_indi2, #lectures_from_indi3, #lectures_from_indi4, #lectures_from_the_bachelor_genetik_curriculum, #lectures_from_the_individual_vektor_curricula, #load_yaml_dataset, #move_file, #n_days_difference_from_today_to_this_day, #no_ext_name, #no_file_at, #number_to_month, #obtain, #obtain_lectures_from_this_curriculum, #open_in_editor, #opnn, #path_to_exam_topic?, #read_dataset_from_a_curriculum_file, #read_in_exam_dataset_from_this_file, #read_this_file_with_default_encoding, #readlines_from_this_input_file, #register_sigint, #remove_empty_strings, #remove_escape_sequences, #remove_internal_comments, #remove_leading_comments, #remove_leading_weekday_names_from, #remove_newlines, #remove_tags_from_this_input, #rename_kde_konsole_tab, #rename_konsole_tab?, #replace_all_html_colours_in_this, #replace_bold_token_with_default_colour, #replace_italic_token_with_default_colour, #replace_italic_token_with_this_colour, #replace_regular_numbers_with_unicode_numbers, #replace_underline_token_with_default_colour, #replace_underline_token_with_this_colour, #return_all_bachelor_lectures, #return_all_exams_on_this_day, #return_all_numbers_from, #return_all_registered_curricula, #return_all_steop_lectures, #return_current_year, #return_dataset_for_this_topic, #return_dataset_from_this_curriculum_file, #return_dd_mm_yy_and_time_from, #return_directory_for, #return_ects_points_from_these_lectures, #return_either_grey_or_the_custom_colour_for_answers, #return_either_grey_or_the_custom_colour_for_questions, #return_file_for_this_curriculum, #return_german_name_for_this_english_month, #return_german_weekday_of?, #return_hh_mm_ss_from, #return_hour_from_this, #return_lectures_from_bachelor_vektor_curriculum, #return_lectures_with_at_the_least_one_upcoming_exam, #return_local_path_of_this_pwdstud, #return_lva_number_of_this_lecture, #return_month_fitting_to_this_input, #return_n_days_until_monday, #return_n_days_until_sunday, #return_n_exam_questions_in, #return_n_questions_were_answered_for_this_topic, #return_name_of_the_weekday, #return_name_of_this_curriculum, #return_name_of_this_curriculum_based_on_its_id_number, #return_opnn, #return_passed_courses, #return_pwd, #return_random_curriculum, #return_sanitized_dataset_from_the_file_lecture_information, #return_solved_lectures, #return_steop_lectures, #return_the_remote_homepage_url, #return_this_line_has_n_characters_as_html_colour_tags, #return_title_from_this_curriculum_file, #rev, #right_arrow?, #rinstall2, #roebe_exam_directory?, #ruby_src_dir_at_home?, #runmode?, #sanitize_this_topic, #sanitize_url, #select_lectures_with_this_key, #set_be_quiet, #set_be_verbose, #set_commandline_arguments, #set_commandline_mode, #set_runmode, #set_this_cd_alias_to, #set_www_mode, #sfancy, #shall_we_make_use_of_unicode_symbols?, #show_todays_date, #simp, #sort_these_lecture_names_by_time, #spacer, #swarn, #this_month_has_n_days?, #total_ects_points_passed, #translate_dd_mm_yyyy_to_weekday, #try_to_require_the_rcfiles, #turn_this_array_into_the_full_dataset, #unicode_blocks_line, #use_colours?, #use_opn?, #vertical_bar?, #web_liner, #weekday?, #weekdays?, #word_wrap, #write_what_into, #www_connection_is_unavailable, #www_mode?, #yaml_dir?

Methods included from Colours

#bold_blue, #bold_red, #bold_yellow, #cadetblue, #chartreuse, crimson, #darkgray, darkgreen, darkseagreen, deepskyblue, #deepskyblue, default_colour, #dimgray, disable_colours, #dodgerblue, e, #efancy, enable_colours, #ewarn, #forestgreen, gold, #grey, lightblue, lightgreen, #lightslategray, #lightsteelblue, #mediumorchid, #mediumseagreen, #oldlace, #olivedrab, orange, orangered, #orchid, palevioletred, #papayawhip, rev, royalblue, sdir, #sdir, sfancy, #sfancy, sfile, #sfile, simp, #simp, slateblue, steelblue, #steelblue, #swarn, swarn, #teal, turquoise, use_colours?, use_this_colour_for_exam_answers, use_this_colour_for_exam_questions, #yellow

Constructor Details

#initialize(optional_commandline_arguments = ARGV, run_already = true) ⇒ ReportHowManyExamQuestionsWereAnswered

#

initialize

#


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 34

def initialize(
    optional_commandline_arguments = ARGV,
    run_already                    = true
  )
  reset
  if optional_commandline_arguments
    menu(optional_commandline_arguments)
  end
  if block_given?
    yielded = yield
    case yielded
    when :do_not_show_result,
         :do_not_show_the_result,
         :do_not_display_the_result,
         :be_quiet
      @output_result = false
    end
  end
  run if run_already
end

Class Method Details

.[](*args) ⇒ Object

#

Studium::Statistics::ReportHowManyExamQuestionsWereAnswered[]

This is the variant that will not display the result.

#


422
423
424
425
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 422

def self.[](*args) # Accepts arguments.
  object = new(args) { :do_not_display_the_result }
  return object
end

.generate_webpageObject

#

Studium::Statistics::ReportHowManyExamQuestionsWereAnswered.generate_webpage

#


430
431
432
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 430

def self.generate_webpage
  new('generate_webpage')
end

.show_statsObject

#

Studium::Statistics::ReportHowManyExamQuestionsWereAnswered.show_stats

#


437
438
439
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 437

def self.show_stats
  new
end

Instance Method Details

#[](key) ⇒ Object

#

Studium::Statistics::ReportHowManyExamQuestionsWereAnswered[]

#


444
445
446
447
448
449
450
451
452
453
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 444

def [](key)
  # ======================================================================= #
  # If the key is :random_topic then we will treat it in a special
  # manner.
  # ======================================================================= #
  if key == :random_topic
    key = @hash.keys.sample
  end
  @hash[key.to_sym]
end

#add_statistical_information_to_the_main_stringObject

#

add_statistical_information_to_the_main_string

The task of this method is to add how many questions and answered to these questions we have.

#


343
344
345
346
347
348
349
350
351
352
353
354
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 343

def add_statistical_information_to_the_main_string
  _ = ''.dup
  if use_unicode_symbols? and !www_mode?
    _ << N
    _ << return_unicode_line
  end
  _ << N
  _ << 'n questions available: '+sfancy(n_questions?.to_s)+N
  _ << 'n answers given:       '+
        sfancy(n_questions_answered.to_s.rjust(5))+N
  @string_to_save_into_file << _
end

#considering_renaming_kde_konsole_tab(use_this_title = 'Exam Statistics') ⇒ Object

#

considering_renaming_kde_konsole_tab

#


187
188
189
190
191
192
193
194
195
196
197
198
199
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 187

def considering_renaming_kde_konsole_tab(
    use_this_title = 'Exam Statistics'
  )
  if Object.const_defined?(:Roebe) and
     Roebe.respond_to?(:rename_konsole_tab) and
     konsole_support? and
     rename_konsole_tab?
    begin
      require 'roebe/classes/kde/kde_konsole/kde_konsole.rb'
    rescue LoadError; end
    Roebe.rename_konsole_tab(use_this_title, :be_quiet)
  end
end

#display_datasetObject Also known as: display

#

display_dataset

#


204
205
206
207
208
209
210
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 204

def display_dataset
  if output_result? and be_verbose?
    e @string_to_save_into_file # Display the main string.
    save_how_many_questions_we_have_registered_so_far
    save_dataset_into_file
  end
end

#generate_webpageObject

#

generate_webpage

This method will generate a webpage.

Invocation example:

examstatistics --generate-webpage
#


373
374
375
376
377
378
379
380
381
382
383
384
385
386
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 373

def generate_webpage
  set_runmode(:www)
  disable_colours
  initialize_main_dataset
  use_this_regex = /\(That is (\d*.\d+) %\)/ # See: http://rubular.com/r/I3r4ryPFfw
  use_this_css_style = 'background-color: black; padding: 0.5em; color: white; font-size:1.2em;'
  _ = dataset?.gsub(/\n/, "\n<br>")
  _ =~ use_this_regex
  _.gsub!(use_this_regex, '(That is <span style="color: red">\1</span> %)')
  what = '<html><title>Statistics</title><body style="'+use_this_css_style+'">'+_+'</body></html>'
  into = "#{html_log_directory?}statistics.html"
  write_what_into(what, into)
  opnn; e "Storing into file `#{sfile(into)}`."
end

#hash?Boolean Also known as: internal_dataset

#

hash?

#

Returns:

  • (Boolean)


132
133
134
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 132

def hash?
  @hash
end

#initialize_main_datasetObject

#

initialize_main_dataset

This will populate @hash with the proper entries.

#


217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 217

def initialize_main_dataset
  all_topics = ::Studium::Exams.all_topics_as_short_name
  directory_to_the_exam_topics = directory_to_the_exam_topics?
  # ======================================================================= #
  # Iterate over the full dataset next.
  # ======================================================================= #
  all_topics.each {|filename|
    # ===================================================================== #
    # We will obtain the path to the filename. In the past we also
    # applied .downcase on this, but some files may contain upcased
    # characters, such as the file 'RNAi_siRNA_and_miRNA'.
    # ===================================================================== #
    path = "#{directory_to_the_exam_topics}#{filename}"
    if File.file? path
      dataset = File.readlines(path)
      dataset = ::Studium.filter_away_invalid_questions(dataset, path)
      n_total_questions = dataset.size
      n_questions_answered = dataset.select {|entry| entry.include? ' []' }.size
      # ===================================================================== #
      # We must be careful when we calculate the percentage. We
      # should not divide by 0.
      # ===================================================================== #
      if n_total_questions == 0
        percentage_of_questions_answered = 0
      else
        percentage_of_questions_answered = (
          (n_questions_answered * 100.0) / n_total_questions
        ).round(2)
      end
      @hash[filename.to_sym] = {
        n_total_questions:                n_total_questions,
        n_questions_answered:             n_questions_answered,
        percentage_of_questions_answered: percentage_of_questions_answered
      }
    else
      opnn; e no_file_at(path)
    end
  } # At this point, we have initialized our dataset properly.
  sort_main_hash_by_percentages
  populate_main_string
  add_statistical_information_to_the_main_string
end
#

menu

#


89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 89

def menu(i)
  if i.is_a? Array
    i.flatten.each {|entry| menu(entry) }
  else
    case i.to_s.delete('-') # case tag
    # ===================================================================== #
    # === examstatistics --generate-webpage
    # ===================================================================== #
    when /^-?-?generate(_|-)?homepage$/,'www',
         /webpage/ # The last variant also includes --generate-webpage
       generate_webpage
       exit
    # ===================================================================== #
    # === be_quiet_and_no_colours
    # ===================================================================== #
    when 'be_quiet_and_no_colours'
      be_quiet
      no_colours
    # ===================================================================== #
    # === be_quiet
    # ===================================================================== #
    when /^-?-?be_?quiet/,
         /^-?-?be_?silent/
      be_quiet
    # ===================================================================== #
    # === shorten
    # ===================================================================== #
    when /^-?-?shorten$/,'short','shor','sho','sh','s'
      @shorten_result = true
    # ===================================================================== #
    # === 5
    # ===================================================================== #
    when /\d+/ # Else if input is a number. We will display only x categories.
      @keep_only_n_results = i.to_i - 1
    # else
      # pp _ # Be silent for now.
    end
  end
end

#n_answers?Boolean Also known as: n_questions_answered

#

n_answers?

#

Returns:

  • (Boolean)


169
170
171
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 169

def n_answers?
  @n_total_answers
end

#n_questions?Boolean

#

n_questions?

#

Returns:

  • (Boolean)


162
163
164
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 162

def n_questions?
  @n_total_questions
end

#output_result?Boolean

#

output_result?

#

Returns:

  • (Boolean)


147
148
149
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 147

def output_result?
  @output_result
end

#populate_main_stringObject

#

populate_main_string

This is the method that will fill up the main String that is to be displayed to the user.

#


266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 266

def populate_main_string
  index = 0
  # ======================================================================= #
  # We can now display the relevant entries from our main Hash. We will
  # sort the entries by n total questions. If this is unwanted, we can
  # remove it again at a later time.
  # We have to sort on two criteria at the same time - first, how
  # many questions; and then, how many answers to these questions.
  # ======================================================================= #
  sorted = @hash.sort_by {|key, value|
    [
      value[:n_total_questions],
      value[:n_questions_answered]
    ]
  }.reverse
  if use_unicode_symbols? and !www_mode?
    @string_to_save_into_file << N
    @string_to_save_into_file << return_unicode_line
    @string_to_save_into_file << N
  end
  sorted.each {|key, value| # value is a hash as well
    index += 1
    name_of_the_topic_at_hand = ::Studium.find_corresponding_exam_title(key.to_s)
    if name_of_the_topic_at_hand.nil?
      opnn; e 'No topic found for '+orange(key.to_s)
    else
      n_total_questions    = value.fetch(:n_total_questions)
      @n_total_questions  += n_total_questions
      n_questions_answered = value.fetch(:n_questions_answered)
      @n_total_answers    += n_questions_answered
      _  = ''.dup
      inner_index = index.to_s.rjust(3)
      if is_on_www? # Handle www-situation.
        _ << '<span style="color: sandybrown">'+inner_index+'</span>) '
      else
        _ << sandybrown(inner_index)+paleturquoise(') ')
      end
      # =================================================================== #
      # Next add the name of the exam-topic at hand. This used to
      # be colourized in slateblue, but is now handled via royalblue.
      # =================================================================== #
      _ << royalblue(name_of_the_topic_at_hand.ljust(52))
      # =================================================================== #
      # Next, add how many questions exist for this particular topic.
      # The .rjust() value must be at the least 4, because right now the
      # maximum amount of questions allowed for a given topic is '1000'.
      # =================================================================== #
      if n_total_questions.to_i == 1000 # When this topic has 1000 questions, another colour is used.
        _ << "#{lawngreen(n_total_questions.to_s.rjust(4))} questions in total."
      else 
        # ================================================================= #
        # Colourize in lightslategray by default.
        # ================================================================= #
        _ << "#{lightslategray(n_total_questions.to_s.rjust(4))} questions in total."
      end
      _ << sfancy(n_questions_answered.to_s.rjust(4))+' answered yet.'
      # =================================================================== #
      # Next, add the percentage value here.
      # =================================================================== #
      the_percentage = '0.0'
      unless n_total_questions.to_i == 0
        the_percentage = (n_questions_answered * 100 / n_total_questions).round(2).to_s
      end
      _ << ' (That is '+colourize_percentage(
        the_percentage.to_i.to_s.rjust(3)+'%'
      )+')'+N
      @string_to_save_into_file << _
    end
  }
end

#resetObject

#

reset

#


58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 58

def reset
  super()
  # ======================================================================= #
  # === @namespace
  # ======================================================================= #
  @namespace = NAMESPACE
  # ======================================================================= #
  # === @hash
  # ======================================================================= #
  @hash = {} # This is the main hash - it stores the dataset for every topic at hand.
  # ======================================================================= #
  # === @string_to_save_into_file
  # ======================================================================= #
  @string_to_save_into_file = ''.dup
  # ======================================================================= #
  # === @n_total_questions
  # ======================================================================= #
  @n_total_questions = 0
  # ======================================================================= #
  # === @n_total_answers
  # ======================================================================= #
  @n_total_answers   = 0
  # ======================================================================= #
  # === @output_result
  # ======================================================================= #
  @output_result     = true
end

#return_unicode_lineObject

#

return_unicode_line

#


359
360
361
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 359

def return_unicode_line
  ' '+unicode_blocks_line(:steelblue, 115)+' '
end

#runObject

#

run

#


411
412
413
414
415
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 411

def run
  considering_renaming_kde_konsole_tab
  initialize_main_dataset
  display_dataset
end

#save_dataset_into_fileObject

#

save_dataset_into_file

#


154
155
156
157
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 154

def save_dataset_into_file
  into = ::Studium::FILE_EXAM_STATISTICS
  write_what_into(@string_to_save_into_file, into)
end

#save_how_many_questions_we_have_registered_so_farObject

#

save_how_many_questions_we_have_registered_so_far

This method saves how many total questions we have already registered so far.

#


394
395
396
397
398
399
400
401
402
403
404
405
406
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 394

def save_how_many_questions_we_have_registered_so_far
  what = @n_total_questions
  into = FILE_N_TOTAL_QUESTIONS
  write_what_into(what, into)
  into = base_dir?+File.basename(FILE_N_TOTAL_QUESTIONS)
  write_what_into(what, into)
  if is_on_roebe?
    into = RUBY_SRC_DIR+'studium/lib/studium/yaml/'+
           File.basename(FILE_N_TOTAL_QUESTIONS)
    e "Also storing in #{sfile(into)} as we are on roebe."
    write_what_into(what, into)
  end
end

#sort_main_hash_by_percentagesObject

#

sort_main_hash_by_percentages

#


176
177
178
179
180
181
182
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 176

def sort_main_hash_by_percentages
  _ = @hash.sort_by {|key, value|
    value[:percentage_of_questions_answered].to_f # Need to work on Floats. 
  }
  new_hash = Hash[_.reverse]
  @hash = new_hash # Now the Hash is sorted.
end

#string_to_save_into_file?Boolean Also known as: text?, dataset?

#

string_to_save_into_file?

#

Returns:

  • (Boolean)


139
140
141
# File 'lib/studium/statistics/report_how_many_exam_questions_were_answered.rb', line 139

def string_to_save_into_file?
  @string_to_save_into_file
end