Class: RBT::Action::Cookbooks::ExpandCookbooks

Inherits:
RBT::Action show all
Defined in:
lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb

Overview

RBT::Action::Cookbooks::ExpandCookbooks

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 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, #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_information, #return_program_name_for_gobolinux_systems, #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, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #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(expand_which_programs = :all_of_them, run_already = true, &block) ⇒ ExpandCookbooks

#

initialize

#


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 41

def initialize(
    expand_which_programs = :all_of_them,
    run_already           = true,
    &block
  )
  reset
  case run_already
  # ======================================================================= #
  # === :do_not_run_yet
  # ======================================================================= #
  when :do_not_run_yet
    run_already = false
  end
  set_expand_these_programs(
    expand_which_programs
  )
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Action::Cookbooks::ExpandCookbooks[]

#


279
280
281
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 279

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

Instance Method Details

#consider_updating_program_version_and_url_fileObject

#

consider_updating_program_version_and_url_file

#


87
88
89
90
91
92
93
94
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 87

def consider_updating_program_version_and_url_file
  if is_on_roebe?
    # ===================================================================== #
    # On my home system I will auto-update that file as well.
    # ===================================================================== #
    action(:create_program_version_url_file)
  end
end

#ensure_that_the_base_directory_existsObject

#

ensure_that_the_base_directory_exists

#


162
163
164
165
166
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 162

def ensure_that_the_base_directory_exists
  unless File.directory? directory_expanded_cookbooks?
    mkdir(directory_expanded_cookbooks?)
  end
end

#inform_the_user_what_we_will_do_nextObject

#

inform_the_user_what_we_will_do_next

#


171
172
173
174
175
176
177
178
179
180
181
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 171

def inform_the_user_what_we_will_do_next
  if main_array?.size < 2
    opne "The program called `"\
          "#{sfancy(return_default_program_name_as_string.downcase)}#{rev}`"\
          " will now be expanded,"
    opne 'towards its individual yaml file.'
  else
    opne "#{rev}We will now expand the whole dataset stored into "\
         "the individual yaml files."
  end
end

#main_array?Boolean

#

main_array?

#

Returns:

  • (Boolean)


139
140
141
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 139

def main_array?
  @expand_these_programs
end

#obtain_available_cookbooksObject

#

obtain_available_cookbooks

#


155
156
157
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 155

def obtain_available_cookbooks
  @available_programs = available_programs?
end

#resetObject

#

reset (reset tag)

#


63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 63

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @simple_or_complex
  # ======================================================================= #
  @simple_or_complex = :simple
  # ======================================================================= #
  # === @expand_these_programs
  # ======================================================================= #
  @expand_these_programs = [] # Initialize it properly.
  obtain_available_cookbooks
end

#return_default_program_name_as_stringObject

#

return_default_program_name_as_string

#


146
147
148
149
150
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 146

def return_default_program_name_as_string
  remove_file_archive_at_the_end(
    File.basename(main_array?.first.to_s)
  )
end

#runObject

#

run (run tag)

#


269
270
271
272
273
274
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 269

def run
  ensure_that_the_base_directory_exists
  inform_the_user_what_we_will_do_next
  work_on_each_cookbook
  consider_updating_program_version_and_url_file
end

#sanitize_this_hash(i) ⇒ Object

#

sanitize_this_hash (sanitize tag)

#


234
235
236
237
238
239
240
241
242
243
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 234

def sanitize_this_hash(i)
  if i.is_a? Hash # Only work on Hashes.
    # ===================================================================== #
    # Next, sort this Hash alphabetically:
    # ===================================================================== #
    array = i.sort_by {|key, value| key }
    i = array.to_h
  end
  i
end

#set_expand_these_programs(i = :all_of_them) ⇒ Object

#

set_expand_these_programs

#


99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 99

def set_expand_these_programs(
    i = :all_of_them
  )
  if i.is_a? Array
    i = i.first
  end
  i = :all_of_them if i.nil? # Assign to the default value, in this case.
  case i
  # ======================================================================= #
  # === expand_cookbooks --help
  #
  # We must be careful here - some programs such as "help2man" exist,
  # so we can not merely scan for the "help" substring.
  # ======================================================================= #
  when /^-?-?help$/i
    show_help(:then_exit)
  # ======================================================================= #
  # === :all_of_them
  # ======================================================================= #
  when :all_of_them,
       '' # Empty Strings are treated the same since as of May 2022.
    i = @available_programs
  end
  unless i.is_a? Array
    i = [i] # Turn it into an Array.
  end
  i.map! {|entry|
    entry = entry.dup if entry.frozen?
    entry.delete!('-') if entry.include?('-')
    if entry and entry.end_with?('.yml')
      entry.delete_suffix!('.yml')
    end
    entry
  }
  @expand_these_programs = i
end

#show_help(also_exit = false) ⇒ Object

#

show_help (help tag)

#


248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 248

def show_help(also_exit = false)
  case also_exit
  # ======================================================================= #
  # === :then_exit
  # ======================================================================= #
  when :then_exit
    also_exit = true
  end
  opne 'This class will expand the given arguments '\
       '(program names)  into .yml files.'
  e
  e 'Invocation example:'
  e
  e sfancy('  expand_cookbooks rubyprogressbar')
  e
  exit if also_exit
end

#simple_or_complex?Boolean

#

simple_or_complex?

#

Returns:

  • (Boolean)


80
81
82
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 80

def simple_or_complex?
  @simple_or_complex
end

#work_on_each_cookbookObject

#

work_on_each_cookbook

Work on each cookbook and save the dataset as a hash.

#


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
# File 'lib/rbt/actions/individual_actions/cookbooks/expand_cookbooks/expand_cookbooks.rb', line 188

def work_on_each_cookbook
  is_on_roebe = is_on_roebe?
  if @expand_these_programs.size > 1
    opne "#{rev}Various programs will be expanded now, using the "\
         "#{steelblue(simple_or_complex?)}"\
         "#{rev} mode."
  end
  @expand_these_programs.each {|program|
    program = remove_archive_at_the_end(File.basename(program)).downcase
    # if program =~ /\d+/
    #   program = ProgramInformation.return_program_name(program)
    # end
    # ^^^ This is not ideal, unfortunately, due to programs such
    #     as "help2man".
    _ = action(:SanitizeCookbook, program, autogenerate_expanded_dataset: false) { @simple_or_complex }
    hash = _.internal_dataset? # Obtain the full dataset here - our main Hash.
    # ===================================================================== #
    # We will sanitize this Hash a little bit - in particular we will
    # remove empty URL entries, such as "url4: ''", as this does not
    # appear to be too terribly useful. For more sanitize-operation
    # see the method that does the job.
    # ===================================================================== #
    hash = sanitize_this_hash(hash)
    dataset_to_save = YAML.dump(hash)
    what = dataset_to_save
    
    # ===================================================================== #
    # Get the target, aka where to store, next:
    # ===================================================================== #
    into = rds("#{directory_expanded_cookbooks?}#{program}.yml")
    RBT.store_this_expanded_dataset_into_that_yaml_file(what, into)
    opne "Now storing the #{royalblue('Hash')} #{rev}from "\
         "`#{slateblue(program)}#{rev}"\
         "` into `#{sfile(into)}#{rev}`."
    if is_on_roebe
      into = "#{RUBY_SRC_DIR_RBT_YAML}expanded_cookbooks/#{File.basename(into)}"
      opne "Also storing the #{royalblue('Hash')} #{rev}from "\
           "`#{slateblue(program)}"\
           "#{rev}` into `#{sfile(into)}#{rev}`."
    end
  }
end