Class: Studium::Moodle

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

Overview

Studium::Moodle

Constant Summary collapse

'LINKS.md'

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

#

initialize

#


39
40
41
42
43
44
45
46
47
48
# File 'lib/studium/utility_scripts/moodle/moodle.rb', line 39

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::Moodle[]

#


197
198
199
# File 'lib/studium/utility_scripts/moodle/moodle.rb', line 197

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

Instance Method Details

#
#

Returns:

  • (Boolean)


62
63
64
65
# File 'lib/studium/utility_scripts/moodle/moodle.rb', line 62

def is_this_a_registered_moodle_link_of_a_lecture_course?(i)
  remote_moodle_link = Studium.return_remote_moodle_link_of_this_lecture(i)
  !(remote_moodle_link == i) # If both are the same, then the URL is NOT registered.
end
#

menu (menu tag)

#


81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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
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
# File 'lib/studium/utility_scripts/moodle/moodle.rb', line 81

def menu(
    i = commandline_arguments?
  )
  if i.is_a? Array
    if i.empty?
      # In this case let "rf" open the unimoodle page.
      open_in_browser(:unimoodle)
    else
      i.each {|entry| menu(entry) }
    end
  else
    case i # case tag
    # ===================================================================== #
    # === moodle HERE
    #
    # This entry point handles the string-argument called 'HERE'.
    # ===================================================================== #
    when /^-?-?HERE$/i
      _ = FILE_LINKS
      if File.exist? _
        original_dataset = File.readlines(_)
        dataset = original_dataset.reject {|line|
          line.strip.start_with? '#'
        }.select {|line| # Try to find the moodle entry here.
          line =~ /moodle/ or
          line =~ /tuwel/ or # For support of TU Vienna's moodle variant.
          line =~ /learn.boku.ac.at/
        }
        if dataset.empty?
          e rev+
            tomato('We did find a file called ')+
            sfile(_)+
            tomato(' in this directory, but this')
          e tomato('file does not appear to contain any moodle-relevant content.')
          # =============================================================== #
          # Next we will obtain the number from the course, as that
          # can be used to determine the real lecture's moodle entry
          # dynamically, so we are no longer confined to a hardcoded
          # entry in the file LINKS.md:
          # =============================================================== #
          number_of_the_lva = File.basename(return_pwd)
          if number_of_the_lva.include?('_')
            number_of_the_lva = number_of_the_lva.split('_').first
          end
          keys = all_lectures?.keys
          selection = keys.select {|line| line.start_with?(number_of_the_lva) }
          if selection.empty?
            e
            e 'We will next display this file:'
            e
            cliner(colour: :lightgreen) { :unicode }
            e
            e original_dataset.map {|entry| "  #{entry}" }.join
            e
            cliner(colour: :lightgreen) { :unicode }
          else # here we know the selection is NOT empty, so we pick the first entry for now.
            first_entry = selection.first.to_s
            dataset = dataset_from_the_file_lecture_information
            pointer = dataset[first_entry]
            if pointer.has_key? :moodle
              _ = pointer[:moodle]
              _ = _.first if _.is_a? Array
              open_in_browser(_)
            else
              opne 'No moodle-entry was found for '+steelblue(first_entry)
            end
          end
        else
          # =============================================================== #
          # Since as of March 2023, we will narrow this down to the
          # top-entry only, in order to avoid batch-opening outdated
          # moodle entries.
          # =============================================================== #
          if dataset.is_a?(Array) and dataset.size > 1
            dataset = dataset.first
          end
          open_in_browser(dataset)
        end
      else # else if the file does not exist
        opne "#{rev}No file called `#{sfile(_)}#{rev}` exists in this directory."
      end
    else
      # =================================================================== #
      # Next check whether we have a registered moodle-link for that
      # lecture course.
      # =================================================================== #
      if is_this_a_registered_moodle_link_of_a_lecture_course?(_)
        open_in_browser(
          Studium.return_remote_moodle_link_of_this_lecture(_)
        )
      # =================================================================== #
      # Next check through the moodle-entry in BeautifulUrl:
      # =================================================================== #
      elsif BeautifulUrl.is_included_in_moodle?(_)
        open_in_browser(BeautifulUrl.moodle(_))
      else
        # ================================================================= #
        # Else we default towards the university of vienna moodle
        # if we have not found anything.
        # ================================================================= #
        open_uni_vienna_moodle
      end
    end
  end
end

#open_uni_vienna_moodleObject

#

open_uni_vienna_moodle

#


70
71
72
73
74
75
76
# File 'lib/studium/utility_scripts/moodle/moodle.rb', line 70

def open_uni_vienna_moodle
  if Object.const_defined?(:BeautifulUrl)
    url = BeautifulUrl[:uni_vienna_moodle]
    url = url.first if url.is_a? Array
    open_in_browser(url)
  end
end

#resetObject

#

reset (reset tag)

#


53
54
55
56
57
# File 'lib/studium/utility_scripts/moodle/moodle.rb', line 53

def reset
  super()
  infer_the_namespace
  try_to_require_the_open_gem
end

#runObject

#

run (run tag)

#


190
191
192
# File 'lib/studium/utility_scripts/moodle/moodle.rb', line 190

def run
  menu
end