Class: Homebrew::Livecheck::Strategy::PageMatch
- Defined in:
- livecheck/strategy/page_match.rb
Overview
The PageMatch strategy fetches content at a URL and scans it for matching text using the provided regex.
This strategy can be used in a livecheck
block when no specific
strategies apply to a given URL. Though PageMatch will technically
match any HTTP URL, the strategy also requires a regex to function.
The PageMatch.find_versions method can be used within other strategies, to handle the process of identifying version text in content.
Constant Summary collapse
- NICE_NAME =
"Page match"
- PRIORITY =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
A priority of zero causes livecheck to skip the strategy. We do this for Homebrew::Livecheck::Strategy::PageMatch so we can selectively apply it only when a regex is provided in a
livecheck
block. 0
- URL_MATCH_REGEX =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
The
Regexp
used to determine if the strategy applies to the URL. %r{^https?://}i
Class Method Summary collapse
-
.find_versions(url:, regex: nil, provided_content: nil, homebrew_curl: false, **_unused, &block) ⇒ Hash{Symbol => T.untyped}
private
Checks the content at the URL for new versions, using the provided regex for matching.
-
.match?(url) ⇒ Boolean
private
Whether the strategy can be applied to the provided URL.
-
.versions_from_content(content, regex, &block) ⇒ Array<String>
private
Uses the regex to match text in the content or, if a block is provided, passes the page content to the block to handle matching.
Class Method Details
.find_versions(url:, regex: nil, provided_content: nil, homebrew_curl: false, **_unused, &block) ⇒ Hash{Symbol => T.untyped}
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.
Checks the content at the URL for new versions, using the provided regex for matching.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'livecheck/strategy/page_match.rb', line 92 def self.find_versions(url:, regex: nil, provided_content: nil, homebrew_curl: false, **_unused, &block) if regex.blank? && block.blank? raise ArgumentError, "#{Utils.demodulize(T.must(name))} requires a regex or `strategy` block" end match_data = { matches: {}, regex:, url: } return match_data if url.blank? || (regex.blank? && block.blank?) content = if provided_content.is_a?(String) match_data[:cached] = true provided_content else match_data.merge!(Strategy.page_content(url, homebrew_curl:)) match_data[:content] end return match_data if content.blank? versions_from_content(content, regex, &block).each do |match_text| match_data[:matches][match_text] = Version.new(match_text) end match_data end |
.match?(url) ⇒ 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.
Whether the strategy can be applied to the provided URL.
Homebrew::Livecheck::Strategy::PageMatch will technically match any HTTP URL but is only
usable with a livecheck
block containing a regex.
36 37 38 |
# File 'livecheck/strategy/page_match.rb', line 36 def self.match?(url) URL_MATCH_REGEX.match?(url) end |
.versions_from_content(content, regex, &block) ⇒ Array<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.
Uses the regex to match text in the content or, if a block is provided, passes the page content to the block to handle matching. With either approach, an array of unique matches is returned.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'livecheck/strategy/page_match.rb', line 55 def self.versions_from_content(content, regex, &block) if block block_return_value = regex.present? ? yield(content, regex) : yield(content) return Strategy.handle_block_return(block_return_value) end return [] if regex.blank? content.scan(regex).filter_map do |match| case match when String match when Array match.first end end.uniq end |