Class: Studium::CurriculumComparer

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

Overview

Studium::CurriculumComparer

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect
THRESHOLD_N_ECTS =
#

THRESHOLD_N_ECTS

#
8.0
COLOUR_FOR_THE_NAME_OF_THE_CURRICULA =
#

COLOUR_FOR_THE_NAME_OF_THE_CURRICULA

#
:slategray

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

Studium::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(i = nil, run_already = true) ⇒ CurriculumComparer

#

initialize

#


45
46
47
48
49
50
51
52
# File 'lib/studium/statistics/curriculum_comparer.rb', line 45

def initialize(
    i           = nil,
    run_already = true
  )
  reset
  set_input(i)
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

Studium::CurriculumComparer[]

#


336
337
338
# File 'lib/studium/statistics/curriculum_comparer.rb', line 336

def self.[](i = '')
  new(i)
end

Instance Method Details

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


161
162
163
# File 'lib/studium/statistics/curriculum_comparer.rb', line 161

def input?
  @input
end

#iterate_over_the_registered_curriculaObject

#

iterate_over_the_registered_curricula

This is the powerhorse method of this class.

#


190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
# File 'lib/studium/statistics/curriculum_comparer.rb', line 190

def iterate_over_the_registered_curricula
  hash = Studium.return_hash_of_already_solved_lectures
  notify_the_user_what_we_will_do_next_on_the_commandline(hash)
  hash.each_pair {|name_of_the_lecture, inner_hash|
    n_ects_points = inner_hash[:ects]
    all_curricula = inner_hash['curricula']
    # ===================================================================== #
    # Proceed only if we have any curricula-id registered there:
    # ===================================================================== #
    if all_curricula
      all_curricula.each {|this_curriculum_number|
        unless this_curriculum_number.empty? # Ignore unassigned lectures.
          hash = {}
          # =============================================================== #
          # First, add the ECTS points.
          # =============================================================== #
          hash[:n_ects_points] = 0
          if @main_hash[this_curriculum_number].has_key? :n_ects_points
            hash[:n_ects_points] = @main_hash[this_curriculum_number][:n_ects_points]
          end
          hash[:n_ects_points] += n_ects_points
          # =============================================================== #
          # Next add how many lectures were passed there.
          # =============================================================== #
          hash[:n_lectures_were_passed] = 0
          if @main_hash[this_curriculum_number].has_key? :n_lectures_were_passed
            hash[:n_lectures_were_passed] = @main_hash[this_curriculum_number][:n_lectures_were_passed]
          end
          hash[:n_lectures_were_passed] += 1
          @main_hash[this_curriculum_number] = hash
        end
      }
    end
  }
  sorted = @main_hash.sort_by {|key, values|
    values[:n_ects_points]
  }.reverse
  # ======================================================================= #
  # Determine a cut-off value below a certain threshold size.
  # ======================================================================= #
  if @ignore_ects_below_this_threshold
    sorted.reject! {|key, value|
      n_ects_points = value[:n_ects_points]
      n_ects_points < @ignore_ects_below_this_threshold
    }
  end
  report(sorted)
end

#main_colourObject

#

main_colour

#


104
105
106
107
108
# File 'lib/studium/statistics/curriculum_comparer.rb', line 104

def main_colour
  ::Colours.remove_trailing_ansii_escape_code(
    ::Colours.send(COLOUR_FOR_THE_NAME_OF_THE_CURRICULA, '')
  )
end
#

menu (menu tag)

#


113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/studium/statistics/curriculum_comparer.rb', line 113

def menu(
    i = @input
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i
    # ===================================================================== #
    # === supercurriculum --master
    # ===================================================================== #
    when /^-?-?master$/
      @show_only_master_curricula = true
    # ===================================================================== #
    # === supercurriculum --help
    # ===================================================================== #
    when /^-?-?help$/
      show_help
      exit
    # ===================================================================== #
    # === supercurriculum --no-threshold
    # ===================================================================== #
    when /^-?-?no(-|_)?threshold$/
      no_threshold
    end
  end
end

#no_thresholdObject

#

no_threshold

#


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

def no_threshold
  @ignore_ects_below_this_threshold = 0
end

#notify_the_user_what_we_will_do_next_on_the_commandline(i) ⇒ Object

#

notify_the_user_what_we_will_do_next_on_the_commandline

#


168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/studium/statistics/curriculum_comparer.rb', line 168

def notify_the_user_what_we_will_do_next_on_the_commandline(i)
  opnn { :no_colon }
  e
  e
  e 'We will now run through the registered curricula ('+
    slategray(i.size.to_s+' lectures')+' are registered).'
  if @ignore_ects_below_this_threshold
    e
    e 'The '+lime('threshold value')+
      ' is set so that only curricula with more '\
      'than '+lightblue(@ignore_ects_below_this_threshold.to_s)+
      ' ECTS points'
    e 'will be listed.'
  end
  e
end

#report(i) ⇒ Object

#

report (report tag)

This method will do the actual “reporting”, that is, display stuff to the user, on the commandline.

The input to this method may contain entries that look like this:

["033658", {:n_ects_points=>13.5, :n_lectures_were_passed=>3}],
#


250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
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
# File 'lib/studium/statistics/curriculum_comparer.rb', line 250

def report(i)
  unless i.empty?
    e "Most lectures were passed in the "\
      "following #{royalblue('curricula')}:"
    e
    i.each {|id_of_the_curriculum, hash|
      if @show_only_master_curricula and !::Studium.is_this_a_master_curriculum?(id_of_the_curriculum)
        next # In this case we will not show it.
      end
      n_ects_points = hash[:n_ects_points]
      n_lectures_were_passed = hash[:n_lectures_were_passed]
      university = from_curriculum_id_to_university(id_of_the_curriculum)
      name_of_the_curriculum = Studium.return_name_of_this_curriculum(
        id_of_the_curriculum
      )
      # =================================================================== #
      # Colourize the name of the curriculum next.
      # =================================================================== #
      if name_of_the_curriculum
        if name_of_the_curriculum.include? 'Mastercurriculum'
          name_of_the_curriculum.sub!(/Mastercurriculum/,'Mastercurriculum  ')
        end
      end
      # =================================================================== #
      # === Truncate too long curricula names next
      # =================================================================== #
      if name_of_the_curriculum.size > 84
        name_of_the_curriculum = name_of_the_curriculum[0 .. 85]+' [...]'
      end
      colourized_name_of_the_curriculum = ::Colours.send(
        COLOUR_FOR_THE_NAME_OF_THE_CURRICULA, name_of_the_curriculum
      )
      left_side = @left_padding_to_use+
                  colourized_name_of_the_curriculum+
                  teal(" (#{id_of_the_curriculum}) ")
      left_side = left_side.ljust(144)
      if @skip_lehramt_curricula
        if left_side.include?('Lehramt') or
           left_side.include?('Besuch einzelner Lehrveranstaltungen')
          next
        end
      end
      padded_university = university.to_s.ljust(11)
      padded_n_lectures_were_passed = (
        n_lectures_were_passed.to_s.rjust(2)+' lectures passed'
      ).rjust(16)
      colourized_n_ects_points = slateblue(n_ects_points.to_s.rjust(5)+' ECTS')
      # =================================================================== #
      # Prettify the result next.
      # =================================================================== #
      colourized_n_lectures_were_passed = darkslateblue(
        padded_n_lectures_were_passed
      )
      result = left_side+
               colourized_n_ects_points+' '+
               royalblue(padded_university)
      if result.include? 'Mastercurriculum'
        # ================================================================= #
        # Colourize the word 'Mastercurriculum' in this case.
        # ================================================================= #
        result.sub!(
          /Mastercurriculum/,   cornflowerblue(   'Mastercurriculum')+
          main_colour
        )
      elsif result.include? 'Bachelorcurriculum'
        result.sub!(
          /Bachelorcurriculum/, mediumspringgreen('Bachelorcurriculum')+
          main_colour
        )
      end
      result << ' '+colourized_n_lectures_were_passed
      e result
    }; e
  end
end

#resetObject

#

reset (reset tag)

#


57
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
85
86
87
88
89
# File 'lib/studium/statistics/curriculum_comparer.rb', line 57

def reset
  super()
  # ======================================================================= #
  # === @namespace
  # ======================================================================= #
  @namespace = NAMESPACE
  # ======================================================================= #
  # === @show_only_master_curricula
  # ======================================================================= #
  @show_only_master_curricula = false
  # ======================================================================= #
  # === @main_hash
  # ======================================================================= #
  @main_hash = {} # This Hash will contain all relevant snippets.
  # ======================================================================= #
  # Default to an empty Hash. One entry specifies the amount of ECTS points.
  # ======================================================================= #
  @main_hash.default = {}
  # ======================================================================= #
  # === @ignore_ects_below_this_threshold
  # ======================================================================= #
  @ignore_ects_below_this_threshold = THRESHOLD_N_ECTS # Less than this threshold in ECTS will be ignored.
  # ======================================================================= #
  # === @skip_lehramt_curricula
  # ======================================================================= #
  @skip_lehramt_curricula = true # If true we ignore "Lehramt" curricula
  # ======================================================================= #
  # === @left_padding_to_use
  #
  # How much we will pad to the left side.
  # ======================================================================= #
  @left_padding_to_use = ' '.dup
end

#runObject

#

run (run tag)

#


329
330
331
# File 'lib/studium/statistics/curriculum_comparer.rb', line 329

def run
  iterate_over_the_registered_curricula
end

#set_input(i = '') ⇒ Object

#

set_input

#


94
95
96
97
98
99
# File 'lib/studium/statistics/curriculum_comparer.rb', line 94

def set_input(i = '')
  i = i.first if i.is_a? Array
  i = i.to_s.dup
  @input = i
  menu
end

#show_helpObject

#

show_help (help tag)

#


143
144
145
146
147
148
149
# File 'lib/studium/statistics/curriculum_comparer.rb', line 143

def show_help
  e
  e '  --no-threshold # this means to show all curricula where'
  e '                 # at the least one lecture has been passed'
  e '  --master       # show only master-lectures'
  e
end