Class: RBT::Action::Cookbooks::Highest

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

Overview

RBT::Action::Cookbooks::Highest

Constant Summary collapse

EXIT_ON_MISSING_ENTRY =
#

EXIT_ON_MISSING_ENTRY

#
false
DISPLAY_N_PROGRAMS_BY_DEFAULT =
#

DISPLAY_N_PROGRAMS_BY_DEFAULT

How many programs to display by default.

#
80

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_options, #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_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_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_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(display_n = DISPLAY_N_PROGRAMS_BY_DEFAULT, run_already = true) ⇒ Highest

#

initialize

To use more than the defaults, you can do this:

Cookbooks::Highest.new(150)
#


53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 53

def initialize(
    display_n   = DISPLAY_N_PROGRAMS_BY_DEFAULT,
    run_already = true
  )
  reset
  startup
  set_display_top_n(
    display_n
  ) # First set how many programs we will display.
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Action::Cookbooks::Highest[]

#


369
370
371
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 369

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

Instance Method Details

#beautify_file_size(i) ⇒ Object

#

beautify_file_size

This will attempt to beautify the given input.

We require 3 trailing positions after the , position.

#


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/information/highest.rb', line 211

def beautify_file_size(i)
  i  = i.to_s.strip
  x  = i.to_f
  kb = 1024
  mb = (1024 ** 2)
  gb = (1024 ** 3)
  # tb = (1024 ** 4)
  if x < 1024
    return "#{round(x.to_f)} bytes"
  elsif x > 1024 && x < mb
    return "#{round(x.to_f/kb)} kb"
  elsif x > mb && x < gb
    result = round(x.to_f/mb)
    result = '%.3f' % result
    return "#{result} MB"
  elsif x > gb
    return "#{round(x.to_f/gb)} GB"
  end
end

#display_n?Boolean

#

display_n?

#

Returns:

  • (Boolean)


241
242
243
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 241

def display_n?
  @display_top_n
end

#inform_the_user_what_we_will_doObject

#

inform_the_user_what_we_will_do

#


102
103
104
105
106
107
108
109
110
111
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 102

def inform_the_user_what_we_will_do
  # ======================================================================= #
  # Get the local URL.
  # ======================================================================= #
  opnn { :no_trailing }
  e rev+' Now fetching the top `'+salmon(@display_top_n.to_s)+
    rev+'` largest local programs from the directory'
  e rev+"  `#{sdir(source_directory?)}#{rev}`."
  e "#{rev}This may take a while. Please be patient."
end
#

menu (menu tag)

#


332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 332

def menu(
    i = commandline_arguments_with_leading_hyphens?
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # case tag
    # ======================================================================= #
    # === showhighest --use-the-expanded-dataset
    # ======================================================================= #
    when /^-?-?use(_|-| )?the(_|-| )?expanded(_|-| )?dataset$/i,
         /^-?-?fast$/i
      @use_this_dataset = :use_the_expanded_dataset
    # ======================================================================= #
    # === showhighest --use-a-local-check
    # ======================================================================= #
    when /^-?-?use(_|-| )?a(_|-| )?local(_|-| )?check$/i,
         /^-?-?calculate(_|-| )?as(_|-| )?is$/i
      @use_this_dataset = :use_a_local_check
    end
  end
end

#notify_the_user_that_we_have_finished_fetching_the_local_urlsObject

#

notify_the_user_that_we_have_finished_fetching_the_local_urls

#


116
117
118
119
120
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 116

def notify_the_user_that_we_have_finished_fetching_the_local_urls
  e # Add a newline.
  e "#{rev}Finished fetching the local URLs. We will display them now.#{N}"
  e
end

#report_resultsObject Also known as: report

#

report_results

#


309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 309

def report_results
  sort_results
  n_rjust = display_n?.to_s.size
  @results.each_with_index { |entry, index|
    index    += 1
    index     = index.to_s.rjust(n_rjust)
    # ===================================================================== #
    # For now, we shorten the url.
    # ===================================================================== #
    local_url = remove_file_suffix(
      File.basename(entry.first).strip
    ).strip
    local_url = '%-36s' % local_url # Then we pad it.
    _ = '%.3f' % entry[1].to_s
    filesize  = '%12s' % beautify_file_size(_)
    e rev+'  ('+sfancy(index)+rev+') '+
      steelblue(local_url)+"#{rev} #{swarn(filesize)}"
  }
end

#resetObject

#

reset (reset tag)

#


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 68

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @use_this_dataset
  #
  # This variable must be a Symbol. The allowed symbols are:
  #
  #   :use_the_expanded_dataset
  #   :use_a_local_check
  #
  # The first one is much faster, but will not be as accurate, as it
  # does not do a full check on every available, local program.
  #
  # The user can override this on the commandline - see the menu()
  # interface in how to do this.
  # ======================================================================= #
  @use_this_dataset = :use_the_expanded_dataset # This is the faster variant.
  # ======================================================================= #
  # === @dataset
  # ======================================================================= #
  @dataset = nil
end

#round(number, n_positions = 3) ⇒ Object

#

round

#


234
235
236
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 234

def round(number, n_positions = 3)
  ( number * 10 ** n_positions ).floor.to_f / (10 ** n_positions)
end

#runObject

#

run (run tag)

#


358
359
360
361
362
363
364
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 358

def run
  menu
  inform_the_user_what_we_will_do
  sanitize_available_programs
  notify_the_user_that_we_have_finished_fetching_the_local_urls
  report_results # report results
end

#sanitize_available_programsObject

#

sanitize_available_programs

#


255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 255

def sanitize_available_programs
  use_the_expanded_dataset = use_the_expanded_dataset?
  array = [] # Dump the information into this array here.
  _ = @available_programs
  _.each {|i|
    # ===================================================================== #
    # Obtain the dataset for this program next.
    # ===================================================================== #
    if use_the_expanded_dataset
      this_file = "#{directory_expanded_cookbooks?}#{i}.yml"
      if File.exist? this_file
        dataset = YAML.load_file(this_file)
        url  = dataset[:url1]
        size = dataset[:archive_size] 
      else
        no_file_exists_at(this_file)
      end
      # dataset = this_file
    else
      @dataset = action(:SanitizeCookbook, i) { :be_fast_and_be_quiet }
      url = @dataset.program_path? # Keep the local URL here.
      if url.nil?
        e rev+'`'+simp(i.to_s)+rev+'` is nil, probably because it does not '\
          'exist locally.'
        e rev+'Please consider fixing this problem.'
        if EXIT_ON_MISSING_ENTRY
          e rev+'We will exit now as the constant EXIT_ON_MISSING_ENTRY '\
            'was set to true.'
          exit
        end
      end
      size = @dataset.size? # Keep the filesize here.
      # =================================================================== #
      # Handle the case when the filesize is 0. In this case we will
      # query the local file.
      # =================================================================== #
      if (size == 0) and (url and File.file?(url))
        size = File.size(url)
      end
    end
    if @debug
      e crimson('DEBUG:')+rev+' Filesize of '+slateblue(i.to_s)+
        rev+' is '+orange(size)+rev+'.'
    end
    if url
      array << [ url, size ] # Then append into the main Array containing this information.
    end
  }
  @available_programs = array # Store it here finally.
end

#set_display_top_n(i = DISPLAY_N_PROGRAMS_BY_DEFAULT) ⇒ Object

#

set_display_top_n

#


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

def set_display_top_n(
    i = DISPLAY_N_PROGRAMS_BY_DEFAULT
  )
  if i.is_a?(String) and i.empty?
    i = :default
  end 
  if i.is_a? Array # Handle arrays first.
    if i.empty?
      i = DISPLAY_N_PROGRAMS_BY_DEFAULT # Use default.
    else
      i = i.first
    end
  elsif i.is_a? Symbol
    case i # case tag
    # ===================================================================== #
    # === :display_ten_programs
    # ===================================================================== #
    when :display_ten_programs
      i = 10
    # ===================================================================== #
    # === :display_twenty_programs
    # ===================================================================== #
    when :display_twenty_programs
      i = 20
    # ===================================================================== #
    # === :display_fifty_programs
    # ===================================================================== #
    when :display_fifty_programs,
         :default
      i = 50
    end
  end
  case i # case tag
  # ======================================================================= #
  # === highest --help
  # ======================================================================= #
  when /-?-?help$/i
    show_help; exit
  end
  i = i.to_i unless i.is_a? Integer
  # ======================================================================= #
  # Ensure that we will not grab too many entries.
  # ======================================================================= #
  if i > available_programs?.size.to_i
    i = available_programs?.size.to_i
  end
  @display_top_n = i
end

#show_helpObject

#

show_help (help tag)

#


186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 186

def show_help
  unless Object.const_defined? :ClassDocuShower
    begin
      require 'class_docu_shower'
    rescue LoadError; end
  end
  if Object.const_defined? :ClassDocuShower
    ClassDocuShower[__FILE__]
  end
  e 'This class does not have many special commands.'
  e
  e 'You can pass in a number, which simply means how many'
  e 'programs will be displayed, e. g. as in:'
  e
  e '  highest 250'
  e
end

#sort_resultsObject

#

sort_results

#


125
126
127
128
129
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 125

def sort_results
  @results = @available_programs.sort_by {|name, size|
    size.to_i # We sort by size.
  }.reverse[0...@display_top_n]
end

#startupObject

#

startup

#


95
96
97
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 95

def startup
  @available_programs = available_programs?
end

#use_the_expanded_dataset?Boolean

#

use_the_expanded_dataset?

#

Returns:

  • (Boolean)


248
249
250
# File 'lib/rbt/actions/individual_actions/information/highest.rb', line 248

def use_the_expanded_dataset?
  @use_this_dataset == :use_the_expanded_dataset
end