Class: Studium::ExpandTimeRange

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

Overview

Studium::ExpandTimeRange

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect

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

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

#

initialize

#


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

def initialize(
    i           = nil,
    run_already = true
  )
  reset
  set_input(i)
  # ======================================================================= #
  # === Handle blocks
  # ======================================================================= #
  if block_given?
    yielded = yield
    case yielded
    # === :disable_colours
    when :disable_colours
      disable_colours
    when :do_not_report_anything
      do_not_report_anything
    end
  end
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

Studium::ExpandTimeRange[]

#


391
392
393
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 391

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

Instance Method Details

#array_to_report?Boolean Also known as: array?, array

#

array_to_report?

#

Returns:

  • (Boolean)


352
353
354
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 352

def array_to_report?
  @array_to_report
end

#do_not_report_anythingObject

#

do_not_report_anything

#


103
104
105
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 103

def do_not_report_anything
  @report_the_result = false
end

#ensure_proper_trailing_year(i) ⇒ Object

#

ensure_proper_trailing_year

We will try to ensure that there is a proper trailing year definition, to conform to the “dd.mm.yyyy” format which is commonly used in europe.

#


213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 213

def ensure_proper_trailing_year(i)
  _ = i.dup
  unless _ =~ /\.\d{4}$/ # Unless it ends with a proper year
    # ===================================================================== #
    # First check on 'dd.mm.yy' format:
    # ===================================================================== #
    if _ =~ /\d{1,2}\.\d{1,2}\.\d{2}/
      _.insert(_.rindex('.')+1, '20') # For example, for the year "2018".
    else
      _ << '.' unless _.end_with? '.'
      _ << current_year?
    end
  end
  return _
end

#expand_and_show_the_dates_in_betweenObject

#

expand_and_show_the_dates_in_between

#


342
343
344
345
346
347
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 342

def expand_and_show_the_dates_in_between
  @array_to_report = return_array_of_days_between_this_start_and_this_end_range(
    @start_day, @end_day
  )
  report(@array_to_report)
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


151
152
153
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 151

def input?
  @input
end

#properly_space_out_date_format(i) ⇒ Object

#

properly_space_out_date_format

This method will mostly convert input such as “2.11.2018” towards “02.11.2018”.

#


198
199
200
201
202
203
204
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 198

def properly_space_out_date_format(i)
  _ = i.to_s.dup
  if _ =~ /^\d{1}\./
    _.prepend '0' # Prepend a leading '0' in these cases.
  end
  return _
end

#remove_weekends_from_this_array(i) ⇒ Object

#

remove_weekends_from_this_array

This method will remove all weekend-days from the passed-in Array.

#


373
374
375
376
377
378
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 373

def remove_weekends_from_this_array(i)
  i.reject {|entry|
    weekday = return_weekday_of(entry)
    (weekday == 'Saturday') or (weekday == 'Sunday')
  }
end

#report(this_array = @array_to_report) ⇒ Object

#

report (report tag)

#


239
240
241
242
243
244
245
246
247
248
249
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
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 239

def report(
    this_array = @array_to_report
  )
  @result = ''.dup # We also store in this variable.
  if @report_the_result
    unless this_array.empty?
      e; this_array.each {|entry|
        weekday_entry = weekday_at(entry)
        padded_and_colourized_weekday = turquoise(
          weekday_entry.to_s.ljust(10)
        )
        result = ''.dup
        if @format_for_use_in_the_file_lecture_information
          result << mediumpurple(' - ')+
                    return_colourized_quote_character
        else
          result << '  '
        end
        result << "#{padded_and_colourized_weekday} "\
                  "#{steelblue(entry)}"
        if @append_this_string
          unless @append_this_string.start_with? ', '
            @append_this_string.prepend(', ')
          end
          result << olivedrab(
            @append_this_string
          )
        end
        if @format_for_use_in_the_file_lecture_information
          result << return_colourized_quote_character
        end
        result << "\n"
        @result << result
        print result
      }; e
    end
  end
end

#resetObject

#

reset (reset tag)

#


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
90
91
92
93
94
95
96
97
98
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 64

def reset
  super()
  # ======================================================================= #
  # === @namespace
  # ======================================================================= #
  @namespace = NAMESPACE
  # ======================================================================= #
  # === @array_to_report
  # ======================================================================= #
  @array_to_report = []
  # ======================================================================= #
  # Define variables to keep track of our start and end day next.
  # ======================================================================= #
  @start_day = nil
  # ======================================================================= #
  # === @end_day
  # ======================================================================= #
  @end_day   = nil
  # ======================================================================= #
  # === @format_for_use_in_the_file_lecture_information
  #
  # If the following variable is set to true, then the generated display
  # will conform to a yaml format (an Array), holding the time-data
  # points as string.
  # ======================================================================= #
  @format_for_use_in_the_file_lecture_information = true
  # ======================================================================= #
  # === @append_this_string
  # ======================================================================= #
  @append_this_string = ', 09:00-18:00'
  # ======================================================================= #
  # === @report_the_result
  # ======================================================================= #
  @report_the_result = true
end

#result?Boolean

#

result?

#

Returns:

  • (Boolean)


232
233
234
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 232

def result?
  @result
end

#return_array_of_days_between_this_start_and_this_end_range(a = @start_day, b = @end_day) ⇒ Object

#

return_array_of_days_between_this_start_and_this_end_range

This is the method that will return all days between the specified start-point and end-point.

#


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
325
326
327
328
329
330
331
332
333
334
335
336
337
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 284

def return_array_of_days_between_this_start_and_this_end_range(
    a = @start_day,
    b = @end_day
  )
  array = []
  # ======================================================================= #
  # First, split it up into components - day, month year. Note that we
  # assume that @start_day and @end_day have already been sanitized
  # prior to this.
  # ======================================================================= #
  splitted1 = a.split('.')
  day1      = splitted1.first
  month1    = splitted1[1].to_i
  year      = splitted1[2]
  # ======================================================================= #
  # Determine how many days we shall be running.
  # ======================================================================= #
  diff      = Time.parse(b) - Time.parse(a)
  n_days    = ((diff / ONE_DAY).ceil + 1)
  counter   = 0
  n_days.times {
    day_to_use   = day1.to_i+counter.to_i
    month_to_use = month1
    n_days_in_this_month = this_month_has_n_days?(month_to_use)
    # ===================================================================== #
    # If we have already "run over" in that month, we will change
    # to use a new month. We also have to keep track whether this
    # may be a new year or not.
    # ===================================================================== #
    if day_to_use > n_days_in_this_month.to_i 
      day_to_use = 1
      day1 = 1
      month1 += 1
      month_to_use += 1
      counter = 0
    end
    counter += 1
    # ===================================================================== #
    # Must format the months next, from e. g. "1" to "01".
    # ===================================================================== #
    month_to_use = month_to_use.to_s.rjust(2,'0')
    array << properly_space_out_date_format(
      day_to_use.to_i.to_s+'.'+
      month_to_use.to_s+'.'+
      year.to_s
    )
  }
  # ======================================================================= #
  # Next, we can remove weekends from that Array. Most lectures will
  # not occur on saturday or sunday.
  # ======================================================================= #
  array = remove_weekends_from_this_array(array)
  return array
end

#return_colourized_quote_character(use_this_colour = :darkslateblue) ⇒ Object

#

return_colourized_quote_character

The first argument shall be the colour that is to be used.

#


362
363
364
365
366
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 362

def return_colourized_quote_character(
    use_this_colour = :darkslateblue
  )
  send(use_this_colour, '"')
end

#runObject

#

run (run tag)

#


383
384
385
386
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 383

def run
  try_to_determine_the_start_day_and_the_end_day
  expand_and_show_the_dates_in_between
end

#set_end_day(i) ⇒ Object

#

set_end_day

#


174
175
176
177
178
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 174

def set_end_day(i)
  i = ensure_proper_trailing_year(i)
  i = properly_space_out_date_format(i)
  @end_day = i
end

#set_input(i = '') ⇒ Object

#

set_input

Example for different input:

" Donnerstag 04.10. bis Montag 15.10.2018 jeweils 9.30 bis 17.30 Uhr"
#


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/expand_time_range.rb', line 115

def set_input(i = '')
  i = i.first if i.is_a? Array
  i = i.to_s.dup.strip
  i.chop! if i.end_with? ','
  i.sub!(/ bis /,'-') if i.include? ' bis '
  i = remove_weeknames_from(i)
  i.strip!
  if i.include? ' - '
    i.sub!(/ - /, '-')
  end
  if i.include? '.- '
    i.sub!(/\.- /,'.-')
  end
  if i.include? ' until '
    i.sub!(/ until /,'-')
  end
  if i.include?('jeweils') and i.include?('Uhr')
    splitted = i.split('jeweils').map(&:strip)
    # ===================================================================== #
    # The second part is the part that we can use for
    # @append_this_string.
    # ===================================================================== #
    new_time = splitted.last.tr('.',':').sub(/ Uhr/,'').sub(/ bis /,'-')
    if new_time =~ /^\d{1}:/
      new_time.prepend('0')
    end
    @append_this_string = new_time
    i = splitted.first
  end
  i.delete!(' ') # Trying this since as of 02.07.2018
  @input = i
end

#set_start_day(i) ⇒ Object

#

set_start_day

Note that we will also ensure that the year is in a correct format here, aka if we have a year such as '18' to become '2018' instead.

#


186
187
188
189
190
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 186

def set_start_day(i)
  i = ensure_proper_trailing_year(i)
  i = properly_space_out_date_format(i)
  @start_day = i
end

#try_to_determine_the_start_day_and_the_end_dayObject

#

try_to_determine_the_start_day_and_the_end_day

#


158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/studium/utility_scripts/expand_time_range.rb', line 158

def try_to_determine_the_start_day_and_the_end_day
  _ = @input
  if _.include? '-'
    # ===================================================================== #
    # In this case, it should be simple to determine the start and
    # end day. Simply split on the '-' character.
    # ===================================================================== #
    splitted = _.split('-')
    set_start_day(splitted[0])
    set_end_day(splitted[1])
  end
end