Class: Roebe::ReplaceGlobalVariablesInThisFile

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

Overview

Roebe::ReplaceGlobalVariablesInThisFile

Constant Summary

Constants inherited from Base

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

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, &block) ⇒ ReplaceGlobalVariablesInThisFile

#

initialize

#


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/roebe/classes/replace_global_variables_in_this_file.rb', line 27

def initialize(
    i           = ARGV,
    run_already = true,
    &block
  )
  reset
  set_commandline_arguments(i)
  if block_given?
    yielded = yield
    case yielded
    # === :be_quiet
    when :be_quiet
      set_be_quiet
    end
  end
  run if run_already
end

Instance Method Details

#detect_all_global_variables_in_this_dataset(i) ⇒ Object

#

detect_all_global_variables_in_this_dataset

#


64
65
66
67
68
69
70
71
# File 'lib/roebe/classes/replace_global_variables_in_this_file.rb', line 64

def detect_all_global_variables_in_this_dataset(i)
  # ======================================================================= #
  # See: https://rubular.com/r/WgiHym6Do0nXRF
  # ======================================================================= #
  use_this_regex = /(\$[A-Za-z0-9_-]+)\/?/
  scanned = i.scan(use_this_regex).flatten
  return scanned
end

#resetObject

#

reset (reset tag)

#


48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/roebe/classes/replace_global_variables_in_this_file.rb', line 48

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @save_into_this_file
  # ======================================================================= #
  @save_into_this_file = '/Depot/j/test.md'
  # ======================================================================= #
  # === @overwrite_the_original_file
  # ======================================================================= #
  @overwrite_the_original_file = true
end

#runObject

#

run

#


76
77
78
79
80
81
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
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
# File 'lib/roebe/classes/replace_global_variables_in_this_file.rb', line 76

def run
  be_verbose = be_verbose?
  use_this_file = first?
  if use_this_file
    dataset = readlines_via_proper_encoding(use_this_file).dup
    if dataset.include? '$'
      original_array = detect_all_global_variables_in_this_dataset(dataset).flatten.sort.uniq
      # =================================================================== #
      # We have sorted them alphabetically here, but this leads to a small
      # problem: we may have ENV variables such as:
      #
      #     MULTIMEDIA
      #
      #   as well as
      #
      #     MULTIMEDIA_PARADISE
      #
      # So, if we thus replace all global variables that contain
      # MULTIMEDIA with the corresponding global variable then
      # we will garble up MULTIMEDIA_PARADISE since it contains
      # that name. The current solution to this problem is to
      # sort the above array by length first, so we will first
      # replace the longer ENV variables, and slowly work our
      # way to the smallest ENV variable. That way we can solve
      # the above problem almost perfectly; it still is not a 100%
      # perfect solution in the event of same-sized ENV variables,
      # but by and large it works for our use case here, so we
      # can retain that solution.
      # =================================================================== #
      original_array = original_array.sort_by {|entry| entry.size }.reverse
      if be_verbose
        opne rev+'A total of '+steelblue(original_array.size.to_s)+
             ' unique entries were discovered.'
      end
      expanded_array = original_array.map {|entry|
        convert_global_env(entry) # Find the expansion next.
      }
      hash = Hash[original_array.zip(expanded_array)]
      original_array.each {|this_entry|
        use_this_replacement = hash[this_entry].squeeze('/')
        if be_verbose
          opne rev+'Now replacing '+
               steelblue(this_entry)+
               rev+' with '+
               lightblue(use_this_replacement)+
               rev+'.'
        end
        dataset.gsub!(
          this_entry,
          use_this_replacement
        )
      }
    end
    # ===================================================================== #
    # Next, re-"read" in that dataset aka convert it into an array.
    # Then convert that Array into a Hash. Then convert any
    # entries pointing to an existing key to that key directly.
    #
    # This is specifically done as a work around over "doskeys", so
    # don't expect this subsection to remain in effect forever.
    # ===================================================================== #
    array = dataset.split("\n")
    hash.clear
    array.each {|entry|
      if entry.include? '='
        splitted = entry.split('=')
        hash[splitted.first] = splitted.last
      end
    }
    dataset = ''.dup
    array.each {|line|
      if line.include? '='
        splitted = line.split('=')
        if hash.has_key? splitted.last # Such as: tosongs=pwdsongs
          splitted[1] = hash[splitted.last]
        end
        line = splitted.join('=')
      end
      dataset << "#{line}\n"
    }
    save_this_dataset(dataset)
  else
    no_file_exists_at(use_this_file.to_s)
  end
end

#save_this_dataset(what, into = @save_into_this_file) ⇒ Object

#

save_this_dataset

#


165
166
167
168
169
170
171
172
173
174
175
# File 'lib/roebe/classes/replace_global_variables_in_this_file.rb', line 165

def save_this_dataset(
    what, into = @save_into_this_file
  )
  if @overwrite_the_original_file
    into = first?
  end
  if be_verbose?
    opne rev+'Saving into `'+sfile(into)+'`.'
  end
  write_what_into(what, into)
end