Class: Homebrew::Livecheck::Strategy::Sparkle Private
- Inherits:
-
Object
- Object
- Homebrew::Livecheck::Strategy::Sparkle
- Extended by:
- T::Sig
- Defined in:
- brew/Library/Homebrew/livecheck/strategy/sparkle.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
The Sparkle strategy fetches content at a URL and parses it as a Sparkle appcast in XML format.
Defined Under Namespace
Classes: Item
Constant Summary collapse
- PRIORITY =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
A priority of zero causes livecheck to skip the strategy. We only apply Homebrew::Livecheck::Strategy::Sparkle using
strategy :sparkle
in alivecheck
block, as we can’t automatically determine when this can be successfully applied to a URL without fetching the content. 0
- URL_MATCH_REGEX =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
The
Regexp
used to determine if the strategy applies to the URL. %r{^https?://}i.freeze
Class Method Summary collapse
-
.find_versions(url, regex, &block) ⇒ Hash{Symbol => T.untyped}
private
Checks the content at the URL for new versions.
-
.item_from_content(content) ⇒ Item?
private
-
.match?(url) ⇒ Boolean
private
Whether the strategy can be applied to the provided URL.
Class Method Details
.find_versions(url, regex, &block) ⇒ Hash{Symbol => T.untyped}
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Checks the content at the URL for new versions.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'brew/Library/Homebrew/livecheck/strategy/sparkle.rb', line 89 def self.find_versions(url, regex, &block) raise ArgumentError, "The #{T.must(name).demodulize} strategy does not support a regex." if regex match_data = { matches: {}, regex: regex, url: url } match_data.merge!(Strategy.page_content(url)) content = match_data.delete(:content) if (item = item_from_content(content)) match = if block block.call(item)&.to_s else item.bundle_version&.nice_version end match_data[:matches][match] = Version.new(match) if match end match_data end |
.item_from_content(content) ⇒ Item?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'brew/Library/Homebrew/livecheck/strategy/sparkle.rb', line 45 def self.item_from_content(content) require "nokogiri" xml = Nokogiri::XML(content) xml.remove_namespaces! items = xml.xpath("//rss//channel//item").map do |item| enclosure = (item > "enclosure").first url = enclosure&.attr("url") short_version = enclosure&.attr("shortVersionString") version = enclosure&.attr("version") url ||= (item > "link").first&.text short_version ||= (item > "shortVersionString").first&.text&.strip version ||= (item > "version").first&.text&.strip title = (item > "title").first&.text&.strip if match = title&.match(/(\d+(?:\.\d+)*)\s*(\([^)]+\))?\Z/) short_version ||= match[1] version ||= match[2] end bundle_version = BundleVersion.new(short_version, version) if short_version || version next if (os = enclosure&.attr("os")) && os != "osx" data = { title: title, url: url, bundle_version: bundle_version, short_version: bundle_version&.short_version, version: bundle_version&.version, }.compact Item.new(**data) unless data.empty? end.compact items.max_by(&:bundle_version) end |
.match?(url) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Whether the strategy can be applied to the provided URL.
The strategy will technically match any HTTP URL but is
only usable with a livecheck
block containing a regex
or block.
31 32 33 |
# File 'brew/Library/Homebrew/livecheck/strategy/sparkle.rb', line 31 def self.match?(url) URL_MATCH_REGEX.match?(url) end |