Class: Studium::Wochenplanung

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

Overview

Studium::Wochenplanung

Constant Summary collapse

GENERATE_SPREADSHEET =
#

GENERATE_SPREADSHEET

#
false
USE_THIS_REGEX =
#

USE_THIS_REGEX

#
/(\d\d:\d\d-\d\d:\d\d)/
SHALL_WE_DEBUG =
#

SHALL_WE_DEBUG

#
false
WOCHENTAGE_DIRECTORY =
#

WOCHENTAGE_DIRECTORY

#
"#{::Studium.yaml_directory?}week/"
ALL_WEEKDAYS =
#

ALL_WEEKDAYS

#
Dir[WOCHENTAGE_DIRECTORY+'*.yml'].select {|entry|
  modified_entry = File.basename(entry).delete_suffix('.yml')
  if modified_entry.include?('_')
    modified_entry = modified_entry.split('_').last
  end
  Studium.array_english_weekdays?.include?(modified_entry.capitalize)
}

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

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) ⇒ Wochenplanung

#

initialize

#


64
65
66
67
68
69
70
71
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 64

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

Instance Method Details

#available_weekdaysObject

#

available_weekdays

#


125
126
127
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 125

def available_weekdays
  Studium.available_weekdays
end

#can_use_spreadsheet?Boolean

#

can_use_spreadsheet?

#

Returns:

  • (Boolean)


216
217
218
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 216

def can_use_spreadsheet?
  CAN_USE_SPREADSHEET
end

#consider_generating_spreadsheet_fileObject

#

consider_generating_spreadsheet_file

#


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
259
260
261
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 223

def consider_generating_spreadsheet_file
  if can_use_spreadsheet? and GENERATE_SPREADSHEET
    store_here = '/Wochenplanung_'+Studium.today?+'.xls'
    # Create the rows to be inserted
    the_weekdays = ['']+Studium.wochentage?
    opn; e 'Next generating a spreadsheet file at `'+sfile(store_here)+'`.'
    Spreadsheet.client_encoding = ::Studium.main_encoding?
    book = Spreadsheet::Workbook.new
    # Create the worksheet
    book.create_worksheet name: 'Wochenplanung'
    sheet = book.worksheet(0)
    sheet.insert_row(1, the_weekdays)
    format = Spreadsheet::Format.new :color => :green,
                                     :weight => :bold,
                                     :size => 13
    sheet.row(1).default_format = format
    sheet.insert_row(2, ['Uhrzeit'])
    sheet.row(2).default_format = Spreadsheet::Format.new(
      weight: :bold,
      size:   11
    )
    sheet.insert_row( 4, ['08:00-09:00'])
    sheet.insert_row( 5, ['09:00-10:00'])
    sheet.insert_row( 6, ['10:00-11:00'])
    sheet.insert_row( 7, ['11:00-12:00'])
    sheet.insert_row( 8, ['12:00-13:00'])
    sheet.insert_row( 9, ['13:00-14:00'])
    sheet.insert_row(10, ['14:00-15:00'])
    sheet.insert_row(11, ['15:00-16:00'])
    sheet.insert_row(12, ['16:00-17:00'])
    book.write(store_here)
    # ===================================================================== #
    # === Tap into class Open next
    # ===================================================================== #
    if Object.const_defined? :Open
      Open.in_editor(store_here) if Open.respond_to? :in_editor
    end
  end
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


90
91
92
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 90

def input?
  @input
end

#load_weekdaysObject

#

load_weekdays

#


106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 106

def load_weekdays
  ALL_WEEKDAYS.each {|location|
    name_of_the_weekday = File.basename(location).gsub(/\.yml$/,'')
    begin
      dataset = YAML.load_file(location)
    rescue ArgumentError => error
      opne 'The file at `'+sfile(location)+'` has a syntax error.'
      pp error
    end
    # ===================================================================== #
    # Here we will add the different weekdays into our @hash_wochentage.
    # ===================================================================== #
    @hash_wochentage[name_of_the_weekday] = dataset
  }
end

#resetObject

#

reset (reset tag)

#


76
77
78
79
80
81
82
83
84
85
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 76

def reset
  super()
  set_input
  infer_the_namespace
  # ======================================================================= #
  # === @hash_wochentage
  # ======================================================================= #
  @hash_wochentage = {}
  try_to_require_the_open_gem
end

#runObject

#

run (run tag)

#


132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 132

def run
  load_weekdays
  colour = :steelblue # We use this colour for now.
  the_days = Studium::GERMAN_WEEK_NAMES.reject {|key, value| value == 'Sonntag' }
  cliner # Initial cliner.
pp input?
  if available_weekdays.include? input? # This is the case when the user did input e. g. "dienstag".
    the_days = the_days.select {|key, value|
      value.downcase == input?
    }
  end
  the_days.each_value {|week_day|
    downcased = week_day.downcase
    colourized_weekday = ::Colours.send(colour, week_day+':')
    e colourized_weekday
    e
    if @hash_wochentage.has_key?(downcased)
      dataset = @hash_wochentage[downcased]
      # =================================================================== #
      # Next, we must sort it based on the key.
      # =================================================================== #
      if dataset # Will be false if we have no date there.
        dataset = Hash[dataset.sort_by {|key, value| Time.parse(key) }]
        pp dataset if SHALL_WE_DEBUG
        dataset.each_pair {|datum, course|
          result = '  '+crimson(datum)+' -> '
          # =============================================================== #
          # First, handle Arrays for the given day.
          # =============================================================== #
          if course.is_a? Array
            course.map! {|entry|
              # =========================================================== #
              # Colourize "Prüfung" in darkred.
              # =========================================================== #
              if entry.include? 'Prüfung'
                entry.gsub!(/(Prüfung)/, darkred('\1'))
              end
              # =========================================================== #
              # Next, assume that we handle a specific time of the given
              # day.
              # =========================================================== #
              if entry.count(':') > 1 and entry.include? '-'
                entry =~ USE_THIS_REGEX
                entry.gsub!(USE_THIS_REGEX, lightgreen('\1'))
              end
              entry
            }
            course.each_with_index {|entry, index| # Padded.
              result << N+'                ' unless index == 0
              result << slateblue(entry)
            }
          else
            # =============================================================== #
            # Next add the course, but first check if the course has "Uhrzeit"
            # information. If so then we will colourize it.
            # =============================================================== #
            if course.count(':') > 1 and course.include? '-'
              course =~ USE_THIS_REGEX
              course.gsub!(USE_THIS_REGEX, lightgreen('\1'))
            end
            result << slateblue(course)
          end
          if datum == today? # Is today! Colourize in red.
            result.prepend(red('TODAY '))
          end
          e result
        }
      end
      cliner
    end
  }
  consider_generating_spreadsheet_file
end

#set_input(i = '') ⇒ Object

#

set_input

#


97
98
99
100
101
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 97

def set_input(i = '')
  i = i.first if i.is_a? Array
  i = i.to_s.dup # We want a String.
  @input = i
end

#today?Boolean

#

today?

#

Returns:

  • (Boolean)


209
210
211
# File 'lib/studium/utility_scripts/wochenplanung/wochenplanung.rb', line 209

def today?
  Studium.today?
end