Class: Homebrew::Livecheck::Strategy::Json
- Extended by:
 - Homebrew::Livecheck::Strategic
 
- Defined in:
 - livecheck/strategy/json.rb
 
Overview
The Json strategy fetches content at a URL, parses it as JSON and
provides the parsed data to a strategy block. If a regex is present
in the livecheck block, it should be passed as the second argument to
the strategy block.
This is a generic strategy that doesn't contain any logic for finding
versions, as the structure of JSON data varies. Instead, a strategy
block must be used to extract version information from the JSON data.
This strategy is not applied automatically and it is necessary to use
strategy :json in a livecheck block (in conjunction with a
strategy block) to use it.
This strategy's Json.find_versions method can be used in other strategies that work with JSON content, so it should only be necessary to write the version-finding logic that works with the parsed JSON data.
Constant Summary collapse
- NICE_NAME =
          
 "JSON"- 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::Json so we can selectively apply it only when a strategy block is provided in a
livecheckblock. 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
Regexpused to determine if the strategy applies to the URL. %r{^https?://}i
Class Method Summary collapse
- 
  
    
      .find_versions(url:, regex: nil, provided_content: nil, options: Options.new, &block)  ⇒ Hash{Symbol => T.anything} 
    
    
  
  
  
  
  
  
  
  private
  
    
Checks the JSON content at the URL for versions, using the provided
strategyblock to extract version information. - 
  
    
      .match?(url)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether the strategy can be applied to the provided URL.
 - 
  
    
      .parse_json(content)  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
Parses JSON text and returns the parsed data.
 - 
  
    
      .versions_from_content(content, regex = nil, &block)  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
Parses JSON text and identifies versions using a
strategyblock. 
Methods included from Homebrew::Livecheck::Strategic
Class Method Details
.find_versions(url:, regex: nil, provided_content: nil, options: Options.new, &block) ⇒ Hash{Symbol => T.anything}
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 JSON content at the URL for versions, using the provided
strategy block to extract version information.
      112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132  | 
    
      # File 'livecheck/strategy/json.rb', line 112 def self.find_versions(url:, regex: nil, provided_content: nil, options: Options.new, &block) raise ArgumentError, "#{Utils.demodulize(name)} requires a `strategy` block" unless block_given? match_data = { matches: {}, regex:, url: } return match_data if url.blank? content = if provided_content.is_a?(String) match_data[:cached] = true provided_content else match_data.merge!(Strategy.page_content(url, options:)) 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::Json will technically match any HTTP URL but is only usable with
a livecheck block containing a strategy block.
      47 48 49  | 
    
      # File 'livecheck/strategy/json.rb', line 47 def self.match?(url) URL_MATCH_REGEX.match?(url) end  | 
  
.parse_json(content) ⇒ 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.
Parses JSON text and returns the parsed data.
      54 55 56 57 58 59 60 61 62  | 
    
      # File 'livecheck/strategy/json.rb', line 54 def self.parse_json(content) require "json" begin JSON.parse(content) rescue JSON::ParserError raise "Content could not be parsed as JSON." end end  | 
  
.versions_from_content(content, regex = nil, &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.
Parses JSON text and identifies versions using a strategy block.
If the block has two parameters, the parsed JSON data will be used as
the first argument and the regex (if any) will be the second.
Otherwise, only the parsed JSON data will be passed to the block.
      80 81 82 83 84 85 86 87 88 89 90 91 92  | 
    
      # File 'livecheck/strategy/json.rb', line 80 def self.versions_from_content(content, regex = nil, &block) return [] if content.blank? || !block_given? json = parse_json(content) return [] if json.blank? block_return_value = if block.arity == 2 yield(json, regex) else yield(json) end Strategy.handle_block_return(block_return_value) end  |