Class: Homebrew::Livecheck::Strategy::Cpan
- Inherits:
-
Object
- Object
- Homebrew::Livecheck::Strategy::Cpan
- Extended by:
- T::Sig
- Defined in:
- livecheck/strategy/cpan.rb
Overview
The Cpan strategy identifies versions of software at cpan.metacpan.org by checking directory listing pages.
CPAN URLs take the following formats:
https://cpan.metacpan.org/authors/id/H/HO/HOMEBREW/Brew-v1.2.3.tar.gz
https://cpan.metacpan.org/authors/id/H/HO/HOMEBREW/brew/brew-v1.2.3.tar.gz
In these examples, HOMEBREW
is the author name and the preceding H
and HO
directories correspond to the first letter(s). Some authors
also store files in subdirectories, as in the second example above.
Constant Summary collapse
- NICE_NAME =
"CPAN"
- URL_MATCH_REGEX =
The
Regexp
used to determine if the strategy applies to the URL. %r{ ^https?://cpan\.metacpan\.org (?<path>/authors/id(?:/[^/]+){3,}/) # Path before the filename (?<prefix>[^/]+) # Filename text before the version -v?\d+(?:\.\d+)* # The numeric version (?<suffix>[^/]+) # Filename text after the version }ix.freeze
Class Method Summary collapse
-
.find_versions(url, regex, cask: nil, &block) ⇒ Hash{Symbol => T.untyped}
Generates a URL and regex (if one isn’t provided) and passes them to PageMatch.find_versions to identify versions in the content.
-
.match?(url) ⇒ Boolean
Whether the strategy can be applied to the provided URL.
Class Method Details
.find_versions(url, regex, cask: nil, &block) ⇒ Hash{Symbol => T.untyped}
Generates a URL and regex (if one isn’t provided) and passes them to PageMatch.find_versions to identify versions in the content.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'livecheck/strategy/cpan.rb', line 56 def self.find_versions(url, regex, cask: nil, &block) match = url.match(URL_MATCH_REGEX) # Use `\.t` instead of specific tarball extensions (e.g. .tar.gz) suffix = match[:suffix].sub(/\.t(?:ar\..+|[a-z0-9]+)$/i, "\.t") # The directory listing page where the archive files are found page_url = "https://cpan.metacpan.org#{match[:path]}" # Example regex: `/href=.*?Brew[._-]v?(\d+(?:\.\d+)*)\.t/i` regex ||= /href=.*?#{match[:prefix]}[._-]v?(\d+(?:\.\d+)*)#{Regexp.escape(suffix)}/i PageMatch.find_versions(page_url, regex, cask: cask, &block) end |
.match?(url) ⇒ Boolean
Whether the strategy can be applied to the provided URL.
38 39 40 |
# File 'livecheck/strategy/cpan.rb', line 38 def self.match?(url) URL_MATCH_REGEX.match?(url) end |