Require long urls for pypi and pythonhosted urls
This commit is contained in:
		
							parent
							
								
									6d22358fe0
								
							
						
					
					
						commit
						5f3f7d010b
					
				@ -291,20 +291,15 @@ module RuboCop
 | 
				
			|||||||
          urls += mirrors
 | 
					          urls += mirrors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          # Check pypi urls
 | 
					          # Check pypi urls
 | 
				
			||||||
          @pypi_pattern = %r{^https?://pypi.python.org/(.*)}
 | 
					          pypi_pattern = %r{^https?://pypi.python.org/}
 | 
				
			||||||
          audit_urls(urls, @pypi_pattern) do |match, url|
 | 
					          audit_urls(urls, pypi_pattern) do
 | 
				
			||||||
            problem "#{url} should be `https://files.pythonhosted.org/#{match[1]}`"
 | 
					            problem "use the `files.pythonhosted.org` url found on the pypi downloads page"
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        def autocorrect(node)
 | 
					          # Require long files.pythonhosted.org urls
 | 
				
			||||||
          lambda do |corrector|
 | 
					          pythonhosted_pattern = %r{^https?://files.pythonhosted.org/packages/source/}
 | 
				
			||||||
            url_string_node = parameters(node).first
 | 
					          audit_urls(urls, pythonhosted_pattern) do
 | 
				
			||||||
            url = string_content(url_string_node)
 | 
					            problem "use the url found on the pypi downloads page"
 | 
				
			||||||
            match = regex_match_group(url_string_node, @pypi_pattern)
 | 
					 | 
				
			||||||
            correction = node.source.sub(url, "https://files.pythonhosted.org/#{match[1]}")
 | 
					 | 
				
			||||||
            corrector.insert_before(node.source_range, correction)
 | 
					 | 
				
			||||||
            corrector.remove(node.source_range)
 | 
					 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
				
			|||||||
@ -245,29 +245,32 @@ end
 | 
				
			|||||||
describe RuboCop::Cop::FormulaAudit::PyPiUrls do
 | 
					describe RuboCop::Cop::FormulaAudit::PyPiUrls do
 | 
				
			||||||
  subject(:cop) { described_class.new }
 | 
					  subject(:cop) { described_class.new }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  context "when a pypi.python.org URL is used" do
 | 
					  context "when a pypi URL is used" do
 | 
				
			||||||
    it "reports an offense" do
 | 
					    it "reports an offense for pypi.python.org urls" do
 | 
				
			||||||
      expect_offense(<<~RUBY)
 | 
					      expect_offense(<<~RUBY)
 | 
				
			||||||
        class Foo < Formula
 | 
					        class Foo < Formula
 | 
				
			||||||
          desc "foo"
 | 
					          desc "foo"
 | 
				
			||||||
          url "https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz"
 | 
					          url "https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz"
 | 
				
			||||||
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz should be `https://files.pythonhosted.org/packages/source/foo/foo-0.1.tar.gz`
 | 
					          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use the `files.pythonhosted.org` url found on the pypi downloads page
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      RUBY
 | 
					      RUBY
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it "support auto-correction" do
 | 
					    it "reports an offense for short file.pythonhosted.org urls" do
 | 
				
			||||||
      corrected = autocorrect_source(<<~RUBY)
 | 
					      expect_offense(<<~RUBY)
 | 
				
			||||||
        class Foo < Formula
 | 
					        class Foo < Formula
 | 
				
			||||||
          desc "foo"
 | 
					          desc "foo"
 | 
				
			||||||
          url "https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz"
 | 
					          url "https://files.pythonhosted.org/packages/source/f/foo/foo-0.1.tar.gz"
 | 
				
			||||||
 | 
					          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use the url found on the pypi downloads page
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      RUBY
 | 
					      RUBY
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      expect(corrected).to eq <<~RUBY
 | 
					    it "reports no offenses for long file.pythonhosted.org urls" do
 | 
				
			||||||
 | 
					      expect_no_offenses(<<~RUBY)
 | 
				
			||||||
        class Foo < Formula
 | 
					        class Foo < Formula
 | 
				
			||||||
          desc "foo"
 | 
					          desc "foo"
 | 
				
			||||||
          url "https://files.pythonhosted.org/packages/source/foo/foo-0.1.tar.gz"
 | 
					          url "https://files.pythonhosted.org/packages/a0/b1/a01b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f/foo-0.1.tar.gz"
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      RUBY
 | 
					      RUBY
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user