Class: RBT::Cookbooks::ShowLastUpdated

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

Overview

RBT::Cookbooks::ShowLastUpdated

Constant Summary collapse

DISPLAY_N_PROGRAMS =
#

DISPLAY_N_PROGRAMS

How many programs to use by default. We can also use the maximum amount of programs instead.

#
250
HEADER =
#

HEADER

#
'| Name                      |   Last Update        | Index                     |'

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 = nil, run_already = true) ⇒ ShowLastUpdated

#

initialize

#


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 47

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  # ======================================================================= #
  # === Handle blocks next
  # ======================================================================= #
  if block_given?
    yielded = yield
    case yielded
    # ===================================================================== #
    # === :do_not_output_the_result
    # ===================================================================== #
    when :do_not_output_the_result
      do_not_output_the_result
    end
  end
  if first?.is_a? Hash
    # ===================================================================== #
    # === :display_n_programs
    # ===================================================================== #
    if first?.has_key? :display_n_programs
      set_display_n_programs(first?.fetch(:display_n_programs))
    end
  end
  run if run_already
end

Class Method Details

.dataset?Boolean

#

RBT::Cookbooks::ShowLastUpdated.dataset?

This method will return an Array that is already sorted. Most recent entries, aka the first ones in that Array, will be the programs that were updated last.

Usage example:

x = Cookbooks::ShowLastUpdated.dataset?; pp x; ''
#

Returns:

  • (Boolean)


399
400
401
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 399

def self.dataset?
  new { :do_not_output_the_result }.dataset?
end

Instance Method Details

#array_dataset?Boolean Also known as: array?, main_dataset?, dataset?

#

array_dataset?

#

Returns:

  • (Boolean)


280
281
282
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 280

def array_dataset?
  @array_dataset
end

#do_not_show_the_resultObject Also known as: do_not_output_the_result

#

do_not_show_the_result

#


111
112
113
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 111

def do_not_show_the_result
  @show_result = false
end

#filter_the_array_datasetObject

#

filter_the_array_dataset

Here we will apply the maximum threshold stored in @display_n_programs.

#


312
313
314
315
316
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 312

def filter_the_array_dataset
  unless @display_n_programs.is_a? Symbol # If it is :everything then we will show every program.
    @array_dataset = @array_dataset[0, @display_n_programs]
  end
end

#inform_the_user_what_we_will_doObject

#

inform_the_user_what_we_will_do

#


227
228
229
230
231
232
233
234
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 227

def inform_the_user_what_we_will_do
  if @show_result
    cliner {
      opne "#{rev}Displaying the #{swarn('last '+n_programs?.to_s)}"\
           " #{rev}updated programs next:"
    }
  end
end
#

menu (menu tag)

#


339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 339

def menu(
    i = commandline_arguments?
  )
  if i.is_a? Array
    i = i.join(' ').strip
  end
  case i # case tag
  # ======================================================================= #
  # === Handle hashes here.
  # ======================================================================= #
  when Hash
    if i.has_key? :display_n_programs
      set_display_n_programs(i.fetch(:display_n_programs))
    end
  # ======================================================================= #
  # === slu --n_programs 500
  # ======================================================================= #
  when /-?-?n(_|-?)programs (\d+)/
    set_display_n_programs($2.to_s.dup)
  # ======================================================================= #
  # === slu --reversed
  # ======================================================================= #
  when /^-?-?reversed/,
       /^-?-?sort(_|-?)by(_|-?)oldest$/
    set_display_n_programs(:all_of_them)
    @sort_by = :reversed
  # ======================================================================= #
  # === help
  # ======================================================================= #
  when /^-?-?help$/i
    show_help; exit # Show help, then exit.
  else
    i = i.to_s
    if i.include?('--n') or i.include?('-n') # All the --n options are assumed to be used for showing n programs.
      set_display_n_programs(i)
    end
  end
end

#n_programs?Boolean Also known as: show_n_programs?

#

n_programs?

Tell us how many programs are there.

#

Returns:

  • (Boolean)


273
274
275
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 273

def n_programs?
  @display_n_programs
end

#obtain_last_updated_programsObject

#

obtain_last_updated_programs

#


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
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 139

def obtain_last_updated_programs
  if use_grep?
    cmd = "grep -r last_update #{individual_cookbooks_dir?}*"
    if show_result?
      opne 'The command "'+cadetblue('grep')+rev+
           '" will be used, with the following syntax:'
      e
      e "  #{gold(cmd)}" # Display that particular grep command as well.
      e
    end
  end
  inform_the_user_what_we_will_do if show_result?
  # ======================================================================= #
  # This is the header.
  # ======================================================================= #
  output_header # ← This method calls a trailing cliner already.
  case @obtain_results_via
  # ======================================================================= #
  # === :grep
  # ======================================================================= #
  when :grep
    # ===================================================================== #
    # We still have to populate the @array_dataset variable.
    # So first, make use of grep:
    # ===================================================================== #
    result = `#{cmd}`
    array = result.split(N)
    use_this_regex = /last_update: (.+)/
    array.each_with_index {|line, index| index += 1
      line.chomp!
      splitted_at_colon = line.split(':') # Split at ':' colon tokens.
      program = File.basename(splitted_at_colon.first).sub(/\.yml$/,'')
      last_update = line.scan(use_this_regex).flatten.first
      @array_dataset << [program, last_update, index]
    }
  # ======================================================================= #
  # === :ruby
  # ======================================================================= #
  when :ruby
    programs = available_programs?
    programs.each_with_index { |program, index|
      index += 1
      # =================================================================== #
      # @dataset.assign(program) # This is an instance of Cookbooks::Cookbook.
      # Note that the next line can be fairly slow. As an alternative
      # solution, we can also use grep.
      # =================================================================== #
      @dataset = action(:SanitizeCookbook, program) { :fast }
      begin
        last_update = @dataset.last_update?
        if last_update.empty?
          opne swarn('No last update was found for the program:')
          opne sfancy(program)
        else # Else append the dataset.
          @array_dataset << [program, last_update, index]
        end
      rescue Exception => error
        pp error
        opne "The program that failed was: `#{sfancy(program.to_s)}`"
      end
    }
  end
  cliner
  sort_the_array_dataset
  filter_the_array_dataset
end

#output_headerObject

#

output_header

#


125
126
127
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 125

def output_header
  e HEADER if @show_result
end

#report_results(i = @array_dataset) ⇒ Object

#

report_results

#


289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 289

def report_results(
    i = @array_dataset
  ) 
  if @show_result
    i.each { |name, date, index|
      name = '%-25s' % name
      date = date.center(20)
      date = mediumspringgreen(date) if use_colours?
      index = index.to_s.rjust(4)
      if use_colours?
        index = seagreen(index)
      end
      e "| #{steelblue(name)} | #{date.to_s} | #{index}"
    }
    cliner
  end
end

#resetObject

#

reset (reset tag)

#


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
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 82

def reset
  super()
  infer_the_namespace
  set_display_n_programs # Set a default.
  # ======================================================================= #
  # === @dataset
  # ======================================================================= #
  @dataset = nil
  # ======================================================================= #
  # === @array_dataset
  # ======================================================================= #
  @array_dataset = [] # <- Will be an Array of: [program, last_update, index]
  # ======================================================================= #
  # === @obtain_results_via
  # ======================================================================= #
  @obtain_results_via = :grep # Can be :grep or :ruby.
  # ======================================================================= #
  # === @show_result
  # ======================================================================= #
  @show_result = true
  # ======================================================================= #
  # === @sort_by
  # ======================================================================= #
  @sort_by = :alphabet
end

#runObject

#

run (run tag)

#


381
382
383
384
385
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 381

def run
  check_against_menu # First check against the menu.
  obtain_last_updated_programs
  report_results
end

#set_display_n_programs(i = RBT.n_registered_programs?) ⇒ Object

#

set_display_n_programs

This method will also accept a regex optionally.

#


241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 241

def set_display_n_programs(
    i = RBT.n_registered_programs?
  )
  case i
  # ======================================================================= #
  # === :all_of_them
  # ======================================================================= #
  when :all_of_them,
       :default
    i = RBT.n_registered_programs?
  end
  if i.is_a? String
    if i.include? 'n_programs'
      i =~ /n_programs (\d+)/
      i = $1.to_s.dup
    elsif i.include? 'nprograms'
      i =~ /nprograms (\d+)/
      i = $1.to_s.dup
    elsif i.start_with?('--n ') or i.start_with?('-n')
      i =~ /n ?(\d+)/
      i = $1.to_s.dup
    end
  end
  i = i.to_i # Must be an Integer.
  @display_n_programs = i
end

#show_helpObject

#

show_help (help tag)

Invocation example:

slu --n_programs 3000
#


326
327
328
329
330
331
332
333
334
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 326

def show_help
  e 'To display '+simp('n programs')+', where '+simp('n')+' may '\
    'be 500, do this:'
  e
  e '   slu --n_programs 500'
  e '   slu --nprograms 500'
  e '   slu --n 500'
  e
end

#show_result?Boolean

#

show_result?

#

Returns:

  • (Boolean)


132
133
134
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 132

def show_result?
  @show_result
end

#sort_the_array_datasetObject

#

sort_the_array_dataset

#


209
210
211
212
213
214
215
216
217
218
219
220
221
222
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 209

def sort_the_array_dataset
  @array_dataset = @array_dataset.sort_by {|i|
    begin
      this_date = i[1]
      Time.parse(this_date)
    rescue Exception => error
      pp error
      pp i
    end
  }.reverse # .reverse so we can keep it in a nicer layout.
  if @sort_by == :reversed
    @array_dataset.reverse!
  end
end

#use_grep?Boolean

#

use_grep?

#

Returns:

  • (Boolean)


118
119
120
# File 'lib/rbt/cookbooks/show_last_updated.rb', line 118

def use_grep?
  @obtain_results_via == :grep
end