Class: RBT::Cookbooks::CheckForNewReleaseOnRubygems

Inherits:
CheckForRemoteWebpages show all
Defined in:
lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb

Overview

RBT::Cookbooks::CheckForNewReleaseOnRubygems

Constant Summary collapse

RUBYGEMS_ORG_DOWNLOADS_URL =
#

RUBYGEMS_ORG_DOWNLOADS_URL

#
'https://rubygems.org/downloads/'
USE_THIS_REGEX =
#

USE_THIS_REGEX

This is the main regex that will be used.

See: rubular.com/r/QcooOoIXVU

#
/    <a rel="nofollow" class="gem__link t-list__item" id="download" href="\/downloads\/(.+).gem">Download<\/a>/

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 CheckForRemoteWebpages

#add_these_programs_were_updated, #array_these_programs_were_updated?, #commandline_size_query_was_issued?, #correct_for_common_mistakes_in_program_names, #dataset?, #distrowatch_url?, #do_use_wget, #ensure_download_mode_is_system_wget_from_now_on, #menu, #notify_the_user_that_no_downloads_have_occurred, #obtain_dataset_from_the_remote_webpage, #report_that_these_programs_were_updated, #report_the_remote_webpage, #return_local_version_of_this_program, #show_help, #that_remote_URL_should_be_at, #update_entry, #use_wget?

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_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(remote_url, run_already = true) ⇒ CheckForNewReleaseOnRubygems

#

initialize

#


44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 44

def initialize(
    remote_url,
    run_already = true
  )
  reset
  set_remote_url(
    remote_url
  )
  case remote_url
  when :dont_run_yet
    run_already = false
  end
  run if run_already
end

Instance Method Details

#apply_the_main_regex_onto_the_datasetObject

#

apply_the_main_regex_onto_the_dataset

#


171
172
173
174
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 171

def apply_the_main_regex_onto_the_dataset
  @dataset =~ USE_THIS_REGEX
  @remote_program_version = $1.to_s.dup
end

#check_this_remote_url(remote_url) ⇒ Object

#

check_this_remote_url

#


195
196
197
198
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 195

def check_this_remote_url(remote_url)
  set_remote_url(remote_url)
  run
end

#colourize_this_local_version(i) ⇒ Object

#

colourize_this_local_version

#


121
122
123
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 121

def colourize_this_local_version(i)
  springgreen(i)
end

#compare_the_remote_program_version_with_the_local_program_versionObject

#

compare_the_remote_program_version_with_the_local_program_version

#


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
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 128

def compare_the_remote_program_version_with_the_local_program_version
  reset_main_array
  program_name = File.basename(@homepage)
  local_version = action(:SanitizeCookbook, program_name) { :fast }.program_version?
  remote_program_version = ProgramInformation.new(@remote_program_version).version?
  if remote_program_version == local_version
    opne "The local program #{sfancy(program_name)} is "\
         "#{turquoise('up to date')}"\
         "! (At version: #{colourize_this_local_version(local_version)})"
  else
    # ===================================================================== #
    # We must build up the remote download-URL next.
    # ===================================================================== #
    remote_download_url =
      "#{RUBYGEMS_ORG_DOWNLOADS_URL}#{@remote_program_version}.gem"
    opne "Now updating to a new program version "\
         "at `#{sfancy(remote_download_url)}`."
    # ===================================================================== #
    # Delegate towards class UpdateEntry next.
    # ===================================================================== #
    update_entry(remote_download_url)
    @array_we_did_update_these_programs << remote_download_url
  end
  unless @array_we_did_update_these_programs.empty?
    opne "#{rev}The following "\
         "#{simp(@array_we_did_update_these_programs.size.to_s)}"\
         " #{rev}programs were updated:"
    @array_we_did_update_these_programs.each {|remote_url|
      e sfancy("  #{remote_url}")
    }
    # ===================================================================== #
    # Also store this result in a module-level instance variable next.
    # That way we can query the state of programs that were compiled.
    # ===================================================================== #
    RBT.set_array_these_ruby_gems_were_updated(
      @array_we_did_update_these_programs
    )
  end
end

#identify_homepageObject

#

identify_homepage

This method will determine the homepage of the given .gem file at hand. Keep in mind that a homepage on rubygems.org may have ‘-’ characters.

#


93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 93

def identify_homepage
  _ = remote_url?
  if _.nil?
    opne 'An URL must be provided to this class.'
    exit
  elsif _.end_with? '.gem'
    basename = File.basename(_)
    basename = ProgramInformation.new(basename).program_name?
    basename << '/' unless basename.end_with? '/'
    @homepage = 'https://rubygems.org/gems/'+basename
    opne "Next checking for any #{crimson('updates')}"\
         " on the remote URL #{sfancy(@homepage)}"
    obtain_dataset
    apply_the_main_regex_onto_the_dataset
    compare_the_remote_program_version_with_the_local_program_version
  end
end

#obtain_dataset(use_this_url = @homepage) ⇒ Object

#

obtain_dataset

The first URL to this method should be the remote homepage of the given .gem at hand.

#


182
183
184
185
186
187
188
189
190
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 182

def obtain_dataset(
    use_this_url = @homepage
  )
  begin
    @dataset = URI.open(use_this_url).read
  rescue OpenURI::HTTPError
    opne 'OpenURI::HTTPError error for `'+sfancy(use_this_url)+'`.'
  end
end

#remote_url?Boolean

#

remote_url?

#

Returns:

  • (Boolean)


82
83
84
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 82

def remote_url?
  @remote_url
end

#resetObject

#

reset

#


62
63
64
65
66
67
68
69
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 62

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @array_we_did_update_these_programs
  # ======================================================================= #
  @array_we_did_update_these_programs = []
end

#reset_main_arrayObject

#

reset_main_array

#


114
115
116
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 114

def reset_main_array
  @array_we_did_update_these_programs = []
end

#runObject

#

run

#


203
204
205
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 203

def run
  identify_homepage
end

#set_remote_url(i) ⇒ Object

#

set_remote_url

#


74
75
76
77
# File 'lib/rbt/check_for_updates/check_for_new_release_on_rubygems.rb', line 74

def set_remote_url(i)
  i = i.first if i.is_a? Array
  @remote_url = i
end