Class: RuboCop::Cop::FormulaAudit::PyPiUrls Private

Inherits:
RuboCop::Cop::FormulaCop show all
Defined in:
Library/Homebrew/rubocops/urls.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.

This cop makes sure that the correct format for PyPI URLs is used.

Instance Attribute Summary

Attributes inherited from RuboCop::Cop::FormulaCop

#file_path

Instance Method Summary collapse

Methods inherited from RuboCop::Cop::FormulaCop

#audit_comments, #audit_urls, #block_size, #caveats_strings, #check_precedence, #class_name, #component_precedes?, #depends_on?, #depends_on_name_type?, #end_column, #expression_negated?, #find_all_blocks, #find_block, #find_blocks, #find_const, #find_every_func_call_by_name, #find_every_method_call_by_name, #find_instance_call, #find_instance_method_call, #find_method_calls_by_name, #find_method_def, #find_method_with_args, #find_node_method_by_name, #find_strings, #format_component, #formula_tap, #get_checksum_node, #method_called?, #method_called_ever?, #method_called_in_block?, #method_name, #node_equals?, #offending_node, #on_class, #parameters, #parameters_passed?, #size, #versioned_formula?

Methods included from HelperFunctions

#line_number, #line_start_column, #problem, #regex_match_group, #source_buffer, #start_column, #string_content

Instance Method Details

#audit_formula(_node, _class_node, _parent_class_node, body_node) ⇒ Object

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.


297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
# File 'Library/Homebrew/rubocops/urls.rb', line 297

def audit_formula(_node, _class_node, _parent_class_node, body_node)
  urls = find_every_func_call_by_name(body_node, :url)
  mirrors = find_every_func_call_by_name(body_node, :mirror)
  urls += mirrors

  # Check pypi URLs
  pypi_pattern = %r{^https?://pypi.python.org/}
  audit_urls(urls, pypi_pattern) do |_, url|
    problem "use the `Source` url found on PyPI downloads page (`#{get_pypi_url(url)}`)"
  end

  # Require long files.pythonhosted.org URLs
  pythonhosted_pattern = %r{^https?://files.pythonhosted.org/packages/source/}
  audit_urls(urls, pythonhosted_pattern) do |_, url|
    problem "use the `Source` url found on PyPI downloads page (`#{get_pypi_url(url)}`)"
  end
end

#get_pypi_url(url) ⇒ Object

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.


315
316
317
318
319
# File 'Library/Homebrew/rubocops/urls.rb', line 315

def get_pypi_url(url)
  package_file = File.basename(url)
  package_name = package_file.match(/^(.+)-[a-z0-9.]+$/)[1]
  "https://pypi.org/project/#{package_name}/#files"
end