Skip to content

Commit

Permalink
Refactor #find_versions parameters in strategies
Browse files Browse the repository at this point in the history
  • Loading branch information
samford committed Aug 12, 2021
1 parent c5de106 commit 4bf9622
Show file tree
Hide file tree
Showing 20 changed files with 119 additions and 115 deletions.
13 changes: 6 additions & 7 deletions Library/Homebrew/livecheck/livecheck.rb
Original file line number Diff line number Diff line change
Expand Up @@ -640,13 +640,12 @@ def latest_version(

next if strategy.blank?

strategy_data = begin
strategy.find_versions(url, livecheck_regex, cask: cask, &livecheck_strategy_block)
rescue ArgumentError => e
raise unless e.message.include?("unknown keyword: cask")

odisabled "`def self.find_versions` in `#{strategy}` without a `cask` parameter"
end
strategy_data = strategy.find_versions(
url: url,
regex: livecheck_regex,
cask: cask,
&livecheck_strategy_block
)
match_version_map = strategy_data[:matches]
regex = strategy_data[:regex]
messages = strategy_data[:messages]
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/apache.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# Use `\.t` instead of specific tarball extensions (e.g. .tar.gz)
Expand All @@ -73,7 +73,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# * `/href=["']?example-v?(\d+(?:\.\d+)+)-bin\.zip/i`
regex ||= /href=["']?#{Regexp.escape(match[:prefix])}v?(\d+(?:\.\d+)+)#{Regexp.escape(suffix)}/i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/bitbucket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# Use `\.t` instead of specific tarball extensions (e.g. .tar.gz)
Expand All @@ -84,7 +84,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# * `/href=.*?example-v?(\d+(?:\.\d+)+)\.t/i`
regex ||= /href=.*?#{Regexp.escape(match[:prefix])}v?(\d+(?:\.\d+)+)#{Regexp.escape(suffix)}/i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/cpan.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# Use `\.t` instead of specific tarball extensions (e.g. .tar.gz)
Expand All @@ -68,7 +68,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# 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)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
14 changes: 6 additions & 8 deletions Library/Homebrew/livecheck/strategy/electron_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,20 +59,18 @@ def self.versions_from_content(content, &block)
# Checks the YAML content at the URL for new versions.
#
# @param url [String] the URL of the content to check
# @param regex [Regexp, nil] a regex used for matching versions
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(T.proc.params(arg0: T::Hash[String, T.untyped]).returns(T.nilable(String))),
url: String,
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(T.proc.params(arg0: T::Hash[String, T.untyped]).returns(T.nilable(String))),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
raise ArgumentError, "The #{T.must(name).demodulize} strategy does not support a regex." if regex
def self.find_versions(url:, **unused, &block)
raise ArgumentError, "The #{T.must(name).demodulize} strategy does not support a regex." if unused[:regex]

match_data = { matches: {}, regex: regex, url: url }
match_data = { matches: {}, url: url }

match_data.merge!(Strategy.page_content(url))
content = match_data.delete(:content)
Expand Down
16 changes: 9 additions & 7 deletions Library/Homebrew/livecheck/strategy/extract_plist.rb
Original file line number Diff line number Diff line change
Expand Up @@ -77,21 +77,23 @@ def self.versions_from_items(items, &block)

# Uses {UnversionedCaskChecker} on the provided cask to identify
# versions from `plist` files.
#
# @param cask [Cask::Cask] the cask to check for version information
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: Cask::Cask,
block: T.nilable(
cask: Cask::Cask,
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: T::Hash[String, Item]).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask:, &block)
raise ArgumentError, "The #{T.must(name).demodulize} strategy does not support a regex." if regex
def self.find_versions(cask:, **unused, &block)
raise ArgumentError, "The #{T.must(name).demodulize} strategy does not support a regex." if unused[:regex]
raise ArgumentError, "The #{T.must(name).demodulize} strategy only supports casks." unless T.unsafe(cask)

match_data = { matches: {}, regex: regex, url: url }
match_data = { matches: {} }

unversioned_cask_checker = UnversionedCaskChecker.new(cask)
items = unversioned_cask_checker.all_versions.transform_values { |v| Item.new(bundle_version: v) }
Expand Down
10 changes: 5 additions & 5 deletions Library/Homebrew/livecheck/strategy/git.rb
Original file line number Diff line number Diff line change
Expand Up @@ -122,16 +122,16 @@ def self.versions_from_tags(tags, regex = nil, &block)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
_unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: T::Array[String], arg1: T.nilable(Regexp))
.returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex = nil, cask: nil, &block)
def self.find_versions(url:, regex: nil, **_unused, &block)
match_data = { matches: {}, regex: regex, url: url }

tags_data = tag_info(url, regex)
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/github_latest.rb
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.sub(/\.git$/i, "").match(URL_MATCH_REGEX)

# Example URL: `https://github.com/example/example/releases/latest`
Expand All @@ -82,7 +82,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# The default regex is the same for all URLs using this strategy
regex ||= %r{href=.*?/tag/v?(\d+(?:\.\d+)+)["' >]}i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
14 changes: 7 additions & 7 deletions Library/Homebrew/livecheck/strategy/gnome.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

page_url = "https://download.gnome.org/sources/#{match[:package_name]}/cache.json"
Expand All @@ -71,7 +71,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# count on the delimiter between the package name and numeric
# version being a hyphen and the file being a tarball.
regex = /#{Regexp.escape(match[:package_name])}-(\d+(?:\.\d+)+)\.t/i
version_data = PageMatch.find_versions(page_url, regex, cask: cask, &block)
version_data = PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)

# Filter out unstable versions using the old version scheme where
# the major version is below 40.
Expand All @@ -81,7 +81,7 @@ def self.find_versions(url, regex, cask: nil, &block)

version_data
else
PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/gnu.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# The directory listing page for the project's files
Expand All @@ -81,7 +81,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# Example regex: `%r{href=.*?example[._-]v?(\d+(?:\.\d+)*)(?:\.[a-z]+|/)}i`
regex ||= %r{href=.*?#{match[:project_name]}[._-]v?(\d+(?:\.\d+)*)(?:\.[a-z]+|/)}i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/hackage.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = File.basename(url).match(FILENAME_REGEX)

# A page containing a directory listing of the latest source tarball
Expand All @@ -67,7 +67,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# Example regex: `%r{<h3>example-(.*?)/?</h3>}i`
regex ||= %r{<h3>#{Regexp.escape(match[:package_name])}-(.*?)/?</h3>}i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
10 changes: 5 additions & 5 deletions Library/Homebrew/livecheck/strategy/header_match.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,15 @@ def self.versions_from_headers(headers, regex = nil, &block)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
_unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: T::Hash[String, String], arg1: T.nilable(Regexp)).returns(T.nilable(String)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **_unused, &block)
match_data = { matches: {}, regex: regex, url: url }

headers = Strategy.page_headers(url)
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/launchpad.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# The main page for the project on Launchpad
Expand All @@ -65,7 +65,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# The default regex is the same for all URLs using this strategy
regex ||= %r{class="[^"]*version[^"]*"[^>]*>\s*Latest version is (.+)\s*</}

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/npm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

page_url = "https://www.npmjs.com/package/#{match[:package_name]}?activeTab=versions"
Expand All @@ -62,7 +62,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# * `%r{href=.*?/package/@example/example/v/(\d+(?:\.\d+)+)"}i`
regex ||= %r{href=.*?/package/#{Regexp.escape(match[:package_name])}/v/(\d+(?:\.\d+)+)"}i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down

0 comments on commit 4bf9622

Please sign in to comment.