Class: Studium::PreparatoryMeetings

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

Overview

Studium::PreparatoryMeetings

Constant Summary collapse

REGEX_FOR_NOT_OPTIMAL_UHR_POSITION =
#

REGEX_FOR_NOT_OPTIMAL_UHR_POSITION

#
/\d{1,2}:\d{1,2}-\d{1,2}:\d{1,2},/
N_LJUST_NAME_OF_THE_LECTURE =
#

N_LJUST_NAME_OF_THE_LECTURE

#
92
UNICODE_LOCATION =
#

UNICODE_LOCATION

#
"\u27B4".encode('utf-8')

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

#

initialize

#


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 43

def initialize(
    i           = nil,
    run_already = true
  )
  reset
  set_commandline_arguments(i)
  if block_given?
    yielded = yield
    case yielded
    # ===================================================================== #
    # === :do_not_report_anything
    # ===================================================================== #
    when :do_not_report_anything
      @internal_hash[:do_report] = false
    end
  end
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

Studium::PreparatoryMeetings[]

#


290
291
292
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 290

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

Instance Method Details

#consider_applying_a_filter_to_the_main_datasetObject

#

consider_applying_a_filter_to_the_main_dataset

This will filter on the main @dataset.

#


231
232
233
234
235
236
237
238
239
240
241
242
243
244
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 231

def consider_applying_a_filter_to_the_main_dataset
  if limit_showing_vorbesprechungs_termine_up_to_this_day?
    filter_on = Time.parse(limit_showing_vorbesprechungs_termine_up_to_this_day?)+
                (ONE_DAY - 1)
    @dataset.select! {|name_of_the_lecture, inner_dataset|
      vorbesprechungs_time = inner_dataset['vorbesprechung']
      if vorbesprechungs_time.include? ','
        vorbesprechungs_time = vorbesprechungs_time.split(',').first
      end
      vorbesprechungs_time = Time.parse(vorbesprechungs_time)
      vorbesprechungs_time < filter_on # Filter it away.
    }
  end
end

#do_report?Boolean

#

do_report?

#

Returns:

  • (Boolean)


274
275
276
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 274

def do_report?
  @internal_hash[:do_report]
end

#limit_showing_vorbesprechungs_termine_up_to_this_day?Boolean

#

limit_showing_vorbesprechungs_termine_up_to_this_day?

#

Returns:

  • (Boolean)


131
132
133
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 131

def limit_showing_vorbesprechungs_termine_up_to_this_day?
  @internal_hash[:limit_showing_vorbesprechungs_termine_up_to_this_day]
end
#

menu (menu tag)

#


99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 99

def menu(
    i = commandline_arguments?
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # case tag
    # ===================================================================== #
    # === vor "until 05.10.2018"
    # ===================================================================== #
    when /until (\d{1,2}\.\d{1,2}\.\d{4})/
      set_limit_to_this_day($1.to_s.dup)
    # ===================================================================== #
    # === vorbesprechung --help
    # ===================================================================== #
    when /-?-?help/i
      show_help
      exit
    end
  end
end

#reportObject

#

report

#


249
250
251
252
253
254
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 249

def report
  # ======================================================================= #
  # We should sort this within the following method.
  # ======================================================================= #
  show_these_preparatory_meetings(@dataset)
end

#resetObject

#

reset (reset tag)

#


65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 65

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @internal_hash[:limit_showing_vorbesprechungs_termine_up_to_this_day]
  # ======================================================================= #
  @internal_hash[:limit_showing_vorbesprechungs_termine_up_to_this_day] = nil
  # ======================================================================= #
  # === :do_report
  # ======================================================================= #
  @internal_hash[:do_report] = true
  # ======================================================================= #
  # === @dataset_from_the_file_lecture_information
  # ======================================================================= #
  @dataset_from_the_file_lecture_information =
    return_dataset_from_the_file_lecture_information
  select_all_preliminary_meetings_entries
end

#return_the_preparatory_meetingsObject

#

return_the_preparatory_meetings

#


259
260
261
262
263
264
265
266
267
268
269
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 259

def return_the_preparatory_meetings
  matches = @dataset.map {|name_of_the_lecture, inner_hash_dataset|
    _ = inner_hash_dataset[:preparatory_meeting]
    _ = _.first if _.is_a? Array
    if _.include? ','
      new_entry = _.split(',').first
      _ = remove_leading_weekdays(new_entry)
    end
  }
  return matches
end

#runObject

#

run (run tag)

#


281
282
283
284
285
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 281

def run
  menu
  consider_applying_a_filter_to_the_main_dataset
  report if do_report?
end

#select_all_preliminary_meetings_entriesObject

#

select_all_preliminary_meetings_entries

The purpose of this method is to select all entries that have the String key called ‘vorbesprechung’.

#


90
91
92
93
94
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 90

def select_all_preliminary_meetings_entries
  @dataset = @dataset_from_the_file_lecture_information.select {|name, dataset|
    dataset.has_key? :preparatory_meeting
  }
end

#set_limit_to_this_day(i) ⇒ Object

#

set_limit_to_this_day

#


124
125
126
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 124

def set_limit_to_this_day(i)
  @internal_hash[:limit_showing_vorbesprechungs_termine_up_to_this_day] = i
end

#show_helpObject

#

show_help (help tag)

To invoke this method, try:

vor --help
#


143
144
145
146
147
148
149
150
151
152
153
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 143

def show_help
  help_string = <<-EOF

The following options are available and documented:

vor "until 05.10.2018" # filter preliminatory meeting dates
                       # up until (and including) that day

EOF
  e help_string
end

#show_these_preparatory_meetings(i) ⇒ Object

#

show_these_preparatory_meetings

The input to this method should be a Hash.

#


160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
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
# File 'lib/studium/utility_scripts/preparatory_meetings/preparatory_meetings.rb', line 160

def show_these_preparatory_meetings(i)
  e
  opnn; e "Folgende #{sfancy(i.keys.size)}"\
          " Vorbesprechungstermine sind fixiert:"
  e
  # ======================================================================= #
  # We must first sort it by time.
  # ======================================================================= #
  sorted = i.sort_by {|name_of_the_lecture, hash_dataset|
    date_of_vorbesprechung = hash_dataset[:preparatory_meeting]
    if date_of_vorbesprechung.is_a? Array
      date_of_vorbesprechung = date_of_vorbesprechung.first
    end
    if date_of_vorbesprechung.include?(',')
      date_of_vorbesprechung = date_of_vorbesprechung.split(',').first 
    end
    modified_date_of_vorbesprechung = date_of_vorbesprechung.delete(',')
    if modified_date_of_vorbesprechung.include? 'Ort'
      modified_date_of_vorbesprechung = modified_date_of_vorbesprechung.split('Ort').first.strip
    end
    parsed_date = Time.parse(modified_date_of_vorbesprechung)
    parsed_date
  }
  # ======================================================================= #
  # Next, display these "vorbesprechungs"-dates:
  # ======================================================================= #
  sorted.each {|name_of_the_lecture, hash_dataset|
    date_of_vorbesprechung = hash_dataset[:preparatory_meeting]
    if date_of_vorbesprechung.is_a? Array
      date_of_vorbesprechung = date_of_vorbesprechung.first
    end
    unless date_of_vorbesprechung.end_with? ' Uhr'
      if date_of_vorbesprechung .frozen?
        date_of_vorbesprechung = date_of_vorbesprechung.dup
      end
      if date_of_vorbesprechung =~ REGEX_FOR_NOT_OPTIMAL_UHR_POSITION
        date_of_vorbesprechung.sub!(
          /(\d{1,2}:\d{1,2}-\d{1,2}:\d{1,2}),/,
          '\1 Uhr,'
        )
      end
      date_of_vorbesprechung << ' Uhr' unless date_of_vorbesprechung.include? ' Uhr'
    end
    date_of_vorbesprechung = remove_leading_weekdays(date_of_vorbesprechung)
    weekday = return_name_of_the_weekday(date_of_vorbesprechung)
    unless date_of_vorbesprechung.include? weekday
      date_of_vorbesprechung.prepend(
        weekday.ljust(11)
      )
    end
    padded_name_of_the_lecture = name_of_the_lecture.ljust(N_LJUST_NAME_OF_THE_LECTURE)
    colourized_date_of_vorbesprechung = date_of_vorbesprechung.sub!(
      /(\d{1,2}\.\d{1,2}\.\d{4})/, springgreen('\1')+lightskyblue
    )
    # ===================================================================== #
    # And finally, report our results to the user, on the commandline.
    # ===================================================================== #
    e '  '+
      slateblue(padded_name_of_the_lecture)+
      ' '+
      lightgreen("#{UNICODE_LOCATION} ")+
      lightskyblue(colourized_date_of_vorbesprechung)
  }
  e
end