Class: Roebe::Cat

Inherits:
Base show all
Defined in:
lib/roebe/cat/class.rb

Overview

Roebe::Cat

Constant Summary

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, #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(commandline_arguments = ARGV, run_already = true) ⇒ Cat

#

initialize

#


41
42
43
44
45
46
47
48
49
50
# File 'lib/roebe/cat/class.rb', line 41

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

Class Method Details

.[](i = ARGV) ⇒ Object

#

Roebe::Cat[]

#


211
212
213
# File 'lib/roebe/cat/class.rb', line 211

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

.e(i) ⇒ Object

#

Roebe::Cat.e

#


218
219
220
# File 'lib/roebe/cat/class.rb', line 218

def self.e(i)
  Colours::E.e(i)
end

.register_sigintObject

#

Roebe::Cat.register_sigint

#


23
24
25
# File 'lib/roebe/cat/class.rb', line 23

def self.register_sigint
  Signal.trap('SIGINT') { exit }
end

.try_to_ensure_that_coderay_is_availableObject

#

Roebe::Cat.try_to_ensure_that_coderay_is_available

#


30
31
32
33
34
35
36
# File 'lib/roebe/cat/class.rb', line 30

def self.try_to_ensure_that_coderay_is_available
  unless Object.const_defined? :CodeRay
    begin
      require 'coderay'
    rescue LoadError; end
  end
end

Instance Method Details

#do_obtain_the_content_then_display_itObject

#

do_obtain_the_content_then_display_it

#


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
# File 'lib/roebe/cat/class.rb', line 77

def do_obtain_the_content_then_display_it
  i = non_hyphened_commandline_arguments.join(' ')
  i = i.dup if i.frozen? # "Unfreeze" the frozen String object.
  if i.include? 'localhost'
    i.gsub!(/^http\:\/\/localhost\//,
      ENV['MY_DATA']+'/')
  end
  if i.end_with?(',') and !File.exist?(i)
    i.chop! # Get rid of the trailing ',' anyway.
  end
  if i.is_a?(String) and i.start_with?(':')
    i = rds(beautiful_url(i.delete(':').to_sym))
  end
  # ======================================================================= #
  # === The target file exists
  #
  # Yes, the file exists in this case, hence we can display it.
  # If it is a ruby file then we will try to make use of Coderay.
  # ======================================================================= #
  if File.exist? i
    Roebe::Cat.try_to_ensure_that_coderay_is_available
    # ===================================================================== #
    # First, read in the file.
    # ===================================================================== #
    dataset = File.read(i)
    if shall_we_remove_comments? and dataset.include?('#')
      dataset = dataset.split("\n").map {|entry|
        if entry.include? '#'
          entry = entry.split('#').first.to_s.strip
          entry = nil if entry.empty?
        end
        entry
      }.compact.join("\n")
    end
    extname = File.extname(i).delete('.')
    case extname
    # ===================================================================== #
    # === Colourize .cpp files next
    # ===================================================================== #
    when 'cpp'
      begin
        dataset = CodeRay.scan(dataset, :cpp).term
      rescue LoadError; end
    # ===================================================================== #
    # === Colourize .rb files next
    # ===================================================================== #
    when 'rb',
         'ruby'
      begin
        # ================================================================= #
        # Change the dataset in this case and make use of CodeRay.
        # ================================================================= #
        dataset = CodeRay.scan(dataset, :ruby).term
      rescue LoadError; end
    # ===================================================================== #
    # === Colourize python files
    # ===================================================================== #
    when 'py',
         'python'
      begin
        dataset = CodeRay.scan(dataset, :python).term
      rescue LoadError; end
    end
    e dataset
  else # Ok, the file does not exist at this point.
       # First try a purl.
    _ = BeautifulUrl::BeautifulUrl.new(i, replace: true)
    if _.url_was_found
      # esystem("cat #{_.url?}") # Delegate towards system 'cat'.
      system("cat #{_.url?}") # Delegate towards system 'cat'.
    elsif Dir[i+'*'].size > 0 # Try to find matches
      opn; e 'Did not find `'+sfile(i)+'` but we may '\
             'have found at least one other entry.'
      cat(Dir[i+'*'].reject {|entry| File.directory? entry })
    elsif !i.empty? and i.is_a?(String)
      e i # Simply pass-through in this case.
    else
      opn; e 'No file at '+sfile(i)+' was found. '\
             'We conclude it does not exist.'
    end
  end
end
#

menu (menu tag)

#


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
# File 'lib/roebe/cat/class.rb', line 163

def menu(
    i = commandline_arguments?
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # case tag
    # ===================================================================== #
    # === ruby_cat --remove-comments
    #
    # This entry point will reject all lines that are comments aka
    # have as first non-empty character a '#'.
    #
    # Complete useage example:
    #
    #   rubycat $PERSONAL/yaml/finanzamt/steuernummer.yml --remove-comments
    #
    # ===================================================================== #
    when /^-?-?remove(-|_)?comments$/i
      @shall_we_remove_comments = true
    # ===================================================================== #
    # === ruby_cat --help
    # ===================================================================== #
    when /^-?-?help$/i
      show_help
      exit
    end
  end
end

#resetObject

#

reset (reset tag)

#


55
56
57
58
59
60
61
62
63
# File 'lib/roebe/cat/class.rb', line 55

def reset
  super()
  ::Roebe::Cat.register_sigint
  infer_the_namespace
  # ======================================================================= #
  # === @shall_we_remove_comments
  # ======================================================================= #
  @shall_we_remove_comments = false
end

#runObject

#

run (run tag)

#


203
204
205
206
# File 'lib/roebe/cat/class.rb', line 203

def run
  menu
  do_obtain_the_content_then_display_it
end

#shall_we_remove_comments?Boolean

#

shall_we_remove_comments?

#

Returns:

  • (Boolean)


196
197
198
# File 'lib/roebe/cat/class.rb', line 196

def shall_we_remove_comments?
  @shall_we_remove_comments
end

#show_helpObject

#

show_help

#


68
69
70
71
72
# File 'lib/roebe/cat/class.rb', line 68

def show_help
  e
  e '  --remove-comments # remove all comments from the displayed output'
  e
end