class RBT::Base
Constants
- ALL_COLOUR_METHODS
#¶ ↑
ALL_COLOUR_METHODS
¶ ↑#¶ ↑
- ARRAY_KDE_KONSOLE_COLOURS_IN_USE
#¶ ↑
ARRAY_KDE_KONSOLE_COLOURS_IN_USE
¶ ↑Next, we will define the
KONSOLE
Colours that can be used.#¶ ↑
- KONSOLE
#¶ ↑
KONSOLE
¶ ↑#¶ ↑
- NAMESPACE
#¶ ↑
NAMESPACE
¶ ↑#¶ ↑
Public Class Methods
#¶ ↑
initialize¶ ↑
#¶ ↑
# File lib/rbt/base/initialize.rb, line 23 def initialize( i = nil, run_already = true ) reset set_input( i ) # ======================================================================= # # Next handle blocks given. # ======================================================================= # if block_given? yielded = yield case yielded when :no_colours disable_colours else # =================================================================== # # === Handle Hash given in blockform # =================================================================== # if yielded.is_a? Hash if yielded.has_key? :use_colours _ = yielded.delete :use_colours if _ == false disable_colours end end end end end run if run_already end
Public Instance Methods
#¶ ↑
capitalize_first_alphabetical_character
¶ ↑
This method will capitalize on the given input, but it will act on the first alphabetical character. So for example, if we input a string such as “/programs” then this method will return “/Programs”.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 135 def capitalize_first_alphabetical_character(i = "/programs") new_string = ''.dup capitalized_already = false i.chars.each {|char| if capitalized_already else if char =~ /[a-zA-Z]/ char.upcase! capitalized_already = true end end new_string << char } new_string end
#¶ ↑
capitalize_program_names?¶ ↑
#¶ ↑
# File lib/rbt/base/base.rb, line 245 def capitalize_program_names? RBT.configuration?.capitalize_program_names end
#¶ ↑
change_directory
(cd tag)¶ ↑
Change into the given directory.
The second argument to this method can be used to do additional tasks, such as creating the directory if it does not yet exist.
#¶ ↑
# File lib/rbt/base/change_directory.rb, line 19 def change_directory( i, optional_arguments = nil ) be_verbose = false # ======================================================================= # # First, handle Symbol-keywords given as first argument. # ======================================================================= # case i when :log_directory i = log_directory? end if block_given? yielded = yield case yielded when :be_verbose be_verbose = true end end # ======================================================================= # # Past this point, the variable `i` ought to be a String. # ======================================================================= # i = i.to_s unless i.is_a? String case optional_arguments when :be_quiet, :quiet, :silent, :be_silent, :do_not_report_anything be_verbose = false when true, :be_verbose be_verbose = true when :create_the_directory_if_it_does_not_exist FileUtils.mkdir_p(i) unless File.directory? i when :verbose_create_the_directory_if_it_does_not_exist, :ensure_that_the_directory_exists unless File.directory? i if be_verbose opnn; e "The directory at `#{sdir(i)}` does not exist." opnn; e 'We will create it now.' end FileUtils.mkdir_p(i) end end i = i.dup if i.frozen? i << '/' unless i.end_with? '/' i = rds(i) # Added this here as of May 2014. # ======================================================================= # # Perform the cd-action next. # ======================================================================= # if File.directory? i if be_verbose e "Changing into the directory `#{sdir(i.to_s)}` now." end Dir.chdir(i) if File.directory? i # This is the actual cd-action. end end
#¶ ↑
change_permission
(chown tag)¶ ↑
This simple method can be used to change permissions, by making use of FileUtils.chown().
#¶ ↑
# File lib/rbt/base/prototype.rb, line 777 def change_permission( file = 'test', use_this_uid_number = '1000' ) FileUtils.chown(use_this_uid_number, use_this_uid_number, file) # Hardcoded right now. end
#¶ ↑
cheering_person?¶ ↑
#¶ ↑
# File lib/rbt/base/prototype.rb, line 700 def cheering_person? '\o/' end
#¶ ↑
chop_off_archive
¶ ↑
Remove the trailing part of an archive, for the most part. This isn't very sophisticated but it “just works” for most cases (TM).
#¶ ↑
# File lib/rbt/base/base.rb, line 470 def chop_off_archive(i) if i.include? '#' # Chop off at '#' characters. i = i[0..(i.index('#')-1)] end i.sub!(/\.source$/,'') if i.include? 'source' i.sub!(/-stable$/,'') if i.end_with? '-stable' i = i.sub(/&type=zip$/,''). sub(/\.lz$/,''). sub(/\.gz$/,''). sub(/\.xz$/,''). sub(/\.bz2$/,''). sub(/\.tar$/,''). sub(/\.zip$/,''). sub(/\.js$/,'') return i end
#¶ ↑
colourize_directory_for_system_results
¶ ↑
This method is to colourize directories that are given via system() or similar calls. In theory, we could use sdir(), but I wanted to have another colour.
#¶ ↑
# File lib/rbt/base/colours.rb, line 203 def colourize_directory_for_system_results(i) lightslategray(i) end
#¶ ↑
colourize_this_file_path
¶ ↑
This method will colourize a “file path”. So for example, if you have a file path such as “/opt/foo/bar.rb”, then this method will colourize the directory in one colour, and the file itself (bar.rb) in another colour.
The whole idea behind this is to be easily able to separate which part is the directory and which part is the file.
If no '/' has been given then the input will be returned unmodified.
The colour for this can be controlled by the input-arguments.
#¶ ↑
# File lib/rbt/base/colours.rb, line 252 def colourize_this_file_path( i, colour1 = :slateblue, # <- This is the colour for the directory. colour2 = :royalblue # <- This is the colour for the file. ) if i.include? '/' if use_colours? dirname = File.dirname(i) basename = File.basename(i) dirname = send(colour1, dirname+'/') basename = send(colour2, basename) i = "#{dirname}#{basename}" end end i end
#¶ ↑
colourize_this_warning
¶ ↑
#¶ ↑
# File lib/rbt/base/colours.rb, line 292 def colourize_this_warning(i) return firebrick(i) if use_colours? i end
#¶ ↑
convert_env_variable
¶ ↑
This method can be used to convert a ENV variable, such as $BLA, into its corresponding “real” value.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 521 def convert_env_variable(i) ConvertGlobalEnv[i] end
#¶ ↑
cookbook_directory¶ ↑
This method will return a String such as:
/Programs/Ruby/2.5.1/lib/ruby/site_ruby/2.5.0/rbt/yaml/individual_cookbooks/
#¶ ↑
# File lib/rbt/base/prototype.rb, line 507 def cookbook_directory? RBT.cookbook_directory? end
#¶ ↑
cookbook_files?¶ ↑
This method will return all available cookbook files in an Array.
Usage example:
cookbook_files?(:show_full_path)
#¶ ↑
# File lib/rbt/base/base.rb, line 149 def cookbook_files?(show_how = :show_only_name) result = Dir["#{individual_cookbooks_directory?}*yml"].sort case show_how when :show_only_name # In this case, show only the name. result.map! {|entry| File.basename(entry).gsub( File.extname(entry), '' ) } when :show_full_path # In this case make no modifications. end return result end
#¶ ↑
copy_directory
¶ ↑
This method can be used to copy a directory from a certain location to the specified (second argument) target directory.
#¶ ↑
# File lib/rbt/base/copy_directory.rb, line 19 def copy_directory( from, to = return_pwd, be_verbose = false ) case to when :be_verbose to = return_pwd be_verbose = true end case be_verbose when :be_verbose be_verbose = true end if be_verbose e "Now copying the directory `#{sdir(from)}` to `#{sdir(to)}`." end FileUtils.cp_r(from, to) end
#¶ ↑
copy_files
(copy tag, cp tag, copy file tag)¶ ↑
Use this if you need to copy a file.
#¶ ↑
# File lib/rbt/base/copy_files.rb, line 18 def copy_files( from, to = Dir.pwd, be_verbose = false ) case be_verbose # case tag when :be_verbose be_verbose = true end case to when '.' to = Dir.pwd end # ======================================================================= # # The next method is defined in the file 'prototype.rb'. # ======================================================================= # from = sanitize_for_environment_variable(from) if from.include? '$' to = sanitize_for_environment_variable(to) if to.include? '$' # ======================================================================= # # Since as of June 2011, we will also automatically create # the base directory should it not yet exist. # ======================================================================= # unless File.exist? File.dirname(to) create_directory(File.dirname(to)) end if File.exist? from if be_verbose e "Now copying the file `#{sfile(from)}` to `#{sfile(to)}`." end FileUtils.cp(from, to) else e "Can not copy the file `#{sfile(from)}` as it "\ "does not appear to exist." end end
#¶ ↑
create_directory
(mkdir tag)¶ ↑
Consistently use this when you want to create a directory for the RBT-Project.
#¶ ↑
# File lib/rbt/base/create_directory.rb, line 19 def create_directory( i = '/Users/Packages/', be_verbose = true, permissions = :default ) unless i.end_with? '/' i = i.dup if i.frozen? i << '/' end if block_given? yielded = yield case yielded when :be_quiet be_verbose = false when :be_verbose be_verbose = true end end unless File.directory? i if be_verbose.is_a? Hash # =================================================================== # # We have to handle other keys first, in particular the permissions # key: # =================================================================== # if be_verbose.has_key? :permissions permissions = be_verbose.delete(:permissions) end if be_verbose.has_key? :be_quiet be_verbose = be_verbose.delete(:be_quiet) elsif be_verbose.has_key? :verbosity be_verbose = be_verbose.delete(:verbosity) end end case be_verbose when :be_quiet, :be_silent be_verbose = false end unless File.directory? i if be_verbose opnn; e "Creating the directory `#{sdir(i)}` now." end RBT.create_directory( i, permissions, :be_quiet, :do_not_use_opn ) # ^^^ We are already verbose above, and handle opn on # our own. end end end
#¶ ↑
current_hour?¶ ↑
Consistently use this method whenever you wish to return the current hour.
#¶ ↑
# File lib/rbt/base/time.rb, line 115 def current_hour? Time.now.strftime('%H:%M:%S') # '04:21:14' end
#¶ ↑
dd_mmm_yyy
¶ ↑
This method-format is specifically the default for cookbook-files.
#¶ ↑
# File lib/rbt/base/time.rb, line 159 def dd_mmm_yyy current_day = Time.now.strftime('%d') # This will return a string such as "30". current_day+ ' '+ Date::MONTHNAMES[Date.today.month][0,3].capitalize+ ' '+ Time.now.strftime('%Y') end
#¶ ↑
determine_appdir_prefix_from_this_input
¶ ↑
This method has to return a String, which constitutes the AppDir prefix of the target program at hand.
#¶ ↑
# File lib/rbt/base/base.rb, line 600 def determine_appdir_prefix_from_this_input( i = nil, program_version = nil ) return RBT.determine_appdir_prefix_from_this_input( i, program_version ) end
#¶ ↑
directory_expanded_cookbooks
?¶ ↑
#¶ ↑
# File lib/rbt/base/expanded_cookbooks.rb, line 48 def directory_expanded_cookbooks? RBT.directory_expanded_cookbooks? end
#¶ ↑
disable_colours
¶ ↑
Use this method if you wish to disable colours. Invoke it only when you really do wish to disable the colours.
#¶ ↑
# File lib/rbt/base/colours.rb, line 232 def disable_colours @use_colours = false end
#¶ ↑
display_md5sum?¶ ↑
#¶ ↑
# File lib/rbt/base/base.rb, line 120 def display_md5sum? RBT.display_md5sum? end
#¶ ↑
does_this_expanded_cookbook_file_exist_for_this_program?¶ ↑
#¶ ↑
# File lib/rbt/base/expanded_cookbooks.rb, line 20 def does_this_expanded_cookbook_file_exist_for_this_program?(i) File.exist? path_to_this_expanded_cookbooks_dataset(i) end
#¶ ↑
ensure_main_encoding_for
¶ ↑
The input to this method should be a String object.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 674 def ensure_main_encoding_for( i, use_this_encoding = USE_MAIN_ENCODING ) unless i.encoding.to_s.include? use_this_encoding i = i.force_encoding(use_this_encoding) end return i end
#¶ ↑
exit_program
(exit tag)¶ ↑
This is a wrapper to exit, that is, to exit a program. Either we just exit; or we return the special symbol :break
#¶ ↑
# File lib/rbt/base/exit_program.rb, line 17 def exit_program( symbol_exit = :standalone, optional_message = nil, use_this_as_exit_value = 0 ) e optional_message if optional_message if symbol_exit.to_s =~ /\d+/ # If we give a number, assume this as exit code. use_this_as_exit_value = symbol_exit.to_i end case symbol_exit when :connected, :chained, :continue return :break # i.e. when you run it from a shell. Return the Symbol :break. when :standalone, # <- Added because I like to read the symbol :standalone. :may_we_exit, :default, 'default', 'def', true exit(use_this_as_exit_value) else # this is the default, just like with :standalone too exit(use_this_as_exit_value) end end
#¶ ↑
expanded_cookbooks_directory_exists?¶ ↑
This method will try and check to see if the expanded-cookbooks directory exists. If this directory exists then this method will return true; otherwise this method will return false.
#¶ ↑
# File lib/rbt/base/expanded_cookbooks.rb, line 60 def expanded_cookbooks_directory_exists? target = directory_expanded_cookbooks? File.directory? target end
#¶ ↑
file_predefined_installation_instructions
?¶ ↑
#¶ ↑
# File lib/rbt/base/prototype.rb, line 686 def file_predefined_installation_instructions? RBT.file_predefined_installation_instructions end
#¶ ↑
find_this_yaml_file
¶ ↑
This method can be used to find a proper yaml file.
We will delegate to Cookbooks
for this though.
We will return the absolute path to the .yml file in question.
Usage example:
find_this_yaml_file(:poppler) # => "/Users/x/DATA/PROGRAMMING_LANGUAGES/RUBY/src/rbt/lib/rbt/yaml/individual_cookbooks/poppler.yml"
#¶ ↑
# File lib/rbt/base/prototype.rb, line 627 def find_this_yaml_file(i = :poppler) i = i.to_s if File.exist? i i else RBT.return_location_of_this_yaml_file(i) end end
#¶ ↑
gem_version
¶ ↑
This method is a wrapper over Gem::Version.new()
The reason as to why this resides in a method is so that we can do some input-sanitizing, and easier rescue, if this is necessary one day.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 237 def gem_version(i) i = i.to_s.delete('vr') begin if i =~ /\d+/ # Must have at the least one number. return Gem::Version.new(i) end rescue ArgumentError => error opnn; e 'An error occurred in gem_version()' pp error end nil # Indicate "failure" aka unable to parse this version. end
#¶ ↑
get_all_directories_from
¶ ↑
This method can be used to obtain all directories from the given (first) input argument.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 754 def get_all_directories_from( here = return_pwd, return_full_path = false ) RBT.get_all_directories_from(here, return_full_path) end
#¶ ↑
is_an_archive?¶ ↑
#¶ ↑
# File lib/rbt/base/prototype.rb, line 767 def is_an_archive?(i) RBT.is_an_archive?(i) end
#¶ ↑
is_ccache_available?¶ ↑
This method queries as to whether ccache is available or whether it is not.
#¶ ↑
# File lib/rbt/base/base.rb, line 623 def is_ccache_available? result = true begin check_for_ccache = `ccache 2>&1` if check_for_ccache.include? 'command not found' result = false end rescue Errno::ENOENT # ===================================================================== # # This clause can happen when there is no # /bin/sh symlink. # ===================================================================== # check_for_ccache = false end result end
#¶ ↑
is_porg_available?¶ ↑
This method is required to determine whether porg is available or not.
#¶ ↑
# File lib/rbt/base/base.rb, line 645 def is_porg_available? result = `porg 2>&1`.include? 'porg: command not found' return !result end
#¶ ↑
is_roebe?¶ ↑
If we are on our local computer, or on another computer.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 329 def is_roebe? RBT.is_roebe? end
#¶ ↑
is_this_program_included?¶ ↑
Use this method to query whether a program is included or whether it is not.
The second argument is, by default, nil. It can be a symbol such as :include_abbreviations, in which case we will include abbreviations.
#¶ ↑
# File lib/rbt/base/base.rb, line 458 def is_this_program_included?( i, optional_arguments = nil ) RBT.is_this_program_included?(i, optional_arguments) # bl $RBT/toplevel_methods/available_programs.rb end
#¶ ↑
move_file
(move tag, mv tag)¶ ↑
Move a file via this method here. Use this consistently whenever you move a file. Could also be done via File.mv().
#¶ ↑
# File lib/rbt/base/prototype.rb, line 350 def move_file( this_file, where_to, be_verbose = true ) if be_verbose e 'Moving from '+sfile(this_file)+' to '+sfile(where_to)+'.' end FileUtils.mv(this_file, where_to) end
#¶ ↑
n_programs_available
?¶ ↑
#¶ ↑
# File lib/rbt/base/prototype.rb, line 269 def n_programs_available? RBT.n_programs_available? end
#¶ ↑
no_such_file_exists
¶ ↑
#¶ ↑
# File lib/rbt/base/prototype.rb, line 714 def no_such_file_exists(i) e "No file called `#{sfile(i)}` appears to exist." end
#¶ ↑
open_in_editor
¶ ↑
This will open a cookbook .yml file in the editor.
#¶ ↑
# File lib/rbt/base/editor.rb, line 18 def open_in_editor(i) if i.is_a? Array i.each {|entry| open_in_editor(entry) } else i = i.to_s.dup unless i.end_with? '.yml' i << '.yml' end if is_on_roebe? # =================================================================== # # On my home system. # =================================================================== # i.prepend "#{RUBY_SRC_DIR_RBT_YAML}individual_cookbooks/" else i.prepend individual_cookbooks_dir? end esystem "#{editor?} #{i}" end end
#¶ ↑
opnn (opnn tag)¶ ↑
The abbreviation “opn” stands for “output program name”. This also describes the major functionality of this method - we will try to display the name of the program that generates a particular output, so that the user can understand which component may have went wrong.
#¶ ↑
# File lib/rbt/base/opn.rb, line 29 def opnn( i = @namespace, &block ) if @use_opn if i.is_a? String i = { namespace: i, use_colours: use_colours? } end RBT.opnn(i, &block) # <- Let that method handle this. end end
#¶ ↑
path_to_this_expanded_cookbooks_dataset
¶ ↑
This method shall attempt to return the full path to the expanded cookbooks directory dataset of a given program.
For example, if the input is 'htop' then this method should return 'htop.yml'.
#¶ ↑
# File lib/rbt/base/expanded_cookbooks.rb, line 33 def path_to_this_expanded_cookbooks_dataset(i) i = i.dup i = remove_archive_at_the_end( File.basename(i) ) if i =~ /\d+/ i = ProgramInformation.return_program_name(i) end i << '.yml' unless i.end_with? '.yml' "#{directory_expanded_cookbooks?}#{i}" end
#¶ ↑
program_exists?¶ ↑
Use this method to find out if a program exists.
Usage Example:
if program_exists? :htop
#¶ ↑
# File lib/rbt/base/base.rb, line 202 def program_exists?(this_program) does_program_exist = false # Defaults to false - the program is not installed. this_program = this_program.to_s.dup #. downcase # sanitize. downcase is BAD, it breaks stuff like "Esetroot" if this_program.include? ' ' # split it, and take the first word in this case. this_program = this_program.split(' ').first end path_variable_file = "#{LINUX}YAML/path_variable.yml" if File.exist? path_variable_file array_available_paths = YAML.load_file(path_variable_file)['path'].strip.split(' ') array_available_paths.each {|path| _ = "#{path}/#{this_program}" does_program_exist = true if File.exist?(_) } end # Hack - an exception for configure: does_program_exist = true if this_program.include? '/configure' return does_program_exist end
#¶ ↑
programs_dir?¶ ↑
#¶ ↑
# File lib/rbt/base/programs_dir.rb, line 16 def programs_dir? RBT.programs_dir?.dup end
#¶ ↑
project_yaml_directory?¶ ↑
This will return the path to the yaml directory.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 870 def project_yaml_directory? RBT.yaml_directory? end
#¶ ↑
remove (remove tag)¶ ↑
General remove entry-method. If you wish to delete a file or a directory or a symlink, use this method.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 379 def remove( this_target, be_verbose = false ) if this_target.is_a? Array this_target.each {|entry| remove(entry, be_verbose) } else # ===================================================================== # # The next check requires a rescue clause, because the file may no # longer exist. # ===================================================================== # begin type = File.ftype(this_target) rescue Errno::ENOENT type = 'missing_entry' end if File.exist? this_target case type # case tag # =================================================================== # # === remove_symlink # =================================================================== # when 'link','missing_entry' # This entry is for symlinks. remove_symlink(this_target) # =================================================================== # # === remove_file # =================================================================== # when 'file' remove_file(this_target, be_verbose) # =================================================================== # # === remove_directory # =================================================================== # when 'directory' remove_directory(this_target) else # This else clause will not be entered, I think. ewarn "Not removing `#{simp(this)}` as \"#{simp(type)}\" is "\ "not registered." end else if be_verbose opnn; e swarn('WARNING: file ')+this_target.to_s+swarn(' does not exist.') opnn; e swarn('Thus, it can not be removed.') end end end end
#¶ ↑
remove_archive_from_the_end
¶ ↑
This method will remove the “archive part” of the given input, such as by removing “.tar.xz” from the given input argument (which ought to be a String).
#¶ ↑
# File lib/rbt/base/prototype.rb, line 834 def remove_archive_from_the_end(i) RBT.remove_archive_from_the_end(i) end
#¶ ↑
remove_directory
¶ ↑
Consistently use this method in order to remove one or more directories.
#¶ ↑
# File lib/rbt/base/remove_directory.rb, line 19 def remove_directory( this_directory, be_verbose = false ) if this_directory.is_a? Array this_directory.each {|entry| remove_directory(entry, be_verbose) } elsif this_directory.is_a? String case be_verbose when :be_verbose be_verbose = true end this_directory = rds(this_directory).strip # Don't want double slashes in it. if File.directory? this_directory case this_directory # case tag # =================================================================== # # / can never be removed through this method here: # =================================================================== # when '/' # We will never remove '/', ever. e "The #{sdir('/')} directory can not be removed "\ "via this method." # Tiny "safeguard". # =================================================================== # # RBT.temp_directory? # =================================================================== # when RBT.temp_directory? e "Will not remove directory `#{sdir(this_directory)}`." # Another tiny "safeguard". else if File.exist?(this_directory) and (this_directory.size > 1) if be_verbose e "Removing the directory `#{sdir(this_directory)}'` next." end FileUtils.rm_rf(this_directory) # Finally remove the directory. end end end else e "Unknown input: #{this_directory.class}" end end
#¶ ↑
remove_double_slashes
(rds tag)¶ ↑
Replace // with / in a given string.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 165 def remove_double_slashes(i) i.squeeze '/' end
#¶ ↑
remove_file
(remove tag)¶ ↑
Use this method whenever you wish to remove a file.
The first input argument to this method shall be the file that we wish to remove. This means the “file path”, so the path to the file has to be provided, such as “/opt/foobar.md”. An Array can also be given, which will lead to batch-removal of the given files at hand.
The second input argument to this method, called `report_the_action`, determines whether we will be verbose or whether we will not be verbose. Verbose here means that we will notify the user what we are doing or about to do; not verbose means that we will be silent when we remove the target file.
#¶ ↑
# File lib/rbt/base/remove_file.rb, line 29 def remove_file( i, report_the_action = false ) if i.is_a? Array i.each {|entry| remove_file(entry, report_the_action) } else RBT.remove_file(i, report_the_action) end end
#¶ ↑
remove_file_extension
¶ ↑
This method will try to remove anything we declare to be an improper file extension. We do this by delegating towards class RemoveFileSuffix, an external dependency.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 791 def remove_file_extension( i, also_remove_the_basename = true ) case also_remove_the_basename when :do_not_strip_anything also_remove_the_basename = false end if also_remove_the_basename i = File.basename(i) end if i.end_with? '.src' i[-4,4] = '' elsif i.end_with? '-src' i[-4,4] = '' end i = remove_unnecessary_data_from_url(i.to_s.dup) remove_archive_from_the_end(i) end
#¶ ↑
remove_symlink
¶ ↑
Simply remove a symlink. Use this method consistently when you wish to remove any symlink.
#¶ ↑
# File lib/rbt/base/symlink.rb, line 73 def remove_symlink( i, be_verbose = false ) case be_verbose when :be_quiet be_verbose = false when :be_verbose be_verbose = true end if be_verbose.is_a? Symlink if i.is_a? Array i.each {|entry| remove_symlink(entry, be_verbose) } else if File.symlink?(i) if be_verbose e "Now deleting the symlink `#{sfancy(i)}`." end File.delete(i) end end end
#¶ ↑
remove_unnecessary_data_from_url
¶ ↑
This method removes some meaningless information that can be found in some URLs.
#¶ ↑
# File lib/rbt/base/base.rb, line 66 def remove_unnecessary_data_from_url(i) i = i.first if i.is_a? Array i = i.to_s.dup i = File.basename(i) i.gsub(/download\?file=/,''). sub(/\/download$/,''). sub(/\?download$/,''). gsub(/-fullsrc/,''). gsub(/-source/,''). gsub(/\?use_mirror=dfn/,''). gsub(/\.src/,''). gsub(/-src/,'') # .gsub(/_/,'-') # This here may be controversial, hence it # was disabled as of June 2010. # i = remove_file_extension(i) # ^^^ We can not do the above, because program_full_name # must include the archive. end
#¶ ↑
repackage¶ ↑
This method will repackage an archive format such as .tar.gz into .tar.xz.
#¶ ↑
# File lib/rbt/base/base.rb, line 536 def repackage( i, use_this_for_the_opnn_namespace = 'RBT::UpdateEntry' ) begin require 'repackage' if File.exist? i opnn( namespace_to_use: use_this_for_the_opnn_namespace ) e "Trying to repackage `#{sfile(i)}` next:" Repackage.new(i) { :run_already } else # Not sure whether we should report to the user or not. end rescue LoadError e 'The gem called "repackage" is not available - please install it' e "in order to repackage the archive at hand here (`#{sfile(i)}`)." end end
#¶ ↑
report_to_developers
¶ ↑
Feedback information to the user so that he can report useful information to the project lead.
#¶ ↑
# File lib/rbt/base/base.rb, line 408 def report_to_developers( this_email = RBT.configuration?.email ) opnn; ewarn 'To report to the developer(s) of RBT, use this '\ 'email address:' opnn; e opnn; efancy ' '+this_email opnn; e opnn; ewarn 'You can also use this URL:' opnn; e opnn; efancy " #{RBT_HOMEPAGE_URL}" opnn; e end
#¶ ↑
reset (reset tag)¶ ↑
#¶ ↑
# File lib/rbt/base/reset.rb, line 18 def reset @use_colours = RBT.use_colours? # Use the default value for RBT. @be_verbose = true @run_simulation = RBT.configuration?.run_simulation # Whether we run in simulation mode or not. @use_opn = true @debug = RBT.shall_we_debug? @namespace = { namespace: NAMESPACE } end
#¶ ↑
return_date
¶ ↑
This method wil return a date (a day), such as “21.09.2017” or “03.06.2018” - in other words, the dd.mm.yyyy format.
#¶ ↑
# File lib/rbt/base/time.rb, line 149 def return_date ::RBT.return_date end
#¶ ↑
return_program_name
¶ ↑
This will always return the proper program name. If you need to modify that name, you must do so on your own.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 554 def return_program_name(i, optional_padding = ' ') _ = ''.dup if REPORT_SPECIFIC_PROGRAM_NAME _ << "#{File.basename(i)}:#{optional_padding}" end return _ end
#¶ ↑
return_utc_time_in_a_format_similar_to_slackware
¶ ↑
Slackware changelog uses a format such as this one here, in a UTC format:
Thu Sep 21 01:23:24 UTC 2017
#¶ ↑
# File lib/rbt/base/time.rb, line 83 def return_utc_time_in_a_format_similar_to_slackware return_weekday_based_on_utc.to_s+' '+ return_month_based_on_utc.to_s+' '+ return_day_of_the_month_based_on_utc+' '+ return_hours_minutes_seconds_based_on_utc+ ' UTC '+ return_year_based_on_utc end
#¶ ↑
run_ldconfig?¶ ↑
#¶ ↑
# File lib/rbt/base/base.rb, line 238 def run_ldconfig? RBT.configuration?.run_ldconfig end
#¶ ↑
run_simulation
?¶ ↑
This method will tell us whether we shall we run in simulation mode or whether we shall not. The default is false, as in, we will not run in simulation mode.
The simulation mode is required to tell the user what we would do, without actually doing any of these changes. It is a “dry run”, a test run.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 482 def run_simulation? @run_simulation end
#¶ ↑
sanitize_for_environment_variable
¶ ↑
#¶ ↑
# File lib/rbt/base/prototype.rb, line 215 def sanitize_for_environment_variable(i) RBT.convert_global_env(i) end
#¶ ↑
sdir_return_pwd
¶ ↑
This method will simply colourize the returned String from the method return_pwd
().
#¶ ↑
# File lib/rbt/base/return_pwd.rb, line 19 def sdir_return_pwd sdir(return_pwd) end
#¶ ↑
set_be_verbose
¶ ↑
By default we will be verbose.
#¶ ↑
# File lib/rbt/base/be_verbose.rb, line 30 def set_be_verbose(i = true) @be_verbose = i end
#¶ ↑
set_source_directory
¶ ↑
Set the source dir to ANY new location. Defaults to Dir.pwd.
Example to test it this method:
ry mantis --source_dir=/Depot/j
#¶ ↑
# File lib/rbt/base/base.rb, line 438 def set_source_directory( i = return_pwd, be_verbose = false ) i << '/' unless i.end_with? '/' RBT.set_source_directory(i) if be_verbose? e "Setting source directory to `#{sdir(i)}` next." end end
#¶ ↑
simp¶ ↑
#¶ ↑
# File lib/rbt/base/colours.rb, line 138 def simp(i = '') return ::Colours.simp(i) if use_colours? i end
#¶ ↑
store_into_this_directory?¶ ↑
#¶ ↑
# File lib/rbt/base/base.rb, line 355 def store_into_this_directory? RBT.store_into_this_directory? end
#¶ ↑
symlink (symlink tag)¶ ↑
Wrapper to symlinking something.
The first argument should be the existing target.
The second argument shall be the name of the new location.
#¶ ↑
# File lib/rbt/base/symlink.rb, line 23 def symlink( existing, new_location = nil, be_verbose = true, use_colours = RBT.use_colours? # Here we need colours/colours.rb ) if block_given? yielded = yield case yielded when :be_quiet be_verbose = false end end ::RBT.symlink(existing, new_location, be_verbose, use_colours) end
#¶ ↑
symlink_all_files_from_this_directory_to_that_directory
¶ ↑
#¶ ↑
# File lib/rbt/base/symlink.rb, line 43 def symlink_all_files_from_this_directory_to_that_directory( this_dir, that_dir ) delete_target_file = false if block_given? yielded = yield case yielded when :delete_target_file_if_it_exists delete_target_file = true end end all_files = Dir[this_dir+'*'].select {|entry| is_file?(entry) } all_files.each {|entry| if delete_target_file _ = that_dir+File.basename(entry) if File.exist? _ remove_file(_) end end symlink(entry, that_dir) } end
#¶ ↑
today?¶ ↑
This method will return a String such as “21 September 2017”.
#¶ ↑
# File lib/rbt/base/time.rb, line 124 def today?( display_in_long_format = true ) if display_in_long_format # This is the default. Time.now.strftime('%d %B %Y') # => "28 December 2018" else Time.now.strftime('%d.%m.%Y') # => "28.12.2018" end end
#¶ ↑
touch (touch tag)¶ ↑
Use this unified method whenever you wish to create a new file, like the UNIX “touch” command.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 175 def touch( i, be_verbose = false ) case be_verbose when :be_verbose be_verbose = true end if be_verbose e "Next creating the file `#{sfile(i)}`." end FileUtils.touch(i) end
#¶ ↑
use_colours?¶ ↑
Query whether we may use colours or not.
#¶ ↑
# File lib/rbt/base/colours.rb, line 103 def use_colours? @use_colours end
#¶ ↑
use_porg?¶ ↑
Whether we will use porg for installation or whether we will not.
Most users probably do not need/want this, so this is mostly for my home system, but also those users who may wish to use porg.
#¶ ↑
# File lib/rbt/base/base.rb, line 658 def use_porg? RBT.configuration?.use_porg end
#¶ ↑
verbose_truth
¶ ↑
This will give us back “yes” or “no”, in String form.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 303 def verbose_truth(i) RBT.verbose_truth(i) end
#¶ ↑
warn_and_exit
¶ ↑
This method will exit from the scripts.
You should be careful when using this, because in some situations we do not actually want to exit completely - for example when we chain-compile something.
# ¶ ↑
# File lib/rbt/base/base.rb, line 258 def warn_and_exit(input, exit_mode = true) warn(input, exit_mode) end
#¶ ↑
word_wrap
¶ ↑
The first argument is the text that will be reformatted.
The second argument is at which position we will wrap it.
#¶ ↑
# File lib/rbt/base/prototype.rb, line 590 def word_wrap( this_text, n_characters_limit = 78 ) if this_text.respond_to? :encoding unless this_text.encoding.to_s.include? main_encoding? this_text = ensure_main_encoding_for(this_text) end this_text.gsub(/(.{1,#{n_characters_limit}})(\s+|$)/, "\\1\n") end end