Class: RBT::VersionSwitcher

Inherits:
Base show all
Defined in:
lib/rbt/utility_scripts/version_switcher.rb

Overview

RBT::VersionSwitcher

Constant Summary

Constants inherited from LeanPrototype

LeanPrototype::ALL_COLOUR_METHODS, LeanPrototype::ARRAY_KDE_KONSOLE_COLOURS_IN_USE, LeanPrototype::DAY_NAMES, LeanPrototype::NAMESPACE, LeanPrototype::SILENT_REDIRECTION

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#cat, #cd_back_to_the_current_working_directory, #consider_reporting_how_many_programs_are_registered, #cookbook_files?, #copy_recursively, #delete_code_of_conduct?, #determine_appdir_prefix_from_this_input, #directory_validation?, #do_not_show_names, #fast_return_file_size_of_this_program, #file_last_symlinked_program?, #file_programs_version_url, #gem_version, #is_a_64bit_system?, #is_ccache_available?, #is_porg_available?, #is_this_binary_registered?, #is_this_program_included?, #make_command?, #make_install_command?, #new_cookbook_instance_for, #program_exists?, #publish_list_of_all_programs_version, #rcp, registered_binaries?, #remove_symlink, #rename_kde_konsole_tab, #repackage, #report_n_programs, #report_working_directory, #return_compile_time_statistics, #return_n_random_characters, #return_version_of_this_program, #run_make_then_make_install, #sanitize_url1_entry, #set_source_directory, #show_overview_over_available_utility_scripts, #symlink_all_files_from_this_directory_to_that_directory, #system_tags?, #upload_list_of_all_programs_version, #use_yaml_database_for_tags?, #warn_and_exit, #wget

Methods inherited from LeanPrototype

#a_or_an?, #abbreviations?, #absolute_path, #action, #add_to_the_commandline_arguments, #all_binaries?, #all_files_from, #all_libraries?, #allowed_cookbook_entries?, #appdir_location_of?, #append_onto_the_internal_hash, #append_what_into, #archive_type_of?, #available_programs?, #be_quiet?, #be_verbose?, #begins_with_a_comment?, #capitalize_first_alphabetical_character, #cd_to_the_log_directory, #cd_to_the_temp_directory, #change_directory, #change_permission, #cheering_person?, #chmod, #chop_off_archive, #clear_commandline_arguments, #cliner, #coloured_and_padded_e, #coloured_and_padded_esystem, #coloured_esystem, #colourize_directory_for_system_results, #colourize_this_error, #colourize_this_file_path, #colourize_this_warning, #commandline_arguments?, #commandline_arguments_without_hyphens?, #comment, #convert_dd_mm_yyyy_to_its_long_variant, #convert_env_variable, #copy_directory, #copy_files, #cpr, #create_directory, #current_hour?, #dd_mmm_yyy, #debug, #debug?, #directory_expanded_cookbooks?, #disable_colours, #display_md5sum?, #do_not_debug, #does_the_cookbook_include_this_program?, #does_this_expanded_cookbook_file_exist_for_this_program?, #does_this_file_exist?, #does_this_file_exist_and_is_it_a_file?, #e, #eblue, #ecomment, #ecrimson, #edir, #editor?, #efancy, #eimp, #enable_colours, #enable_debug, #ensure_main_encoding_for, #eparse, #esystem, #esystem_gold, #etomato, #ewarn, #exit_program, #expanded_cookbooks_directory_exists?, #extract_this_archive, #extract_to?, #file_compiled_programs?, #file_dirname_retaining_trailing_slash, #file_predefined_installation_instructions?, #file_specification_of_registered_cookbook_entries, #find_cookbook_alias_for, #find_this_yaml_file, #first_argument?, #first_non_hyphen_argument?, #get_all_directories_from, #get_all_files_from, #get_all_programs, #get_date, #get_extended_date, #get_files_and_directories_from, #go_to_base_dir, #home_dir?, #host_system?, #infer_the_namespace, #internal_hash?, #internal_hash_set_commandline_arguments, #is_an_archive?, #is_directory?, #is_file?, #is_github_url?, #is_make_available?, #is_meson_installed?, #is_on_gobolinux?, #is_on_windows?, #is_roebe?, #is_superuser?, #is_symlink?, #is_this_a_header?, #is_this_a_library?, #is_this_program_included?, #iso_encoding?, #load_dataset_from_this_expanded_cookbook, #load_yaml, #load_yaml_file_from_the_cookbook_directory_for_this_program, #log_directory?, #main_encoding?, #meson_build_file_exists?, #months?, #move_file, #n_programs_are_available?, #n_programs_available?, #namespace?, #no_directory_exists_at, #no_directory_was_found_at, #no_opn, #no_such_file_exists, #open_in_browser, #open_in_editor, #opncomment, #opne, #opnef, #opnerev, #opnerror, #opnesystem, #opnewarn, #opnfancy, #opnn, #otomato, #packages_directory?, #path_to_this_expanded_cookbooks_dataset, #pkgconfig_directory?, #populate_the_internal_hash_with_default_values, #predefined_installation_instructions?, #prepend_this_commandline_argument, #program_version_of?, #project_base_directory?, #project_yaml_directory?, #query_path?, #rarrow?, #read_file, #read_file_in_default_encoding, #read_file_with_default_encoding, #readlines, #readlines_with_proper_encoding, #register_sigint, #registered_cookbook_entries?, #remove, #remove_archive_from_the_end, #remove_comments_from_each_line, #remove_directory, #remove_double_slashes, #remove_file, #remove_newlines, #remove_parens, #remove_symlink, #remove_the_first_commandline_argument, #remove_this_commandline_argument, #remove_this_entry_from_the_commandline_arguments, #remove_trailing_ANSII_escape_code, #remove_unnecessary_data_from_url, #rename, #report_pwd, #require_the_rbt_aliases, #reset_the_internal_hash, #return_all_archives_from_this_directory, #return_appdir_prefix, #return_commandline_arguments_with_leading_hyphens, #return_current_hour_minutes_second, #return_date, #return_day_of_the_month_based_on_utc, #return_full_time, #return_hours_minutes_seconds_based_on_utc, #return_location_to_this_programs_yaml_file, #return_month_based_on_this_number, #return_month_based_on_utc, #return_opnn, #return_program_name, #return_program_name_for_gobolinux_systems, #return_program_name_via_program_information, #return_pwd, #return_unicode_warning_symbol_or_empty_string, #return_utc, #return_utc_time_in_a_format_similar_to_slackware, #return_weekday_based_on_utc, #return_year_based_on_utc, #rev, #rpn, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #set_use_colours, #set_use_opn, #set_xorg_buffer, #sfancy, #sfile, #silent_redirection?, #silently_create_this_directory_if_it_does_not_yet_exist, #simp, #source_base_directory?, #ssym, #stderr, #store_into_this_directory?, #string_right_arrow?, #swarn, #symlink, #sysbin_directory?, #sysetc_directory?, #sysinclude_directory?, #syslib_directory?, #sysshare_directory?, #system_directory?, #temp_directory?, #to_bool, #to_camelcase, #to_iso_encoding, #to_unicode, #today?, #touch, #try_to_require_beautiful_url, #try_to_require_the_environment_information_gem, #try_to_require_the_extracter_gem, #try_to_require_the_open_gem, #try_to_require_the_xorg_buffer, #try_to_require_wget, #try_to_return_a_special_compile_component, #unicode_cliner, #unicode_middle_cliner, #use_colours=, #use_colours?, #use_opn=, #use_opn?, #utf_encoding?, #verbose_truth, #word_wrap, #write_what_into, #write_what_into_via_unicode, #yes_or_no

Constructor Details

#initialize(commandline_arguments = ARGV, run_already = true) ⇒ VersionSwitcher

#

initialize

#


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 27

def initialize(
    commandline_arguments = ARGV,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  # ======================================================================= #
  # === Handle blocks given to this class
  # ======================================================================= #
  if block_given?
    yielded = yield
    case yielded
    # ===================================================================== #
    # === :be_quiet
    # ===================================================================== #
    when :be_quiet
      be_quiet
    # ===================================================================== #
    # === :be_quiet_and_do_not_registered
    # ===================================================================== #
    when :be_quiet_and_do_not_registered
      be_quiet
      @do_not_register = true
    end
  end
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::VersionSwitcher[]

#


314
315
316
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 314

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

Instance Method Details

#determine_the_available_program_versionsObject

#

determine_the_available_program_versions

#


142
143
144
145
146
147
148
149
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 142

def determine_the_available_program_versions
  target = "#{programs_dir?}#{program_name?}/*"
  @array_available_program_versions = Dir[target].select {|entry|
    File.directory?(entry)
  }.select {|line|
    line =~ /\d+/ # Only obtain numbers.
  }
end
#

menu (menu tag)

#


216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 216

def menu(i)
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # case tag
    # ===================================================================== #
    # === version_switcher --info
    # ===================================================================== #
    when /info/
      require 'class_docu_shower'
      ClassDocuShower.new(__FILE__)
      exit
    # ===================================================================== #
    # === version_switcher --help
    # ===================================================================== #
    when /help/
      show_help
      exit
    end
  end
end

#program_name?Boolean

#

program_name?

#

Returns:

  • (Boolean)


135
136
137
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 135

def program_name?
  @program_name
end

#program_version?Boolean

#

program_version?

#

Returns:

  • (Boolean)


86
87
88
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 86

def program_version?
  @program_version
end

#report_the_current_version_in_useObject

#

report_the_current_version_in_use

This method will simply report the current program version in use.

#


171
172
173
174
175
176
177
178
179
180
181
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 171

def report_the_current_version_in_use
  _ = return_current_program_version
  if _.nil?
    opne 'No current program version could be determined.'
  else
    opne rev+'The current program version for the program '+
         sfancy(program_name?.downcase)+
         rev+' in use is: '+
         sfancy(_)
  end
end

#resetObject

#

reset (reset tag)

#


60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 60

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @do_not_register
  #
  # By default, register into the yaml database.
  # ======================================================================= #
  @do_not_register = false
  # ======================================================================= #
  # === @array_available_program_versions
  #
  # The following Array will keep track of the possible python versions.
  # ======================================================================= #
  @array_available_program_versions = []
  # ======================================================================= #
  # === @program_version
  #
  # If the user wants a program version then this variable can be of help.
  # ======================================================================= #
  @program_version = nil
end

#return_current_program_versionObject

#

return_current_program_version

#


193
194
195
196
197
198
199
200
201
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 193

def return_current_program_version
  target = return_path_to_current
  if File.exist? target
    readlink = File.readlink(target)
    return return_program_version_of(readlink)
  else
    nil
  end
end

#return_path_to_currentObject Also known as: path_to_current

#

return_path_to_current

#


186
187
188
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 186

def return_path_to_current
  "#{programs_dir?}#{program_name?}/Current"
end

#return_program_version_of(i = File.readlink(path_to_current)) ⇒ Object

#

return_program_version_of

#


206
207
208
209
210
211
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 206

def return_program_version_of(
    i = File.readlink(path_to_current)
  )
  i = File.basename(i) if i.include? '/'
  return i
end

#runObject

#

run (run tag)

#


303
304
305
306
307
308
309
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 303

def run
  # ======================================================================= #
  # First, obtain all available program versions.
  # ======================================================================= #
  determine_the_available_program_versions
  try_to_report_which_program_versions_appear_to_be_available
end

#set_commandline_arguments(i) ⇒ Object

#

set_commandline_arguments

#


93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 93

def set_commandline_arguments(i)
  i = [i].flatten.compact # <- We need an Array.
  @internal_hash[:commandline_arguments] = i
  # ======================================================================= #
  # We will assume that the first argument given ^^^ is the
  # name of the program at hand.
  # ======================================================================= #
  program_name = @internal_hash[:commandline_arguments].first
  set_program_name(program_name)
  if @internal_hash[:commandline_arguments].size > 1
    set_program_version(@internal_hash[:commandline_arguments][1])
  end
end

#set_program_name(i = return_pwd) ⇒ Object

#

set_program_name

#


117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 117

def set_program_name(
    i = return_pwd
  )
  i = i.join(' ').strip if i.is_a? Array
  case i
  when :default, nil
    i = return_pwd
  end
  i = i.to_s.dup
  i = File.basename(i) if i.include? '/'
  i.capitalize!
  @program_name = i
  menu(i)
end

#set_program_version(i) ⇒ Object

#

set_program_version

#


110
111
112
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 110

def set_program_version(i)
  @program_version = i
end

#show_helpObject

#

show_help (help tag)

Invocation example:

version_switcher --help
#


159
160
161
162
163
164
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 159

def show_help
  opne 'These options are available for class RBT::VersionSwitcher:'
  e
  e '  --info # Show some information about what this class is doing.'
  e
end

#to_current(the_other_version) ⇒ Object

#

to_current

#


241
242
243
244
245
246
247
248
249
250
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 241

def to_current(
    the_other_version
  )
  orev "Now switching to the version `#{sfile(the_other_version)}#{rev}`."
  if @do_not_register
    action(:ToCurrent, the_other_version) { :do_not_register }
  else
    action(:ToCurrent, the_other_version)
  end
end

#try_to_pick_that_particular_program_version(i) ⇒ Object

#

try_to_pick_that_particular_program_version

#


255
256
257
258
259
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 255

def try_to_pick_that_particular_program_version(i)
  i = File.basename(i)
  target = "#{programs_directory?}#{program_name?}/#{i}/"
  to_current(target)
end

#try_to_report_which_program_versions_appear_to_be_availableObject

#

try_to_report_which_program_versions_appear_to_be_available

#


264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
# File 'lib/rbt/utility_scripts/version_switcher.rb', line 264

def try_to_report_which_program_versions_appear_to_be_available
  # ======================================================================= #
  # Now we have all available program versions. We must first present to
  # the user which versions are available.
  # ======================================================================= #
  _ = @array_available_program_versions
  unless _.empty?
    orev 'These program versions appear to be available:'
    e
    sorted = _.sort_by {|entry| entry.to_s } # Better to keep it sorted.
    sorted.each {|entry|
      version = File.basename(entry).to_s
      efancy " #{version}"
    }; e
    report_the_current_version_in_use
    if program_version?
      # =================================================================== #
      # In this case, try to pick that particular program version.
      # =================================================================== #
      try_to_pick_that_particular_program_version(program_version?)
      return
    end
    # ===================================================================== #
    # Next, switch to the other version; this works only if we have
    # exactly two elements.
    # ===================================================================== #
    if _.size == 2
      the_other_version = _.reject {|line|
        line.include? return_current_program_version
      }
      the_other_version = the_other_version.first if the_other_version.is_a? Array
      to_current(the_other_version)
    end
  end
end