Class: RBT::Action::CreateProgramVersionUrlFile

Inherits:
RBT::Action show all
Defined in:
lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb

Overview

RBT::Action::CreateProgramVersionUrlFile

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(run_already = true) ⇒ CreateProgramVersionUrlFile

#

initialize

#


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 31

def initialize(
    run_already = true
  )
  reset
  # ======================================================================= #
  # === Handle blocks next
  # ======================================================================= #
  if block_given?
    yielded = yield
    # ===================================================================== #
    # === Handle Hashes next
    # ===================================================================== #
    if yielded.is_a? Hash and
       yielded.has_key?(:show_last_update)
      @internal_hash[:show_last_update] = yielded.delete(:show_last_update)
    end
  end
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Action::CreateProgramVersionUrlFile[]

#


229
230
231
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 229

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

Instance Method Details

#all_expanded_cookbooks?Boolean

#

all_expanded_cookbooks?

#

Returns:

  • (Boolean)


78
79
80
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 78

def all_expanded_cookbooks?
  @internal_hash[:all_expanded_cookbooks]
end

#array_to_be_stored?Boolean

#

array_to_be_stored?

#

Returns:

  • (Boolean)


215
216
217
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 215

def array_to_be_stored?
  @array_to_be_stored
end

#notify_the_user_that_we_require_the_expanded_cookbooks_directoryObject

#

notify_the_user_that_we_require_the_expanded_cookbooks_directory

#


179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 179

def notify_the_user_that_we_require_the_expanded_cookbooks_directory
  opne 'Currently, the functionality to create '+teal('program')+
       ', '+teal('version')+' and '+teal('URL')+', into'
  opne 'a single .md file, depends on the expanded '\
       'cookbook dataset.'
  e
  opne "This dataset should normally reside at "\
       "#{sdir(@directory_expanded_cookbooks)}."
  opne 'This directory does not exist, so the dataset is unavailable.'
  e
  opne 'You can generate the dataset anew via:'
  e
  opne '  rbt --expand'
  e
end

#obtain_the_expanded_cookbooksObject

#

obtain_the_expanded_cookbooks

#


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
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
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 85

def obtain_the_expanded_cookbooks
  newline = "\n".dup
  # ======================================================================= #
  # We read the individual, expanded .yml files from there and only
  # store the relevant parts into the Array called @array_to_be_stored.
  # ======================================================================= #
  if expanded_cookbooks_directory_exists?
    @internal_hash[:all_expanded_cookbooks] = Dir["#{@directory_expanded_cookbooks}*.yml"].sort
    all_expanded_cookbooks?.each {|yaml_file|
      use_this_for_url1 = :url1
      if File.exist? yaml_file
        dataset = YAML.load_file(yaml_file)
      else
        e 'No file exists at '+sfile(yaml_file)+'.'
      end
      program_name    = File.basename(
        yaml_file.delete_suffix('.yml')
      ).downcase.to_sym
      program_version = dataset[:program_version]
      if program_version.nil?
        # ================================================================= #
        # This safeguard was added in April 2021 because we had a file
        # called ModemManager.yml still.
        # ================================================================= #
        opne 'A '+steelblue('nil')+' entry for program_version.'
        opne tomato('Debug this please.')
        opne 'The yaml file was: '+sfile(yaml_file.to_s)
        exit
      end
      program_url     = dataset[use_this_for_url1]
      @array_to_be_stored << [
        program_name, program_version, program_url
      ]
      if show_last_update?
        # ================================================================= #
        # In this case, append more information.
        # ================================================================= #
        last_update = dataset[:last_update]
        @array_to_be_stored[-1] << last_update 
      end
    }
    sort_the_array
    # ===================================================================== #
    # Now that we have populated @array_to_be_stored, we must
    # use it to create a .md file.
    # ===================================================================== #
    what = ''.dup
    @array_to_be_stored.each {|entry|
      # =================================================================== #
      # entry may look like this:
      #
      #   ["modemmanager", "1.16.2",
      #    "https://www.freedesktop.org/software/ModemManager/ModemManager-1.16.2.tar.xz",
      #    "09 Apr 2021"]
      #
      # =================================================================== #
      program_name, program_version, program_url = entry[0], entry[1], entry[2]
      if show_last_update?
        last_update = entry[3] # It is the last element.
      end
      # =================================================================== #
      # Add what we need here - name of the program, the version and
      # the remote URL. This will be properly padded.
      # =================================================================== #
      what << program_name.to_s.ljust(28)+
              program_version.to_s.ljust(22) # Add the program version here.
      # =================================================================== #
      # === Last updated when
      #
      # Append when the last update happened, if we use that entry at
      # all.
      # =================================================================== #
      if show_last_update?
        what << last_update.to_s.strip.ljust(19) # Add when it was last updated.
      end
      # =================================================================== #
      # Next, append the remote URL to the line.
      # =================================================================== #
      what << program_url.to_s.rstrip.ljust(44).rstrip+
              newline
    }
    into = RBT.file_programs_version_url
    opne "#{rev}Now #{steelblue('storing')} #{rev}into the file"
    opne "#{rev}`#{sfile(into)}#{rev}`."
    create_directory_if_it_does_not_yet_exist(File.dirname(into))
    write_what_into(what, into)
  else
    notify_the_user_that_we_require_the_expanded_cookbooks_directory
  end
end

#resetObject

#

reset (reset tag)

#


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 54

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @directory_expanded_cookbooks
  # ======================================================================= #
  @directory_expanded_cookbooks = RBT.directory_expanded_cookbooks?
  # ======================================================================= #
  # === :all_expanded_cookbooks
  # ======================================================================= #
  @internal_hash[:all_expanded_cookbooks] = []
  # ======================================================================= #
  # === :show_last_update
  # ======================================================================= #
  @internal_hash[:show_last_update] = false
  # ======================================================================= #
  # === @array_to_be_stored
  # ======================================================================= #
  @array_to_be_stored = []
end

#runObject

#

run (run tag)

#


222
223
224
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 222

def run
  obtain_the_expanded_cookbooks
end

#show_last_update?Boolean

#

show_last_update?

#

Returns:

  • (Boolean)


208
209
210
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 208

def show_last_update?
  @internal_hash[:show_last_update]
end

#sort_the_arrayObject

#

sort_the_array

#


198
199
200
201
202
203
# File 'lib/rbt/actions/individual_actions/information/create_program_version_url_file.rb', line 198

def sort_the_array
  sorted = @array_to_be_stored.sort_by {|entry|
    entry.first
  }
  @array_to_be_stored = sorted
end