Class: RBT::GenerateSqlTable

Inherits:
Base show all
Defined in:
lib/rbt/sql/generate_sql_table.rb

Overview

RBT::GenerateSqlTable

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

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#cat, #cd_back_to_the_current_working_directory, #consider_reporting_how_many_programs_are_registered, #cookbook_files?, #copy_recursively, #delete_code_of_conduct?, #determine_appdir_prefix_from_this_input, #directory_validation?, #do_not_show_names, #fast_return_file_size_of_this_program, #file_last_symlinked_program?, #file_programs_version_url, #gem_version, #is_a_64bit_system?, #is_ccache_available?, #is_porg_available?, #is_this_binary_registered?, #is_this_program_included?, #make_command?, #make_install_command?, #new_cookbook_instance_for, #program_exists?, #publish_list_of_all_programs_version, #rcp, registered_binaries?, #remove_symlink, #rename_kde_konsole_tab, #repackage, #report_n_programs, #report_working_directory, #return_compile_time_statistics, #return_n_random_characters, #return_version_of_this_program, #run_make_then_make_install, #sanitize_url1_entry, #set_source_directory, #show_overview_over_available_utility_scripts, #symlink_all_files_from_this_directory_to_that_directory, #system_tags?, #upload_list_of_all_programs_version, #use_yaml_database_for_tags?, #warn_and_exit, #wget

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_arguments, #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_meson_installed?, #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_directory_was_found_at, #no_opn, #no_such_file_exists, #open_in_browser, #open_in_editor, #opncomment, #opne, #opnef, #opnerev, #opnerror, #opnesystem, #opnewarn, #opnfancy, #opnn, #otomato, #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_the_first_commandline_argument, #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_name, #return_program_name_for_gobolinux_systems, #return_program_name_via_program_information, #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, #rpn, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #set_use_colours, #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(commandline_arguments = nil, run_already = true) ⇒ GenerateSqlTable

#

initialize

#


27
28
29
30
31
32
33
34
35
36
# File 'lib/rbt/sql/generate_sql_table.rb', line 27

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

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::GenerateSqlTable[]

#


244
245
246
# File 'lib/rbt/sql/generate_sql_table.rb', line 244

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

Instance Method Details

#into?Boolean

#

into?

#

Returns:

  • (Boolean)


92
93
94
# File 'lib/rbt/sql/generate_sql_table.rb', line 92

def into?
  @into
end

#notify_the_user_into_which_file_we_will_store_the_databaseObject

#

notify_the_user_into_which_file_we_will_store_the_database

This will notify the user that the database will be stored into the file called “registered_programs.db”, by default.

#


102
103
104
105
# File 'lib/rbt/sql/generate_sql_table.rb', line 102

def notify_the_user_into_which_file_we_will_store_the_database
  opne "#{rev}This class will generate the SQL dump "\
       "into this file: `#{sfile(@into)}#{rev}`"
end

#resetObject

#

reset (reset tag)

#


41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/rbt/sql/generate_sql_table.rb', line 41

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @string_storing_the_content_of_the_table
  # ======================================================================= #
  @string_storing_the_content_of_the_table = ''.dup
  # ======================================================================= #
  # === @into
  # ======================================================================= #
  @into = 'registered_programs.db'
end

#runObject

#

run (run tag)

#


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
161
162
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
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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# File 'lib/rbt/sql/generate_sql_table.rb', line 110

def run
  # ======================================================================= #
  # Require the cookbook-class next.
  # ======================================================================= #
  notify_the_user_into_which_file_we_will_store_the_database
  into = into?
  # ======================================================================= #
  # Next read in our main sql-specification, which is distributed as
  # part of the RBT suite:
  # ======================================================================= #
  # bl $RBT/yaml/sql/CREATE_TABLE_REGISTERED_PROGRAMS.sql
  # ======================================================================= #
  sqlite_create_table_command = File.read(
    "#{yaml_directory?}sql/CREATE_TABLE_REGISTERED_PROGRAMS.sql"
  ).split("\n").map {|entry|
    if entry.include? '#'
      entry = entry.split('#').first.strip
    end
    entry
  }.join("\n")
  # ======================================================================= #
  # Always remove the old database:
  # ======================================================================= #
  delete_file(@into) if File.exist? @into
  # ======================================================================= #
  # Create the database here, via the commandline variant for sqlite3:
  # ======================================================================= #
  esystem 'sqlite3 '+into+' "'+sqlite_create_table_command+'"' 
  # ======================================================================= #
  # Iterate over every available program next:
  # ======================================================================= #
  available_programs?.each_with_index {|this_program, program_number| program_number += 1
    dataset_from_expanded_cookbooks = load_dataset_from_this_expanded_cookbook(this_program) { :be_quiet }
    if dataset_from_expanded_cookbooks.nil? 
      dataset_from_expanded_cookbooks = action(:SanitizeCookbook, this_program) { :fast }.cookbook_dataset?
    end
    # ===================================================================== #
    # Next define some helper-variables, to more easily deal with the
    # SQL dataset at hand:
    # ===================================================================== #
    program_path                     = dataset_from_expanded_cookbooks[:program_path]
    program_version                  = dataset_from_expanded_cookbooks[:program_version].to_s
    extract_to                       = dataset_from_expanded_cookbooks[:extract_to]
    licence                          = dataset_from_expanded_cookbooks[:licence].to_s
    program_name_and_program_version = dataset_from_expanded_cookbooks[:program_name_and_program_version]
    use_this_build_system            = dataset_from_expanded_cookbooks[:use_this_build_system]
    use_build_directory              = dataset_from_expanded_cookbooks[:use_build_directory]
    use_build_directory              = to_0_or_1(use_build_directory).to_s
    homepage                         = dataset_from_expanded_cookbooks[:homepage].to_s
    archive_type                     = dataset_from_expanded_cookbooks[:archive_type].to_s
    archive_size                     = dataset_from_expanded_cookbooks[:archive_size].to_s

    case use_this_build_system
    # ===================================================================== #
    # === :infer_automatically
    # ===================================================================== #
    when :infer_automatically
      use_this_build_system = 'configure' # Hardcoded assumption for now.
    end
    if extract_to.nil? or extract_to.empty?
      extract_to = "#{log_dir?}"\
                   "#{dataset_from_expanded_cookbooks[:program_name_and_program_version]}"\
                   "/"
    end
    # ===================================================================== #
    # We will store several entries:
    #
    #   (1) the index (ID)
    #   (2) the name of the program
    #   (3) the "URL" to the local program path
    #   (4) the homepage to the remote website for this program
    #   (5) the raw archive size (typically in .tar.xz format)
    #
    # ===================================================================== #
    add_this_string = "INSERT INTO REGISTERED_PROGRAMS ("\
                      "PROGRAM_NUMBER, "\
                      "PROGRAM_NAME, "\
                      "PROGRAM_PATH, "\
                      "PROGRAM_VERSION, "\
                      "EXTRACT_TO, "\
                      "USE_THIS_BUILD_SYSTEM, "\
                      "USE_BUILD_DIRECTORY, "\
                      "LICENCE, "\
                      "PROGRAM_NAME_AND_PROGRAM_VERSION, "\
                      "HOMEPAGE, "\
                      "ARCHIVE_TYPE, "\
                      "ARCHIVE_SIZE"\
                      ") VALUES "\
                      "(#{program_number}, "\
                      "'#{this_program}', "\
                      "'#{program_path}', "\
                      "'#{program_version}', "\
                      "'#{extract_to}', "\
                      "'#{use_this_build_system}', "\
                      "'#{use_build_directory}', "\
                      "'#{licence}', "\
                      "'#{program_name_and_program_version}', "\
                      "'#{homepage}', "\
                      "'#{archive_type}', "\
                      "#{archive_size.to_i}"\
                      ");\n"
    @string_storing_the_content_of_the_table << add_this_string
      
  }
  store_the_main_string
  opne "#{rev}Next using the sqlite3-binary to pull in "\
       "all the insert-statements"
  opne 'that were just autogenerated.'
  # ======================================================================= #
  # Next, run the insert into command next:
  # ======================================================================= #
  esystem "sqlite3 #{into} < insert_#{into}"
  # ======================================================================= #
  # And remove the helper .db next:
  # ======================================================================= #
  _ = "insert_#{into}"
  delete_file(_) if File.exist? _ # Past this point it should be gone.
  if is_on_roebe? and File.exist?(into)
    # ===================================================================== #
    # On my home system we will also copy the generated
    # file "registered_programs.db" to the assumed default
    # rbt-location.
    # ===================================================================== #
    new_target = "#{log_dir?}database/#{File.basename(into)}"
    opne 'As we are on a roebe-system we will also copy'
    opne 'this database into its new location at'
    opne "`#{sfile(new_target)}`."
    copy_file(into, new_target)
  end
end

#store_the_main_string(into = "insert_#{into?}") ⇒ Object

#

store_the_main_string

#


70
71
72
73
74
75
76
77
78
79
80
# File 'lib/rbt/sql/generate_sql_table.rb', line 70

def store_the_main_string(
    into = "insert_#{into?}"
  )
  if File.exist?(into) and into.start_with?('insert_')
    delete_file(into)
  end
  what = string_storing_the_content_of_the_table?
  into = File.absolute_path(into) unless into.include?('/')
  write_what_into(what, into)
  opne "Finished writing into `#{sfile(into)}`."
end

#string_storing_the_content_of_the_table?Boolean

#

string_storing_the_content_of_the_table?

#

Returns:

  • (Boolean)


85
86
87
# File 'lib/rbt/sql/generate_sql_table.rb', line 85

def string_storing_the_content_of_the_table?
  @string_storing_the_content_of_the_table
end

#to_0_or_1(i) ⇒ Object

#

to_0_or_1

#


57
58
59
60
61
62
63
64
65
# File 'lib/rbt/sql/generate_sql_table.rb', line 57

def to_0_or_1(i)
  case i
  when true, 't'
    i = 1
  when false, 'f'
    i = 0
  end
  return i
end