Module: Downloadable Abstract
- Extended by:
- T::Helpers
- Includes:
- Context, Utils::Output::Mixin
- Included in:
- Bottle, Cask::Download, Homebrew::API::JSONDownload, Homebrew::API::SourceDownload, Homebrew::RetryableDownload, Resource, SoftwareSpec
- Defined in:
- downloadable.rb
Overview
Subclasses must implement the abstract methods below.
Instance Attribute Summary collapse
- #checksum ⇒ Checksum? readonly private
- #mirrors ⇒ Array<String> readonly private
- #phase ⇒ Symbol private
- #url ⇒ String, ... readonly private
Instance Method Summary collapse
- #cached_download ⇒ Pathname private
- #clear_cache ⇒ void private
- #download_queue_message ⇒ String private
- #download_queue_name ⇒ String private
- #download_queue_type ⇒ String abstract private
- #download_strategy ⇒ T::Class[AbstractDownloadStrategy] private
- #downloaded! ⇒ void private
- #downloaded? ⇒ Boolean private
- #downloaded_and_valid? ⇒ Boolean private
- #downloader ⇒ AbstractDownloadStrategy private
- #downloading! ⇒ void private
- #extracting! ⇒ void private
- #fetch(verify_download_integrity: true, timeout: nil, quiet: false) ⇒ Pathname private
-
#fetched_size ⇒ Integer?
private
Total bytes downloaded if available.
- #freeze ⇒ T.self_type private
- #initialize ⇒ void private
- #initialize_dup(other) ⇒ void private
-
#total_size ⇒ Integer?
private
Total download size if available.
- #verified! ⇒ void private
- #verify_download_integrity(filename) ⇒ void private
- #verifying! ⇒ void private
- #version ⇒ Version? private
Methods included from Utils::Output::Mixin
#issue_reporting_message, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #opoo_outside_github_actions, #opoo_without_github_actions_annotation, #pretty_deprecated, #pretty_disabled, #pretty_duration, #pretty_install_status, #pretty_installed, #pretty_uninstalled, #pretty_upgradable
Methods included from Context
current, current=, #debug?, #quiet?, #verbose?, #with_context
Instance Attribute Details
#checksum ⇒ Checksum? (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
21 22 23 |
# File 'downloadable.rb', line 21 def checksum @checksum end |
#mirrors ⇒ Array<String> (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
24 25 26 |
# File 'downloadable.rb', line 24 def mirrors @mirrors end |
#phase ⇒ Symbol
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
27 28 29 |
# File 'downloadable.rb', line 27 def phase @phase end |
#url ⇒ String, ... (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
18 19 20 |
# File 'downloadable.rb', line 18 def url @url end |
Instance Method Details
#cached_download ⇒ Pathname
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
96 97 98 |
# File 'downloadable.rb', line 96 def cached_download downloader.cached_location end |
#clear_cache ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
101 102 103 |
# File 'downloadable.rb', line 101 def clear_cache downloader.clear_cache end |
#download_queue_message ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
75 76 77 |
# File 'downloadable.rb', line 75 def "#{download_queue_type} #{download_queue_name}" end |
#download_queue_name ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
69 |
# File 'downloadable.rb', line 69 def download_queue_name = download_name |
#download_queue_type ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
72 |
# File 'downloadable.rb', line 72 def download_queue_type; end |
#download_strategy ⇒ T::Class[AbstractDownloadStrategy]
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
126 127 128 |
# File 'downloadable.rb', line 126 def download_strategy @download_strategy ||= T.must(determine_url).download_strategy end |
#downloaded! ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
32 |
# File 'downloadable.rb', line 32 def downloaded! = (@phase = :downloaded) |
#downloaded? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
80 81 82 |
# File 'downloadable.rb', line 80 def downloaded? cached_download.exist? end |
#downloaded_and_valid? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
85 86 87 88 89 90 91 92 93 |
# File 'downloadable.rb', line 85 def downloaded_and_valid? return false unless cached_download.file? return false if checksum.blank? with_context(quiet: true) { verify_download_integrity(cached_download) } true rescue ChecksumMismatchError false end |
#downloader ⇒ AbstractDownloadStrategy
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
131 132 133 134 135 136 137 138 139 |
# File 'downloadable.rb', line 131 def downloader @downloader ||= begin primary_url, *mirrors = determine_url_mirrors raise ArgumentError, "attempted to use a `Downloadable` without a URL!" if primary_url.blank? download_strategy.new(primary_url, download_name, version, mirrors:, cache:, **T.must(@url).specs) end end |
#downloading! ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
30 |
# File 'downloadable.rb', line 30 def downloading! = (@phase = :downloading) |
#extracting! ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
38 |
# File 'downloadable.rb', line 38 def extracting! = (@phase = :extracting) |
#fetch(verify_download_integrity: true, timeout: nil, quiet: false) ⇒ Pathname
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'downloadable.rb', line 148 def fetch(verify_download_integrity: true, timeout: nil, quiet: false) downloading! cache.mkpath begin downloader.quiet! if quiet downloader.fetch(timeout:) rescue ErrorDuringExecution, CurlDownloadStrategyError => e raise DownloadError.new(self, e) end downloaded! download = cached_download verify_download_integrity(download) if verify_download_integrity download end |
#fetched_size ⇒ Integer?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Total bytes downloaded if available.
107 108 109 |
# File 'downloadable.rb', line 107 def fetched_size downloader.fetched_size end |
#freeze ⇒ T.self_type
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
61 62 63 64 65 66 |
# File 'downloadable.rb', line 61 def freeze @checksum.freeze @mirrors.freeze @version.freeze super end |
#initialize ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
41 42 43 44 45 46 47 48 49 50 |
# File 'downloadable.rb', line 41 def initialize @url = T.let(nil, T.nilable(URL)) @checksum = T.let(nil, T.nilable(Checksum)) @mirrors = T.let([], T::Array[String]) @version = T.let(nil, T.nilable(Version)) @download_strategy = T.let(nil, T.nilable(T::Class[AbstractDownloadStrategy])) @downloader = T.let(nil, T.nilable(AbstractDownloadStrategy)) @download_name = T.let(nil, T.nilable(String)) @phase = T.let(:preparing, Symbol) end |
#initialize_dup(other) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
53 54 55 56 57 58 |
# File 'downloadable.rb', line 53 def initialize_dup(other) super @checksum = @checksum.dup @mirrors = @mirrors.dup @version = @version.dup end |
#total_size ⇒ Integer?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Total download size if available.
113 114 115 |
# File 'downloadable.rb', line 113 def total_size @total_size ||= T.let(downloader.total_size, T.nilable(Integer)) end |
#verified! ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
36 |
# File 'downloadable.rb', line 36 def verified! = (@phase = :verified) |
#verify_download_integrity(filename) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'downloadable.rb', line 168 def verify_download_integrity(filename) if filename.file? ohai "Verifying checksum for '#{filename.basename}'" if verbose? filename.verify_checksum(checksum) verified! end rescue ChecksumMissingError return if silence_checksum_missing_error? opoo <<~EOS Cannot verify integrity of '#{filename.basename}'. No checksum was provided. For your reference, the checksum is: sha256 "#{filename.sha256}" EOS end |
#verifying! ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
34 |
# File 'downloadable.rb', line 34 def = (@phase = :verifying) |
#version ⇒ Version?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
118 119 120 121 122 123 |
# File 'downloadable.rb', line 118 def version return @version if @version && !@version.null? version = determine_url&.version version unless version&.null? end |