Class: Roebe::FindDuplicateEntriesInAliasFile

Inherits:
Base
  • Object
show all
Defined in:
lib/roebe/classes/find_duplicate_entries_in_alias_file.rb

Overview

Roebe::FindDuplicateEntriesInAliasFile

Constant Summary collapse

BASE_DIR =
#

BASE_DIR

#
File.absolute_path(
  Roebe.project_base_directory?+'../rcfiles/yaml/'
)+'/'
ARRAY =
#

ARRAY

#
%w(
  cd_aliases.yml
  aliases.yml
  programs_aliases.yml
)

Constants inherited from Base

Base::COLOURS, Base::HOME_DIRECTORY_OF_USER_X, Base::N, Base::NAMESPACE

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#actions, #append_this_onto_that_file, #append_what_into, #be_silent, #be_verbose?, #beautiful_url, #burlywood, #call_next, #chdir, #cheerful_guy, #cliner, #complex_esystem, #convert_global_env, #copy_directory, #copy_file, #cornflowerblue, #create_directory, #crimson, #current_month?, #current_time?, #current_year?, #cyan, #darkcyan, #darkgreen, #darkkhaki, #darkslateblue, #deeppink, #delete_symlink, #do_not_use_the_base_colours, #do_use_the_base_colours, #e, #ecomment, #editor_to_use?, #efancy, #eimp, #emphasis, #ensure_main_encoding, #ensure_utf_encoding, #eparse, #erev, #esteelblue, #etomato, #ewarn, #exit_program, #firebrick, #get_current_day, #get_current_month, #get_files_and_directories, #get_files_from, #get_german_name_for_this_weekday, #gold, #green, #grey, #hh_mm_ss, #hh_mm_ss_day_month_year, #home_dir?, #home_directory_of_user_x?, #infer_the_namespace, #internal_hash?, #is_a_directory?, #is_a_file?, #is_a_jpg_file?, #is_an_image_file?, #is_archive?, #is_audio_file?, #is_in_studium_dir?, #is_multimedia_file?, #is_on_roebe?, #is_on_windows?, #is_studium_available?, #is_symlink?, #is_this_a_ruby_file?, #is_video_file?, #iso_encoding?, #le, #left_colour, #lightblue, #lightgreen, #lightseagreen, #lightsteelblue, #lime, #limegreen, #localhost_to_data, #log_directory?, #main_encoding?, #mediumorchid, #mediumpurple, #mediumseagreen, #mediumslateblue, #mediumspringgreen, #mediumturquoise, #mkdir_p, #mv, #n_days_in_this_month, #n_pages_in_this_pdf_file?, #namespace?, #no_file_exists_at, #ogrey, #olive, #olivedrab, #open_in_browser, #opne, #opnesystem, #opnn, #orange, #orchid, #orev, #palegoldenrod, #palevioletred, #pink, #powderblue, #programs_dir?, #project_base_dir?, #random_html_colour, #rds, #read_file_in_iso_encoding, #read_file_via_the_default_encoding, #read_lines_via_iso_encoding, #readlines_with_main_encoding, #red, #register_sigint, #remove, #remove_directory, #remove_file, #rename_kde_konsole_tab, #replace_localhost_with_data, #report_pwd, #require_rescue, #reset_the_internal_hash, #return_all_directories_from_this_directory, #return_all_files_from_this_directory, #return_current_directory, #return_dd_mm_yyyy, #return_file_or_directory_of, #return_files_from_pwd, #return_last_part_of_the_current_directory, #return_utc, #rev, #right_arrow?, #right_colour, #roebe_log_directory?, #rosybrown, #royalblue, #ruby_base_directory?, #run_in_background, #run_rcfiles_then_run_ata_via_qdbus, #sandybrown, #sdir, #seagreen, #set_be_verbose, #set_xorg_buffer, #sfancy, #sfile, #show_help, #silent_redirection?, #simp, #simple_esystem, #skyblue, #slateblue, #slategray, #springgreen, #steelblue, #string_italic, #swarn, #symlink, #teal, #temp_dir?, #to_camelcase, #to_counted_hash, #tomato, #touch, #try_to_require_the_beautiful_url_gem, #try_to_require_the_html_template, #try_to_require_the_open_gem, #try_to_require_the_program_information_gem, #try_to_require_the_xorg_buffer, #use_colours?, #verbose_truth, #weekday?, #word_wrap, #write_what_into, #yellow

Methods included from Base::CommandlineArguments

#append_onto_the_commandline_arguments, #clear_commandline_arguments, #commandline_arguments?, #commandline_arguments_as_string?, #commandline_arguments_without_leading_hyphens?, #first_argument?, #first_argument_without_leading_hyphens?, #has_an_argument_been_passed?, #remove_hyphened_arguments_from_the_commandline_arguments, #return_commandline_arguments_with_leading_hyphens, #second_argument?, #set_commandline_arguments

Constructor Details

#initialize(i = ARGV, run_already = true) ⇒ FindDuplicateEntriesInAliasFile

#

initialize

#


41
42
43
44
45
46
47
48
# File 'lib/roebe/classes/find_duplicate_entries_in_alias_file.rb', line 41

def initialize(
    i           = ARGV,
    run_already = true
  )
  reset
  set_commandline_arguments(i)
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

Roebe::FindDuplicateEntriesInAliasFile

#


174
175
176
# File 'lib/roebe/classes/find_duplicate_entries_in_alias_file.rb', line 174

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

Instance Method Details

#add_to_duplicates(i, use_this_symbol_key = :cd_aliases) ⇒ Object Also known as: add

#

add_to_duplicates (add tag)

#


88
89
90
91
92
93
94
# File 'lib/roebe/classes/find_duplicate_entries_in_alias_file.rb', line 88

def add_to_duplicates(
    i,
    use_this_symbol_key = :cd_aliases
  )
  @duplicates[use_this_symbol_key] << i
  @duplicates[use_this_symbol_key].flatten!
end

#base_dir?Boolean

#

base_dir?

#

Returns:

  • (Boolean)


70
71
72
73
74
75
76
# File 'lib/roebe/classes/find_duplicate_entries_in_alias_file.rb', line 70

def base_dir?
  if is_on_roebe?
    BASE_DIR
  else
    "#{ruby_base_directory?}rcfiles/yaml/"
  end
end

#duplicates?Boolean

#

duplicates?

#

Returns:

  • (Boolean)


81
82
83
# File 'lib/roebe/classes/find_duplicate_entries_in_alias_file.rb', line 81

def duplicates?
  @duplicates
end

#process_main_arraysObject

#

process_main_arrays

We iterate over our main Arrays here.

Note that we can not use YAML.load_file() as it would overload existing keys.

#


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
# File 'lib/roebe/classes/find_duplicate_entries_in_alias_file.rb', line 104

def process_main_arrays
  # ======================================================================= #
  # ARRAY will typically include the following three .yml files:
  #
  #   "cd_aliases.yml", "aliases.yml", "programs_aliases.yml"
  #
  # ======================================================================= #
  ARRAY.each {|entry|
    symbol_key = entry.to_s.delete_suffix('.yml').to_sym
    entry = base_dir?+entry
    opne "Now checking the file at `#{sfile(entry)}`."
    dataset = default_readlines(entry).
                reject {|line| line.start_with? '#' }.
                reject {|line| !line.include? ':' }.
                reject {|line| line == N }
    keys = dataset
    opne "It has #{simp(keys.size.to_s)} entries."
    original_size = keys.size
    uniq_size     = keys.uniq.size
    unless (original_size == uniq_size)
      opne 'This file '+tomato(
           'contains '+(original_size - uniq_size).to_s+' duplicates')+'. '\
           'Proceeding to determine which duplicates exist ...'
      # =================================================================== #
      # Finally we can add this to the proper entry in the main Hash:
      # =================================================================== #
      selection = dataset.select { |inner_entry|
        dataset.count(inner_entry) > 1
      }.uniq
      add_to_duplicates(
        selection,
        symbol_key
      )
      report_duplicates
    else
      opne mediumslateblue('Excellent! This file has no duplicate entries. \o/')
    end
  }
end

#report_duplicatesObject

#

report_duplicates

#


154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/roebe/classes/find_duplicate_entries_in_alias_file.rb', line 154

def report_duplicates
  _ = duplicates?
  unless _.empty?
    opne 'We found the following '+tomato(_.keys.size.to_s)+' duplicates:'
    unless _.empty?
      _.each_pair {|key, value|
        unless value.empty?
          opne 'For the key '+steelblue(key.to_s)+':'
          value.each {|entry|
            e "  #{steelblue(entry.strip)}"
          }
        end
      }
    end
  end
end

#resetObject

#

reset (reset tag)

#


53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/roebe/classes/find_duplicate_entries_in_alias_file.rb', line 53

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @duplicates
  #
  # This is the most important Hash for this class.
  # ======================================================================= #
  @duplicates = {}
  @duplicates[:cd_aliases]       = []
  @duplicates[:aliases]          = []
  @duplicates[:programs_aliases] = []
end

#runObject

#

run (run tag)

#


147
148
149
# File 'lib/roebe/classes/find_duplicate_entries_in_alias_file.rb', line 147

def run
  process_main_arrays
end