Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

58 linhas
1.3 KiB

  1. #!/usr/bin/env ruby
  2. require 'httparty'
  3. require 'uri'
  4. allowed_codes = [200, 302, 403]
  5. args = ARGV
  6. filename = args[0]
  7. fail_flag = false
  8. contents = File.open(filename, 'rb') { |f| f.read }
  9. raw_links = URI.extract(contents, ['http', 'https'])
  10. # Remove trailing ')' from entry URLs
  11. links = []
  12. raw_links.each do |link|
  13. if link.end_with?(')')
  14. links.push(link[0...-1])
  15. else
  16. links.push(link)
  17. end
  18. end
  19. # Fail on any duplicate elements
  20. dup = links.select{|element| links.count(element) > 1}
  21. if dup.uniq.length > 0
  22. dup.uniq.each do |e|
  23. puts "Duplicate link: #{e}"
  24. end
  25. fail_flag = true
  26. end
  27. # Remove any duplicates from array
  28. links = links.uniq
  29. count = 0
  30. total = links.length
  31. fails = []
  32. # GET each link and check for valid response code from allowed_codes
  33. links.each do |link|
  34. begin
  35. count += 1
  36. puts "(#{count}/#{total}) #{link}"
  37. res = HTTParty.get(link, timeout: 10)
  38. if !allowed_codes.include?(res.code)
  39. fails.push("(#{res.code}): #{link}")
  40. fail_flag = true
  41. else
  42. puts "\t(#{res.code})"
  43. end
  44. rescue
  45. puts "FAIL: (#{res.code}) #{link}"
  46. fails.push("(#{res.code}): #{link}")
  47. fail_flag = true
  48. end
  49. end
  50. fails.each do |e|
  51. puts e
  52. end
  53. if fail_flag
  54. exit(1)
  55. else
  56. exit(0)
  57. end