Class: Studium::Semesterplaner

Inherits:
Base
  • Object
show all
Defined in:
lib/studium/utility_scripts/semesterplaner.rb

Overview

Studium::Semesterplaner

Constant Summary

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::NAMESPACE, 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(commandline_arguments = nil, run_already = true) ⇒ Semesterplaner

#

initialize

#


27
28
29
30
31
32
33
34
35
36
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 27

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

Studium::Semesterplaner[]

#


281
282
283
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 281

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

Instance Method Details

#colourize_ects_points(i) ⇒ Object

#

colourize_ects_points

#


106
107
108
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 106

def colourize_ects_points(i)
  lightgreen(i)
end

#fill_the_hash_with_subsectionsObject

#

fill_the_hash_with_subsections

#


212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 212

def fill_the_hash_with_subsections
  @all_lectures_from_the_curriculum.each {|this_lecture|
    n_ects = pointer?(this_lecture)[:ects].to_f
    use_this_semester = which_semester?
    # ===================================================================== #
    # We add it next, but we also have to calculate how many ECTS
    # points were already added.
    # ===================================================================== #
    if (n_ects_in_this_semester?(use_this_semester) + n_ects) > 30
      use_this_semester = @this_semester = increment(@this_semester)
    end
    if (n_ects_in_this_semester?(previous_semester?) < 30) and
      !(use_this_semester == :first_semester) and
      (
        (n_ects_in_this_semester?(previous_semester?) + n_ects) <= 30
      )
      use_this_semester = previous_semester?(use_this_semester)
    end
    @hash_storing_the_subsections[use_this_semester].update(
      { this_lecture => n_ects}
    )
  }
  report
end

#increment_semester_counter(i = @this_semester) ⇒ Object Also known as: increment

#

increment_semester_counter

#


142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 142

def increment_semester_counter(
    i = @this_semester
  )
  case i
  when :first_semester
    :second_semester
  when :second_semester
    :third_semester
  when :third_semester
    :fourth_semester
  when :fourth_semester
    :fifth_semester
  when :fifth_semester
    :sixth_semester
  when :sixth_semester # ← No increment in this case.
    :sixth_semester
  end
end

#n_ects_in_this_semester?(i = which_semester?) ) ⇒ Boolean Also known as: sum_of_ects_points_in

#

n_ects_in_this_semester?

#

Returns:

  • (Boolean)


133
134
135
136
137
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 133

def n_ects_in_this_semester?(i = which_semester?)
  @hash_storing_the_subsections[i].map {|lecture, n_ects|
    n_ects
  }.sum
end

#pointer?(this_lecture) ⇒ Boolean

#

pointer?

#

Returns:

  • (Boolean)


92
93
94
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 92

def pointer?(this_lecture)
  @dataset_from_the_file_lecture_information[this_lecture]
end

#previous_semester?(i = @this_semester) ⇒ Boolean

#

previous_semester?

#

Returns:

  • (Boolean)


164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 164

def previous_semester?(i = @this_semester)
  case i
  when :first_semester
    :first_semester
  when :second_semester
    :first_semester
  when :third_semester
    :second_semester
  when :fourth_semester
    :third_semester
  when :fifth_semester
    :fourth_semester
  when :sixth_semester
    :fifth_semester
  end
end

#reportObject

#

report (report tag)

#


240
241
242
243
244
245
246
247
248
249
250
251
252
253
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 240

def report
  total_n_ects_points = 0
  @hash_storing_the_subsections.each_pair {|this_semester, inner_hash|
    n_ects_in_this_semester = inner_hash.map {|a,b| b }.sum
    e orange(return_long_semester_name(this_semester))+' '+
      colourize_ects_points(n_ects_in_this_semester.to_s+' ECTS points')
    inner_hash.each_pair {|a, n_ects|
      total_n_ects_points += n_ects
      e '  '+royalblue(a.ljust(90))+
        ' '+colourize_ects_points(n_ects.to_s+' ECTS')
    }
  }
  e colourize_ects_points("#{total_n_ects_points} ECTS")
end

#resetObject

#

reset (reset tag)

#


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 41

def reset
  super()
  # ======================================================================= #
  # === @dataset_from_the_file_lecture_information
  # ======================================================================= #
  @dataset_from_the_file_lecture_information = dataset_from_the_file_lecture_information
  # ======================================================================= #
  # === @all_lectures_from_the_curriculum
  # ======================================================================= #
  @all_lectures_from_the_curriculum = return_lectures_from_bachelor_vektor_curriculum
  # ======================================================================= #
  # === @steop_lectures
  # ======================================================================= #
  @steop_lectures = []
  # ======================================================================= #
  # === @hash_storing_the_subsections
  # ======================================================================= #
  @hash_storing_the_subsections = {}
  @hash_storing_the_subsections[:first_semester]  = {}
  @hash_storing_the_subsections[:second_semester] = {}
  @hash_storing_the_subsections[:third_semester]  = {}
  @hash_storing_the_subsections[:fourth_semester] = {}
  @hash_storing_the_subsections[:fifth_semester]  = {}
  @hash_storing_the_subsections[:sixth_semester]  = {}
  # ======================================================================= #
  # === @this_semester
  # ======================================================================= #
  @this_semester = :first_semester
end

#return_array_of_semesters_where_this_amount_of_ects_points_would_fit(i) ⇒ Object

#

return_array_of_semesters_where_this_amount_of_ects_points_would_fit

Return into which semesters it may fit.

#


186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 186

def return_array_of_semesters_where_this_amount_of_ects_points_would_fit(i)
  _ = []
  if (sum_of_ects_points_in(:first_semester)+i <= 30)
    _ << :first_semester
  end
  if (sum_of_ects_points_in(:second_semester)+i <= 30)
    _ << :second_semester
  end
  if (sum_of_ects_points_in(:third_semester)+i <= 30)
    _ << :third_semester
  end
  if (sum_of_ects_points_in(:fourth_semester)+i <= 30)
    _ << :fourth_semester
  end
  if (sum_of_ects_points_in(:fifth_semester)+i <= 30)
    _ << :fifth_semester
  end
  if (sum_of_ects_points_in(:sixth_semester)+i <= 30)
    _ << :sixth_semester
  end
  _
end

#return_long_semester_name(i) ⇒ Object

#

return_long_semester_name

#


113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 113

def return_long_semester_name(i)
  case i
  when :first_semester
    'First semester'
  when :second_semester
    'Second semester'
  when :third_semester
    'Third semester'
  when :fourth_semester
    'Fourth semester'
  when :fifth_semester
    'Fifth semester'
  when :sixth_semester
    'Sixth semester'
  end
end

#runObject

#

run (run tag)

#


258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 258

def run
  _ = read_file_with_default_encoding(FILE_BACHELOR_VEKTOR_CURRICULUM)
  use_this_regex = /STEOP START\n([=öüäa-zA-Z.,# 0-9\n()]*)STEOP END/ # See: http://rubular.com/r/0cA9ywfSHy
  scanned = _.scan(use_this_regex).flatten.first.split("\n").select {|line|
    line.include? 'ECTS'
  }
  @steop_lectures = scanned.map {|inner_line|
    entry = inner_line.squeeze(' ')
    if entry.start_with? '# '
      entry[0, 2] = ''
    end
    if entry.include? '#'
      entry = entry[0 .. entry.index('#')-1]
    end
    entry.strip
  }
  sort_the_lectures
  fill_the_hash_with_subsections
end

#sort_the_lecturesObject

#

sort_the_lectures

#


74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 74

def sort_the_lectures
  # ======================================================================= #
  # The first sorting-round will move all steop-lectures on top.
  # ======================================================================= #
  array = []
  @all_lectures_from_the_curriculum.each {|this_lecture|
    if @steop_lectures.include? this_lecture
      array.prepend this_lecture
    else 
      array << this_lecture
    end
  }
  @all_lectures_from_the_curriculum = array
end

#which_semester?Boolean

#

which_semester?

#

Returns:

  • (Boolean)


99
100
101
# File 'lib/studium/utility_scripts/semesterplaner.rb', line 99

def which_semester?
  @this_semester
end