Class: RBT::Action::Extract

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

Overview

RBT::Action::Extract

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 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(i = nil, run_already = true, &block) ⇒ Extract

#

initialize

#


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/rbt/actions/individual_actions/extract/extract.rb', line 20

def initialize(
    i           = nil,
    run_already = true,
    &block
  )
  reset
  case i
  # ======================================================================= #
  # === :do_not_run_yet
  # ======================================================================= #
  when :do_not_run_yet
    i = nil
    run_already = false
  end
  set_commandline_arguments(i)
  do_assume_that_all_commandline_arguments_are_programs_we_seek_to_extract
  # ======================================================================= #
  # === Handle blocks given to this class next
  # ======================================================================= #
  if block_given?
    yielded = yield
    case yielded
    # ===================================================================== #
    # === :do_not_run_yet
    # ===================================================================== #
    when :do_not_run_yet
      run_already = false
    # ===================================================================== #
    # === :be_silent
    #
    # This entry point forces this class to be quiet - aka to output
    # significantly less to the user.
    # ===================================================================== #
    when :be_silent,
         :be_quiet
      @internal_hash[:be_silent_or_verbose] = :be_silent
    end
  end
  run if run_already
end

Instance Method Details

#be_silent_or_verbose?Boolean

#

be_silent_or_verbose?

#

Returns:

  • (Boolean)


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

def be_silent_or_verbose?
  @internal_hash[:be_silent_or_verbose]
end

#delegate_towards_class_extracter(what, extract_to = :default) ⇒ Object Also known as: invoke_class_extracter

#

delegate_towards_class_extracter

This method will delegate towards class Extracter.

#


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

def delegate_towards_class_extracter(
    what,
    extract_to = :default
  )
  case what
  # ======================================================================= #
  # === :default_programs
  # ======================================================================= #
  when :default_programs
    what = extract_these_programs?
  end
  flattened = [what].flatten.compact
  flattened.each {|this_entry|
    if this_entry.is_a?(String) and this_entry.start_with?(':')
      this_entry = try_to_find_an_alternative_path_for_this_source_archive(this_entry.delete(':'))
    elsif this_entry.is_a?(Symbol)
      this_entry = try_to_find_an_alternative_path_for_this_source_archive(this_entry.to_s)
    end
    case extract_to
    # ======================================================================= #
    # === :default
    # ======================================================================= #
    when :default
      extract_to = extract_to?(this_entry)
    end
    # ======================================================================= #
    # Finally, delegate towards Extracter:
    # ======================================================================= #
    Extracter.extract_what_to(this_entry, to: extract_to) { be_silent_or_verbose? }
  }
end

#do_assume_that_all_commandline_arguments_are_programs_we_seek_to_extractObject

#

do_assume_that_all_commandline_arguments_are_programs_we_seek_to_extract

#


98
99
100
101
102
103
# File 'lib/rbt/actions/individual_actions/extract/extract.rb', line 98

def do_assume_that_all_commandline_arguments_are_programs_we_seek_to_extract
  _ = commandline_arguments?
  if _ and !_.empty?
    set_extract_these_programs(_)
  end
end

#do_extract_all_programs_supplied_to_this_class(i = extract_these_programs? ) ⇒ Object

#

do_extract_all_programs_supplied_to_this_class

#


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

def do_extract_all_programs_supplied_to_this_class(
    i = extract_these_programs?
  )
  i.flatten.each {|entry|
    if entry.is_a?(String) and entry.start_with?(':')
      # =================================================================== #
      # Query RawCookbook for the assumed path next:
      # =================================================================== #
      raw_cookbook = action(:raw_cookbook, entry.to_s.delete(':'))
      program_path = raw_cookbook.program_path?
      if File.file?(program_path)
        @extract_to = extract_to?(entry).delete(':')
        message_to_the_user_next_extracting_to_this_directory(program_path, @extract_to)
        return delegate_towards_class_extracter(program_path, @extract_to)
      else
        entry = try_to_find_an_alternative_path_for_this_source_archive(entry)
      end
    end
    entry = entry.first if entry.is_a?(Array)
    if is_this_an_archive? entry
      entry = absolute_path(entry) # Work with the absolute path here.
      # =================================================================== #
      # The target is an archive, so we can extract it:
      # =================================================================== #
      @extract_to = extract_to?(entry)
      message_to_the_user_next_extracting_to_this_directory(entry, @extract_to)
      _result = delegate_towards_class_extracter(entry, @extract_to)
    else
      opne sfile(entry)+rev+' does not appear to be a registered archive type.'
    end
  }
end

#extract_these_programs?Boolean

#

extract_these_programs?

#

Returns:

  • (Boolean)


108
109
110
# File 'lib/rbt/actions/individual_actions/extract/extract.rb', line 108

def extract_these_programs?
  @internal_hash[:extract_these_programs]
end

#message_to_the_user_next_extracting_to_this_directory(entry, extract_to) ⇒ Object

#

message_to_the_user_next_extracting_to_this_directory

#


131
132
133
134
135
136
# File 'lib/rbt/actions/individual_actions/extract/extract.rb', line 131

def message_to_the_user_next_extracting_to_this_directory(
    entry, extract_to
  )
  opne "#{rev}Next extracting #{sfile(entry)}#{rev} "\
       "to #{sdir(extract_to)}#{rev}."
end

#path?Boolean

#

path?

#

Returns:

  • (Boolean)


141
142
143
# File 'lib/rbt/actions/individual_actions/extract/extract.rb', line 141

def path?
  @extract_to
end

#resetObject

#

reset (reset tag)

#


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

def reset
  super()
  try_to_require_the_extracter_gem
  # ======================================================================= #
  # === :extract_these_programs
  # ======================================================================= #
  @internal_hash[:extract_these_programs] = []
  # ======================================================================= #
  # === :be_silent_or_verbose
  # ======================================================================= #
  @internal_hash[:be_silent_or_verbose] = :be_verbose
end

#runObject

#

run (run tag)

#


228
229
230
# File 'lib/rbt/actions/individual_actions/extract/extract.rb', line 228

def run
  do_extract_all_programs_supplied_to_this_class
end

#set_extract_these_programs(i) ⇒ Object Also known as: set_extract_this_program

#

set_extract_these_programs

#


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

def set_extract_these_programs(i)
  unless @internal_hash[:extract_these_programs].include? i
    @internal_hash[:extract_these_programs] << i
    @internal_hash[:extract_these_programs].flatten!
    @internal_hash[:extract_these_programs].compact
  end
end

#set_extract_to(i) ⇒ Object

#

set_extract_to

#


185
186
187
# File 'lib/rbt/actions/individual_actions/extract/extract.rb', line 185

def set_extract_to(i)
  @extract_to = i
end

#try_to_find_an_alternative_path_for_this_source_archive(entry) ⇒ Object

#

try_to_find_an_alternative_path_for_this_source_archive

#


115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/rbt/actions/individual_actions/extract/extract.rb', line 115

def try_to_find_an_alternative_path_for_this_source_archive(entry)
  # =================================================================== #
  # Assume pseudo-symbol here, such as :htop
  # =================================================================== #
  entry = "#{src_dir?}#{entry.to_s.delete(':')}/"
  # =================================================================== #
  # We get the first entry anyway.
  # =================================================================== #
  possible_files = Dir["#{entry}*"]
  entry = possible_files.first unless possible_files.empty?
  return entry
end