Class: Studium::Semesterplaner

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

Overview

Studium::Semesterplaner

Constant Summary

Constants inherited from Base

Base::COMMON_YEAR_DAYS_IN_MONTH, Base::LEFT_PADDING, Base::NAMESPACE, Base::N_CHARACTERS_PER_LINE

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, #be_silent, #be_verbose?, #beautiful_url, #change_directory, #cheering_person, #chmod, #cliner, #colour_for_ects_points, #colourize_percentage, #convert_this_array_of_lectures_into_the_full_dataset, #copy, #course_filter, #cpruby, #create_directory, #create_file, #csv_file?, #current_month?, #current_semester?, #dataset?, #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?, #does_this_line_include_an_english_weekday?, #does_this_line_start_with_a_german_weekday?, #e, #ecomment, #editor?, #ee, #egrey, #enable_colours, #enable_colours_globally, #enable_debug, #encoding?, #english_to_german_weekday, #ensure_that_a_base_directory_exists_for_this_file, #ensure_that_the_log_directory_exists, #eparse, #esystem, #etomato, #exit_program, #extract_dd_mm_yyyy, #fetch_this_curriculum, #file_important_exams?, #file_lecture_information?, #file_passed_exams_per_month, #file_read_with_proper_encoding, #filter_away_already_answered_questions, #filter_away_invalid_questions, #filter_for_all_passed_exams, #find_corresponding_exam_topic, #from_curriculum_id_to_university, #german_date_notation, #german_weekday?, #german_weekdays?, #german_weekend_for?, #german_yes_or_no, #has_a_bachelor_and_a_master_curriculum?, #has_a_bachelor_curriculum?, #has_a_master_curriculum?, #has_lva_dates_registered?, #has_this_exam_topic_been_solved?, #has_year_entry?, #hh_mm_ss_dd_mm_yyyy, #horizontal_bar?, #html_log_directory?, #infer_the_namespace, #initialize_the_internal_hash, #internal_hash?, #is_a_master_lecture?, #is_a_registered_curriculum?, #is_a_weekday?, #is_connected_to_the_www?, #is_german_weekday?, #is_on_roebe?, #is_prüfungsimmanent?, #is_this_a_registered_exam_topic?, #is_this_a_valid_html_colour?, #is_this_day_today?, #is_this_lecture_a_practical_course?, #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, #left_arrow?, #load_yaml_dataset, #map_input_to_this_curriculum_filename, #move_file, #n_days_difference_from_today_to_this_day, #n_seconds_to_n_days, #namespace?, #no_ext_name, #no_file_exists_at, #number_to_month, #obtain, #obtain_lectures_from_this_curriculum, #open_in_browser, #open_in_editor, #opne, #opnerev, #opnn, #padded_current_month?, #parse_dd_mm_yyyy, #parse_this_line_for_date_entry, #path_to_exam_topic?, #project_yaml_directory?, #rds, #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, #require_open_uri, #reset_the_internal_state, #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, #right_arrow?, #rinstall2, #roebe_exam_directory?, #roebe_path_to_file_lecture_information?, #ruby_src_dir_at_home?, #sanitize_this_topic, #sanitize_url, #select_for_prüfungsimmanente_LVs, #select_lectures_with_this_key, #set_be_verbose, #set_this_cd_alias_to, #set_xorg_buffer, #sfancy, #shall_we_make_use_of_unicode_symbols?, #show_todays_date, #silently_open_in_browser, #simp, #sort_these_lecture_names_by_time, #spacer, #studium_log_dir?, #this_month_has_n_days?, #total_ects_points_passed, #translate_dd_mm_yyyy_to_weekday, #try_to_require_html_templates, #try_to_require_the_open_gem, #try_to_require_the_rcfiles, #try_to_require_the_verbose_truth_gem, #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, #yaml_dir?, #yellowrev, #yes_or_no

Methods included from RunmodeModule

#commandline?, #runmode?, #set_commandline_mode, #set_runmode, #set_www_mode, #www_mode?

Methods included from CommandlineArgumentsModule

#commandline_arguments?, #commandline_arguments_joined, #commandline_arguments_with_hyphens?, #commandline_arguments_without_leading_hyphens?, #first_argument?, #first_non_hyphen_argument?, #reset_the_commandline_arguments, #set_commandline_arguments, #set_first_argument

Methods included from HtmlColoursModule

#aquamarine, #blanchedalmond, #brown, #cadetblue, #chocolate, #coral, #cornflowerblue, #crimson, #cyan, #darkblue, #darkcyan, #darkgoldenrod, #darkgreen, #darkkhaki, #darkolivegreen, #darkorange, #darkred, #darkseagreen, #darkslateblue, #darkslategray, #darkturquoise, #deepskyblue, #firebrick, #forestgreen, #gold, #goldenrod, #green, #grey, #indianred, #khaki, #lavender, #lawngreen, #lightblue, #lightcoral, #lightgreen, #lightred, #lightseagreen, #lightskyblue, #lightslategray, #lightslategrey, #lime, #limegreen, #mediumaquamarine, #mediumblue, #mediumpurple, #mediumseagreen, #mediumslateblue, #mediumspringgreen, #mediumturquoise, #mediumvioletred, #mintcream, #moccasin, #oldlace, #olive, #olivedrab, #orange, #orangered, #orchid, #palegoldenrod, #palegreen, #paleturquoise, #palevioletred, #peru, #plum, #powderblue, #red, #rosybrown, #royalblue, #saddlebrown, #salmon, #sandybrown, #seagreen, #sienna, #silver, #skyblue, #slateblue, #slategray, #springgreen, #steelblue, #tan, #teal, #thistle, #tomato, #turquoise, #violet, #whitesmoke, #yellow, #yellowgreen

Methods included from Colours

#bold_blue, #bold_red, #bold_yellow, cadetblue, #cadetblue, #chartreuse, #coral, coral, #cornflowerblue, cornflowerblue, crimson, #cyan, cyan, darkgoldenrod, #darkgoldenrod, #darkgray, darkgreen, darkolivegreen, darkseagreen, #darkslateblue, darkslateblue, #darkslategray, darkslategray, #darkturquoise, darkturquoise, #deepskyblue, deepskyblue, default_colour, #dimgray, disable_colours, #dodgerblue, e, #efancy, enable_colours, #erev, #ewarn, #forestgreen, forestgreen, gold, #goldenrod, goldenrod, #grey, grey, indianred, #indianred, khaki, #khaki, lawngreen, #lawngreen, lightblue, lightgreen, lightsalmon, #lightseagreen, lightseagreen, lightskyblue, #lightskyblue, #lightslategray, lightslategray, #lightsteelblue, lime, #lime, limegreen, #limegreen, #mediumaquamarine, mediumaquamarine, #mediumorchid, #mediumpurple, mediumpurple, #mediumseagreen, mediumseagreen, #mediumslateblue, mediumslateblue, #mediumspringgreen, mediumspringgreen, #mediumturquoise, mediumturquoise, #oldlace, olive, #olive, olivedrab, #olivedrab, orange, orangered, #orchid, orchid, palegreen, #palegreen, paleturquoise, #paleturquoise, palevioletred, #papayawhip, peru, #peru, plum, #plum, #powderblue, powderblue, rev, #rev?, royalblue, saddlebrown, #saddlebrown, #sandybrown, sandybrown, sdir, #sdir, seagreen, #seagreen, sfancy, #sfancy, sfile, #sfile, #simp, simp, #skyblue, skyblue, slateblue, #slategray, slategray, springgreen, #springgreen, #steelblue, steelblue, #swarn, swarn, #tan, tan, teal, #teal, #tomato, tomato, turquoise, use_colours?, use_this_colour_for_exam_answers, use_this_colour_for_exam_questions, #yellow, yellowgreen, #yellowgreen

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/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 = ARGV) ⇒ Object

#

Studium::Semesterplaner[]

#


303
304
305
# File 'lib/studium/utility_scripts/semesterplaner/semesterplaner.rb', line 303

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

Instance Method Details

#colourize_ects_points(i) ⇒ Object

#

colourize_ects_points

#


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

def colourize_ects_points(i)
  lightgreen(i)
end

#fill_the_hash_with_subsectionsObject

#

fill_the_hash_with_subsections

#


234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# File 'lib/studium/utility_scripts/semesterplaner/semesterplaner.rb', line 234

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

#


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

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)


151
152
153
154
155
156
157
# File 'lib/studium/utility_scripts/semesterplaner/semesterplaner.rb', line 151

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/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)


184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/studium/utility_scripts/semesterplaner/semesterplaner.rb', line 184

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)

#


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

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} 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/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.

#


208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
# File 'lib/studium/utility_scripts/semesterplaner/semesterplaner.rb', line 208

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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/studium/utility_scripts/semesterplaner/semesterplaner.rb', line 113

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

#runObject

#

run (run tag)

#


280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
# File 'lib/studium/utility_scripts/semesterplaner/semesterplaner.rb', line 280

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/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/semesterplaner.rb', line 99

def which_semester?
  @this_semester
end