Class: RBT::Commandline

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

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

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_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(i = ARGV, run_already = true) ⇒ Commandline

#

initialize

#


40
41
42
43
44
45
46
47
# File 'lib/rbt/commandline/commandline.rb', line 40

def initialize(
    i           = ARGV,
    run_already = true
  )
  RBT.set_commandline_options(i) # ← Keep a reference to the commandline-options.
  reset
  run if run_already
end

Instance Method Details

#commandline_arguments?Boolean

#

commandline_arguments?

#

Returns:

  • (Boolean)


70
71
72
# File 'lib/rbt/commandline/commandline.rb', line 70

def commandline_arguments?
  ::RBT.commandline_arguments?
end

#create_new_cookbook_for(i) ⇒ Object

#

create_new_cookbook_for

This method can create a new cookbook file - but only if the program has not yet been registered as part of RBT.

#


225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/rbt/commandline/commandline.rb', line 225

def create_new_cookbook_for(i)
  require 'rbt/cookbooks/create_cookbook_yaml_file/create_cookbook_yaml_file.rb'
  _ = RBT.remove_archive_from_the_end(File.basename(i))
  program_name = ProgramInformation.return_program_name(_)
  if RBT.is_a_registered_program? program_name
    e "The program #{program_name} is registered."
  else # else register it.
    e rev+'The program '+sfancy(program_name)+
      rev+' is not registered.'
    e rev+'Thus, delegating towards class '+
      steelblue('RBT::Cookbooks::CreateCookbookYamlFile')+
      '.'
    mkdir(src_dir?+program_name)
    RBT::Cookbooks::CreateCookbookYamlFile.new(i) { :interactive_mode }
  end
end

#do_compile_these_programs(i = commandline_arguments? ) ⇒ Object

#

do_compile_these_programs

This method can be used to compile

#


269
270
271
272
273
274
275
# File 'lib/rbt/commandline/commandline.rb', line 269

def do_compile_these_programs(
    i = commandline_arguments?
  )
  require 'rbt/requires/require_the_installer_class.rb'
  i = [i].flatten
  action(:installer, i)
end
#

menu

#


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
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
# File 'lib/rbt/commandline/commandline.rb', line 127

def menu(
    i = commandline_arguments?
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # case tag
    # ===================================================================== #
    # === rbt --colour-make-install
    # ===================================================================== #
    when /^-?-?colour(_|-)?make(_|-)?install$/i
      require 'rbt/make/colour_make_install.rb'
      action(:ColourMakeInstall) { :run }
    # ===================================================================== #
    # === rbt programs-dir?
    # ===================================================================== #
    when /^programs(_|-)?dir\??$/i,
         /^programs(_|-)?directory\??$/i
      e steelblue(RBT.programs_directory?)
      exit
    # ===================================================================== #
    # === rbt --source-dir?
    # ===================================================================== #
    when *REGEXES_TO_SHOW_THE_SOURCE_DIRECTORY
      e sdir(source_directory?)
      remove_this_commandline_argument(i, commandline_arguments?)
      exit
    # ===================================================================== #
    # === rbt --colour-make
    #
    # This entry point allows us to use colour-make.
    # ===================================================================== #
    when /^-?-?colour(_|-)?make$/i
      require 'rbt/make/make.rb'
      RBT::Make.new { :run }
    # ===================================================================== #
    # === rbt --version
    #
    # Simply display the current version of RBT. Since as of August 2019,
    # this will also display when we last updated the RBT project.
    # ===================================================================== #
    when *ARRAY_HELP_VERSION_OPTIONS
      require 'rbt/version/version.rb'
      RBT.report_rbt_version(:also_show_when_the_project_was_last_updated)
      exit
    # ===================================================================== #
    # === rbt is_the_gobolinux_configuration_enabled?
    # ===================================================================== #
    when /^-?-?is(_|-)?the(_|-)?gobolinux(_|-)?configuration(_|-)?enabled\??$/i
      e 'Do we use the GoboLinux configuration: '+
        steelblue(
          RBT.configuration?.enable_gobolinux_config.to_s
        )
    # ===================================================================== #
    # === Feedback all available aliases
    #
    # Invocation example:
    #
    #   rbt --available_aliases?
    #
    # ===================================================================== #
    when /^-?-?available(_|-)?aliases\??$/i
      pp RBT.hash_aliases_to_the_available_programs?
      remove_this_commandline_argument(i, commandline_arguments?)
    # ===================================================================== #
    # === rbt --be_verbose
    # ===================================================================== #
    when /^-?-?be(_|-)?verbose$/
      pp RBT.configuration?.be_verbose
      remove_this_commandline_argument(i, commandline_arguments?)
    else
      # =================================================================== #
      # === Handle URLs given to rbt
      #
      # Invocation example:
      #
      #   rbt http://ftp.gnu.org/pub/gnu/kawa/kawa-3.1.tar.gz
      #
      # =================================================================== #
      if i.start_with?('http')
        create_new_cookbook_for(i)
      else
        # ================================================================= #
        # The following instance variable means that we will delegate
        # all of this into the class RBT::Compile.
        # ================================================================= #
        @let_rbt_compile_handle_the_input = true
      end
    end
  end
end
#

menu_for_the_commandline_arguments_as_string

This menu is specifically used to handle the full commandline argument.

#


79
80
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
# File 'lib/rbt/commandline/commandline.rb', line 79

def menu_for_the_commandline_arguments_as_string(
    i = commandline_arguments?
  )
  require 'rbt/requires/require_actions.rb'
  @let_rbt_compile_handle_the_input = false
  _ = i.join(' ').strip
  case _ # case tag
  # ======================================================================= #
  # === rbt --download htop
  # ======================================================================= #
  when /^-?-?download (.+)$/
    require_class_installer
    action(:Installer, $1.to_s.dup) { :do_not_run_yet }.download
  # ======================================================================= #
  # === rbt --extract htop
  # ======================================================================= #
  when /^-?-?extract(=| )(.+)$/
    require 'rbt/toplevel_methods/extract.rb'
    require 'rbt/requires/require_the_cookbook_class.rb'
    target_program = $2.to_s.dup
    if File.exist? target_program
      RBT.extract(target_program)
    # ===================================================================== #
    # === Check for a locally existing file next
    # ===================================================================== #
    elsif File.exist? File.basename(target_program)
      RBT.extract(
        File.basename(target_program)
      )
    else
      dataset = action(:SanitizeCookbook, target_program) { :fast }
      target_program = dataset.program_path?
      if File.exist? target_program
        RBT.extract(target_program)
      else
        opne "No file could be found at #{steelblue(target_program)}."
        opne 'Perhaps consider downloading the program if it is'
        opne 'registered in the RBT project.'
      end
    end
  else
    @let_rbt_compile_handle_the_input = true
  end
end

#require_class_compileObject

#

require_class_compile

#


63
64
65
# File 'lib/rbt/commandline/commandline.rb', line 63

def require_class_compile
  require 'rbt/requires/require_the_installer_class.rb'
end

#resetObject

#

reset

#


52
53
54
55
56
57
58
# File 'lib/rbt/commandline/commandline.rb', line 52

def reset
  super()
  # ======================================================================= #
  # === @let_rbt_compile_handle_the_input
  # ======================================================================= #
  @let_rbt_compile_handle_the_input = false
end

#runObject

#

run (run tag)

#


245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
# File 'lib/rbt/commandline/commandline.rb', line 245

def run
  # ======================================================================= #
  # We will first pass all commandline arguments into menu() here,
  # before we typically then delegate towards class
  # RBT::Action::Installer.
  # ======================================================================= #
  menu_for_the_commandline_arguments_as_string
  if @let_rbt_compile_handle_the_input
    menu(commandline_arguments?)
  end
  # ======================================================================= #
  # And check it again.
  # ======================================================================= #
  if @let_rbt_compile_handle_the_input
    require_class_compile
    do_compile_these_programs(commandline_arguments?)
  end
end