Class: Studium::Exams::PushSolvedQuestionsOnTop

Inherits:
Base
  • Object
show all
Defined in:
lib/studium/exams/push_solved_questions_on_top.rb

Overview

Studium::Exams::PushSolvedQuestionsOnTop

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

#

initialize

#


33
34
35
36
37
38
39
40
41
42
# File 'lib/studium/exams/push_solved_questions_on_top.rb', line 33

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

Studium::Exams::PushSolvedQuestionsOnTop[]

#


180
181
182
# File 'lib/studium/exams/push_solved_questions_on_top.rb', line 180

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

Instance Method Details

#determine_on_which_file_to_work_onObject

#

determine_on_which_file_to_work_on

This method will determine on which file this class will be working on.

#


89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/studium/exams/push_solved_questions_on_top.rb', line 89

def determine_on_which_file_to_work_on
  first_argument = first_argument?
  if first_argument.nil?
    opnn; e 'Please provide a valid exam topic, as input to this class.'
    exit
  else
    location = return_file_associated_with_this_exam_topic(first_argument)
    # ===================================================================== #
    # Obtain the full path.
    # ===================================================================== #
    @work_on_this_file = "#{directory_to_the_exam_topics?}#{location}"
  end
end

#do_modify_this_dataset(i = @dataset) ⇒ Object

#

do_modify_this_dataset

This method is the one that will actually modify the dataset at hand.

We will simply build a new file, by moving all lines ending with “ []n” to another array.

#


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
# File 'lib/studium/exams/push_solved_questions_on_top.rb', line 138

def do_modify_this_dataset(i = @dataset)
  _ = ''.dup
  hash = {}
  i.each {|this_line|
    stripped_line = this_line.rstrip
    if stripped_line.start_with?('#') or
       stripped_line.empty? or
       this_line.strip.empty?
       this_line.empty?
      # This is a comment or a newline, then.
      unless hash.has_key? :comments
        hash[:comments] = []
      end
      hash[:comments] << stripped_line
    elsif stripped_line.end_with? ' []'
      # This is a solved question, then.
      unless hash.has_key? :solved_questions
        hash[:solved_questions] = []
      end
      hash[:solved_questions] << stripped_line
    else # Else we assume this must be an unsolved question.
      unless hash.has_key? :unsolved_questions
        hash[:unsolved_questions] = []
      end
      hash[:unsolved_questions] << stripped_line
    end
  }
  hash[:comments].each {|line|
    _ << "#{line}\n"
  }
  hash[:solved_questions].each {|line|
    _ << "#{line}\n"
  }
  hash[:unsolved_questions].each {|line|
    _ << "#{line}\n"
  }
  overwrite_the_existing_file_with_this_content(_)
end

#overwrite_the_existing_file_with_this_content(content) ⇒ Object

#

overwrite_the_existing_file_with_this_content

This method will overwrite the old file.

#


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

def overwrite_the_existing_file_with_this_content(content)
  original_into = @work_on_this_file
  opnn; e 'Storing the modified dataset into '+sfile(original_into)+'.'
  write_what_into(content, original_into)
  if is_on_roebe?
    into = roebe_exam_directory?
    if File.directory?(into)
      into = into+File.basename(@work_on_this_file)
      if into != original_into
        opnn; e 'Storing the modified dataset into '+sfile(into)+' as well.'
        write_what_into(content, into)
      end
    else
      opnn; e 'No directory at '+sdir(into)+' exists.'
    end
  end
end

#resetObject

#

reset (reset tag)

#


47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/studium/exams/push_solved_questions_on_top.rb', line 47

def reset
  super()
  # ======================================================================= #
  # === @namespace
  # ======================================================================= #
  @namespace = NAMESPACE
  # ======================================================================= #
  # === @work_on_this_file
  #
  # Specifies on which file we will be working.
  # ======================================================================= #
  @work_on_this_file = nil
end

#runObject

#

run (run tag)

#


106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/studium/exams/push_solved_questions_on_top.rb', line 106

def run
  # ======================================================================= #
  # First, determine on which file we want to work on.
  # ======================================================================= #
  determine_on_which_file_to_work_on
  if @work_on_this_file and File.exist?(@work_on_this_file)
    @dataset = proper_readlines(@work_on_this_file)
    # ===================================================================== #
    # Next check whether there is any line ending with ' []'. If so then
    # we will do modifications; if not then not.
    # ===================================================================== #
    if @dataset.any? {|line| line.end_with? " []\n" }
      do_modify_this_dataset(@dataset)
    else
      opnn; e 'This file does not contain any lines ending '\
              'with '+steelblue(' []')
    end
  else
    unless @work_on_this_file.nil?
      opnn; e 'No file could be found at '+sfile(@work_on_this_file)+'.'
    end
  end
end