Class: Roebe::SetAliases

Inherits:
Base show all
Defined in:
lib/roebe/classes/set_aliases.rb

Overview

Roebe::SetAliases

Constant Summary collapse

FILE_EXAM_TOPICS =
#

FILE_EXAM_TOPICS

#
'exam_topics.md'

Constants inherited from Base

Base::COLOURS, Base::HOME_DIRECTORY_OF_USER_X, Base::N, Base::NAMESPACE

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#actions, #append_this_onto_that_file, #append_what_into, #be_silent, #be_verbose?, #beautiful_url, #burlywood, #call_next, #chdir, #cheerful_guy, #cliner, #complex_esystem, #convert_global_env, #copy_directory, #copy_file, #cornflowerblue, #create_directory, #crimson, #current_month?, #current_time?, #current_year?, #cyan, #darkcyan, #darkgreen, #darkkhaki, #darkslateblue, #deeppink, #delete_symlink, #do_not_use_the_base_colours, #do_use_the_base_colours, #e, #ecomment, #editor_to_use?, #efancy, #eimp, #emphasis, #ensure_main_encoding, #ensure_utf_encoding, #eparse, #erev, #esteelblue, #etomato, #ewarn, #exit_program, #firebrick, #get_current_day, #get_current_month, #get_files_and_directories, #get_files_from, #get_german_name_for_this_weekday, #gold, #green, #grey, #hh_mm_ss, #hh_mm_ss_day_month_year, #home_dir?, #home_directory_of_user_x?, #infer_the_namespace, #internal_hash?, #is_a_directory?, #is_a_file?, #is_a_jpg_file?, #is_an_image_file?, #is_archive?, #is_audio_file?, #is_in_studium_dir?, #is_multimedia_file?, #is_on_roebe?, #is_on_windows?, #is_studium_available?, #is_symlink?, #is_this_a_ruby_file?, #is_video_file?, #iso_encoding?, #le, #left_colour, #lightblue, #lightgreen, #lightseagreen, #lightsteelblue, #lime, #limegreen, #localhost_to_data, #log_directory?, #main_encoding?, #mediumorchid, #mediumpurple, #mediumseagreen, #mediumslateblue, #mediumspringgreen, #mediumturquoise, #mkdir_p, #mv, #n_days_in_this_month, #n_pages_in_this_pdf_file?, #namespace?, #no_file_exists_at, #ogrey, #olive, #olivedrab, #open_in_browser, #opne, #opnesystem, #opnn, #orange, #orchid, #orev, #palegoldenrod, #palevioletred, #pink, #powderblue, #programs_dir?, #project_base_dir?, #random_html_colour, #rds, #read_file_in_iso_encoding, #read_file_via_the_default_encoding, #read_lines_via_iso_encoding, #readlines_with_main_encoding, #red, #register_sigint, #remove, #remove_directory, #remove_file, #rename_kde_konsole_tab, #replace_localhost_with_data, #report_pwd, #require_rescue, #reset_the_internal_hash, #return_all_directories_from_this_directory, #return_all_files_from_this_directory, #return_current_directory, #return_dd_mm_yyyy, #return_file_or_directory_of, #return_files_from_pwd, #return_last_part_of_the_current_directory, #return_utc, #rev, #right_arrow?, #right_colour, #roebe_log_directory?, #rosybrown, #royalblue, #ruby_base_directory?, #run_in_background, #run_rcfiles_then_run_ata_via_qdbus, #sandybrown, #sdir, #seagreen, #set_be_verbose, #set_xorg_buffer, #sfancy, #sfile, #silent_redirection?, #simp, #simple_esystem, #skyblue, #slateblue, #slategray, #springgreen, #steelblue, #string_italic, #swarn, #symlink, #teal, #temp_dir?, #to_camelcase, #to_counted_hash, #tomato, #touch, #try_to_require_the_beautiful_url_gem, #try_to_require_the_html_template, #try_to_require_the_open_gem, #try_to_require_the_program_information_gem, #try_to_require_the_xorg_buffer, #use_colours?, #verbose_truth, #weekday?, #word_wrap, #write_what_into, #yellow

Methods included from Base::CommandlineArguments

#append_onto_the_commandline_arguments, #clear_commandline_arguments, #commandline_arguments?, #commandline_arguments_as_string?, #commandline_arguments_without_leading_hyphens?, #first_argument?, #first_argument_without_leading_hyphens?, #has_an_argument_been_passed?, #remove_hyphened_arguments_from_the_commandline_arguments, #return_commandline_arguments_with_leading_hyphens, #second_argument?, #set_commandline_arguments

Constructor Details

#initialize(i = ARGV, run_already = true) ⇒ SetAliases

#

initialize

#


66
67
68
69
70
71
72
73
# File 'lib/roebe/classes/set_aliases.rb', line 66

def initialize(
    i           = ARGV,
    run_already = true
  )
  reset
  set_commandline_arguments(i)
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

Roebe::SetAliases[]

#


351
352
353
# File 'lib/roebe/classes/set_aliases.rb', line 351

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

Instance Method Details

#autoupdate_aliases_mapped_to_the_upcoming_examsObject

#

autoupdate_aliases_mapped_to_the_upcoming_exams

To invoke this method, do:

setaliases --autoupdate
#


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
# File 'lib/roebe/classes/set_aliases.rb', line 118

def autoupdate_aliases_mapped_to_the_upcoming_exams
  begin
    require 'studium/toplevel_methods/return_directory_for.rb'
    # ===================================================================== #
    # First, we must determine which are the exams.
    # ===================================================================== #
    dataset = Studium::ShowUpcomingExams.return_all_registered_upcoming_exams
    all_local_directories = []
    dataset.each {|key, hash|
      this_university = hash[:university]
      all_local_directories << ::Studium.return_directory_for(
        key, this_university
      )
    }
    # ===================================================================== #
    # Next, obtain the content of all exam_topics.md file.
    # ===================================================================== #
    all_exam_topics = []
    all_local_directories.each {|path|
      _ = path+FILE_EXAM_TOPICS
      if File.exist? _
        dataset_from_the_file_exam_topics_md = File.readlines(
          _
        ).reject {|line|
          line.strip.empty?
        }.map {|inner_line|
          inner_line.delete('-').strip
        }
        # ================================================================= #
        # Since as of June 2018 we will append a '?' character to each
        # entry, unless it already has one such character at the end.
        # ================================================================= #
        dataset_from_the_file_exam_topics_md.map! {|line|
          unless line.end_with? '?'
            line = line.dup if line.frozen?
            line << '?'
          end
          line
        }
        all_exam_topics << dataset_from_the_file_exam_topics_md
        all_exam_topics.flatten!
      end
    }
    all_exam_topics.uniq!
    opne 'We have obtained a total of '+
         sfancy(all_exam_topics.size.to_s)+
         ' different exam topics.'
    opne 'The top 9 entries will now be selected.'
    use_this_hash = {}
    top_nine = all_exam_topics[0 .. (9-1)]
    top_nine.each_with_index {|entry, index| index += 1
      use_this_hash[index] = entry
    }
    batch_create_new_aliases(use_this_hash)
    exit
  rescue LoadError
    e 'File studium/toplevel_methods/return_directory_for.rb is not available.'
  end
end

#batch_create_new_aliases(use_this_hash = new_hash? ) ⇒ Object

#

batch_create_new_aliases

#


274
275
276
277
278
279
280
# File 'lib/roebe/classes/set_aliases.rb', line 274

def batch_create_new_aliases(
    use_this_hash = new_hash?
  )
  use_this_hash.each_pair {|alias_number, new_content|
    Roebe.set_alias(alias_number, new_content)
  }
end

#exchange_these_two_positions(a, b) ⇒ Object

#

exchange_these_two_positions

Use this method to exchange two aliases.

#


256
257
258
259
260
261
262
263
264
265
266
267
268
269
# File 'lib/roebe/classes/set_aliases.rb', line 256

def exchange_these_two_positions(a, b)
  hash = Roebe::ReturnTenAliases[]
  # ======================================================================= #
  # Must re-build the hash now. First obtain the old "pointer".
  # ======================================================================= #
  old_value_at_position_a = hash[a]
  old_value_at_position_b = hash[b]
  # ======================================================================= #
  # Next, rebuild that Hash.
  # ======================================================================= #
  hash[a] = old_value_at_position_b
  hash[b] = old_value_at_position_a
  store_this_new_hash(hash)
end
#

menu (menu tag)

#


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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# File 'lib/roebe/classes/set_aliases.rb', line 181

def menu(
    i = commandline_arguments?
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # case tag
    # ===================================================================== #
    # === setalias :meta_genetic
    #
    # This here is a bit more involved. First, we must obtain all
    # matching entries to the topic at hand.
    #
    # We only honour it if it begins with a leading ':' token.
    #
    # Invocation example:
    #
    #   setalias :meta_genetic
    #
    # ===================================================================== #
    when /:(.+)/i
      _ = $1.to_s.dup
      result = Studium.map_meta_exam_theme_to_corresponding_exam_themes(_.to_sym)
      result.each_with_index {|this_alias, index| index += 1
        @internal_hash[:new_hash][index] = this_alias
      }
      batch_create_new_aliases
    # ===================================================================== #
    # === set_aliases --move=2,9
    # ===================================================================== #
    when /^-?-?move=(\d+),(\d+)$/,
         /^-?-?exchange=(\d+),(\d+)$/, # === set_aliases --exchange=2,9
         /^-?-?exchange(\d+),(\d+)$/,  # === set_aliases --exchange2,9
         /^-?-?exchange(\d+)(\d+)$/    # === set_aliases --exchange2,9
      exchange_these_two_positions(
        $1.to_s.dup.to_i,
        $2.to_s.dup.to_i
      )
    # ===================================================================== #
    # === set_aliases --shift-one-level-upwards
    # ===================================================================== #
    when /^-?-?shift(-|_)?one(-|_)?level(-|_)?upwards$/i,
         /^-?-?sync(-|_)?one(-|_)?level(-|_)?down$/i
      shift_entries_one_level_upwards
    # ===================================================================== #
    # === setaliases --autoupdate
    # ===================================================================== #
    when /^-?-?auto(-|_)?update$/i,
         /^-?-?auto(-|_)?check$/i
      autoupdate_aliases_mapped_to_the_upcoming_exams
    # ===================================================================== #
    # === set_aliases --help
    # ===================================================================== #
    when /^-?-?help/i
      show_help
      exit
    end
  end
end

#new_hash?Boolean

#

new_hash?

#

Returns:

  • (Boolean)


89
90
91
# File 'lib/roebe/classes/set_aliases.rb', line 89

def new_hash?
  @internal_hash[:new_hash]
end

#read_from_the_file_exam_topics_and_return_arrayObject

#

read_from_the_file_exam_topics_and_return_array

#


244
245
246
247
248
249
# File 'lib/roebe/classes/set_aliases.rb', line 244

def read_from_the_file_exam_topics_and_return_array
  dataset = readlines_with_proper_encoding(FILE_EXAM_TOPICS).map {|line|
    line.chomp.delete('-').lstrip+'?'
  }
  return dataset
end

#resetObject

#

reset

#


78
79
80
81
82
83
84
# File 'lib/roebe/classes/set_aliases.rb', line 78

def reset
  super()
  # ======================================================================= #
  # === @new_hash
  # ======================================================================= #
  @internal_hash[:new_hash] = {} # This will be the new Hash that is to be stored.
end

#runObject

#

run (run tag)

#


326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
# File 'lib/roebe/classes/set_aliases.rb', line 326

def run
  # ======================================================================= #
  # === Handle input called exam_topics.md next
  #
  # We will check whether this file exists. If it does, we read in its
  # contents, then assign these as the new names.
  # ======================================================================= #
  _ = commandline_arguments?
  if (_.first == FILE_EXAM_TOPICS) and File.exist?(FILE_EXAM_TOPICS)
    i = read_from_the_file_exam_topics_and_return_array
  end
  menu
  remove_hyphened_arguments_from_the_commandline_arguments
  # ======================================================================= #
  # Sync the input given onto the new Hash next.
  # ======================================================================= #
  [i].flatten.compact.each_with_index {|this_alias, index| index += 1
    @internal_hash[:new_hash][index] = this_alias
  }
  batch_create_new_aliases
end

#set_new_hash(i) ⇒ Object Also known as: store_this_as_the_new_hash, store_this_new_hash

#

set_new_hash

The format of the Hash should be key-value pairs where the key specifies the number of that particular alias to be used.

#


288
289
290
# File 'lib/roebe/classes/set_aliases.rb', line 288

def set_new_hash(i)
  @internal_hash[:new_hash] = i
end

#shift_entries_one_level_upwardsObject

#

shift_entries_one_level_upwards

This method will shift all aliases one level up, so alias1 becomes alias2, alias2 becomes alias3 and so forth.

Entry level 1 will remain as it is though.

#


301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
# File 'lib/roebe/classes/set_aliases.rb', line 301

def shift_entries_one_level_upwards
  # ======================================================================= #
  # First, obtain the old entries.
  # ======================================================================= #
  hash = Roebe::ReturnTenAliases[]
  # ======================================================================= #
  # Next, build up our new hash.
  # ======================================================================= #
  new_hash = {}
  hash.each_pair {|alias_number, alias_value|
    alias_number += 1
    unless alias_number > 10 # For now, we limit it to 10 aliases.
      new_hash[alias_number] = alias_value
    end
  }
  # ======================================================================= #
  # Must re-insert the first entry, though.
  # ======================================================================= #
  new_hash[1] = hash[1]
  store_this_as_the_new_hash(new_hash)
end

#show_helpObject

#

show_help (help tag)

#


96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/roebe/classes/set_aliases.rb', line 96

def show_help
  help_string = <<-EOF

#{rev}The following options are #{lightblue('documented')}#{rev}:

--shift-one-level-upwards # set_aliases --shift-one-level-upwards
--move=2,9                # exchange positions 2 and 9
--autoupdate              # auto-update the aliases with
                          # content from #{FILE_EXAM_TOPICS} file

EOF
  e help_string
end