url-checker 1.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 520fdbebbffff313fced72bdff28b582b954c226
4
- data.tar.gz: cf5b0d0c5d1ffb6446db835312f524c0c5f47036
3
+ metadata.gz: bc8f608df4641ec27291dca1cc2170b2dde74210
4
+ data.tar.gz: 157d02f42cb51fd56272580b93ac5e87b6e3ad2b
5
5
  SHA512:
6
- metadata.gz: f7bb7f5c95da1a5e90eba3706f35874dcf6a6c1ef26154ff5b1d66dc06a81f4bd155421b784ab1aafba5764c22cc8ea08f184414f15639e739627d575ce37a90
7
- data.tar.gz: 98dab8c5b611986b7215e1d1d0bfff84b29a9552823ac48b8d94c7f18688a80cac44680ae7f2433b85288ee7a5c7aa26757f181bb7627650a5fc6f75c755e96a
6
+ metadata.gz: 54c89e9bd0322c92b915c8613ae60a3e65d414b1b349b468691a970ffc3a5e1bc5570fe2775f292da86bcb13305c6dbc6f6fc36c862590b73b34aa2756bc1fdd
7
+ data.tar.gz: 792b7708b2652eece3adfb76a354ca8156bd88fdf40178557bec69e7555f088941f8f2aaba5f6e8e3927bb55c63b30b230f5104314656d4a9b09ec50e0520601
data/README.md ADDED
@@ -0,0 +1,34 @@
1
+ [![Code Climate](https://codeclimate.com/github/HarlemSquirrel/url-checker/badges/gpa.svg)](https://codeclimate.com/github/HarlemSquirrel/url-checker)
2
+
3
+ # URL Checker
4
+
5
+ A Ruby CLI for checking a list of URLs from a CSV file. Checkout the [RubGems page](https://rubygems.org/gems/url-checker).
6
+
7
+ ## Getting started
8
+
9
+ ### Install and run from RubyGems
10
+
11
+ ```sh
12
+ $ gem install url-checker
13
+ $ checkurls path/to/file.csv
14
+ ```
15
+
16
+ ### Install and run manually
17
+
18
+ Clone the repo and bundle
19
+
20
+ ```sh
21
+ $ git clone https://github.com/HarlemSquirrel/url-checker.git
22
+ $ bundle install
23
+ ```
24
+
25
+ Try the test file
26
+
27
+ ```sh
28
+ $ bin/checkurls spec/fixtures/test.csv
29
+ 404 Not Found http://google.com/cheese
30
+ 301 Moved Permanently http://google.com
31
+ 200 OK https://www.google.com
32
+ 3 URLs checked with 1 issue(s).
33
+ Results saved to spec/fixtures/test_results_2017-02-19-11:44:27.csv
34
+ ```
data/bin/checkurls CHANGED
@@ -3,4 +3,4 @@
3
3
 
4
4
  require_relative '../lib/url_checker'
5
5
 
6
- UrlChecker.call
6
+ UrlChecker::UrlChecker.call
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'benchmark'
4
+ require 'colorize'
5
+ require 'csv'
6
+ require 'net/http'
7
+
8
+ require_relative '../lib/url_checker'
9
+ require_relative '../lib/url_checker/url_checker'
10
+ require_relative '../lib/url_checker/version'
data/lib/url_checker.rb CHANGED
@@ -1,83 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require_relative '../config/environment'
3
-
4
- # The main class
5
- class UrlChecker
6
- BAD_CALL_MSG = 'Please call with one CSV file with URLs in the first column'
7
- RESULTS_HEADERS = %w(Response URL).freeze
8
-
9
- attr_reader :file_path, :results_file_path
10
-
11
- def initialize(file_path:)
12
- @file_path = file_path
13
- end
14
-
15
- def call
16
- @results = [RESULTS_HEADERS]
17
- @num_issues = 0
18
- check_urls_from_csv
19
- display_summary
20
- write_results
21
- end
22
-
23
- def self.call
24
- if ARGV.length == 1 && ARGV.first.match?(/\.csv\z/)
25
- url_checker = new(file_path: ARGV.first).call
26
- else
27
- puts BAD_CALL_MSG.red
28
- end
29
- url_checker
30
- end
31
-
32
- private
33
2
 
34
- attr_accessor :num_issues, :results
35
-
36
- def check_url(url)
37
- uri = URI(url)
38
- response = Net::HTTP.get_response uri
39
- collect_result response, url
40
- display_result response, url
41
- end
42
-
43
- def check_urls_from_csv
44
- threads = []
45
- CSV.foreach(file_path) do |row|
46
- url = row[0]
47
- threads << Thread.new { check_url url } if url.match?(/http/)
48
- end
49
- threads.each(&:join)
50
- end
51
-
52
- def collect_result(response, url)
53
- line = ["#{response.code} #{response.message}", url]
54
- results << line
55
- end
56
-
57
- def display_result(response, url)
58
- msg = " #{response.code} #{response.message} #{url}"
59
- case response
60
- when Net::HTTPSuccess, Net::HTTPRedirection
61
- puts msg.green
62
- else
63
- @num_issues += 1
64
- puts msg.red
65
- end
66
- end
67
-
68
- def display_summary
69
- num_checked = results.length - 1
70
- msg = " #{num_checked} URLs checked with #{num_issues} issue(s)."
71
- num_issues.positive? ? puts(msg.yellow) : puts(msg.green)
72
- end
3
+ require_relative '../config/environment'
73
4
 
74
- def write_results
75
- time = Time.now.strftime('%Y-%m-%d-%H:%M:%S')
76
- @results_file_path = file_path.gsub('.csv', "_results_#{time}.csv")
77
- puts " Results saved to #{results_file_path}"
78
- CSV.open(results_file_path, 'wb') do |csv|
79
- results.each { |r| csv << r }
80
- end
81
- results_file_path
82
- end
5
+ # The main module
6
+ module UrlChecker
83
7
  end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module UrlChecker
4
+ # The main class
5
+ class UrlChecker
6
+ BAD_CALL_MSG = 'Please call with one CSV file with URLs in the first column'
7
+ RESULTS_HEADERS = %w(Response URL).freeze
8
+
9
+ attr_reader :file_path, :results_file_path
10
+
11
+ def initialize(file_path:)
12
+ @file_path = file_path
13
+ end
14
+
15
+ def call
16
+ @results = [RESULTS_HEADERS]
17
+ @num_issues = 0
18
+ display_summary Benchmark.measure { check_urls_from_csv }.real
19
+ write_results
20
+ end
21
+
22
+ def self.call
23
+ if ARGV.length == 1 && ARGV.first.match?(/\.csv\z/)
24
+ url_checker = new(file_path: ARGV.first).call
25
+ else
26
+ puts BAD_CALL_MSG.red
27
+ end
28
+ url_checker
29
+ end
30
+
31
+ private
32
+
33
+ attr_accessor :num_issues, :results
34
+
35
+ def check_url(url)
36
+ uri = URI(url)
37
+ response = Net::HTTP.get_response uri
38
+ collect_result response, url
39
+ display_result response, url
40
+ end
41
+
42
+ def check_urls_from_csv
43
+ threads = []
44
+ CSV.foreach(file_path) do |row|
45
+ url = row[0]
46
+ threads << Thread.new { check_url url } if url.match?(/http/)
47
+ end
48
+ threads.each(&:join)
49
+ end
50
+
51
+ def collect_result(response, url)
52
+ line = ["#{response.code} #{response.message}", url]
53
+ results << line
54
+ end
55
+
56
+ def display_result(response, url)
57
+ msg = " #{response.code} #{response.message} #{url}"
58
+ case response
59
+ when Net::HTTPSuccess, Net::HTTPRedirection
60
+ puts msg.green
61
+ else
62
+ @num_issues += 1
63
+ puts msg.red
64
+ end
65
+ end
66
+
67
+ def display_summary(run_time)
68
+ num_checked = results.length - 1
69
+ msg = " #{num_checked} URLs checked with #{num_issues} issue(s) in #{run_time.round 2} s."
70
+ num_issues.positive? ? puts(msg.yellow) : puts(msg.green)
71
+ end
72
+
73
+ def write_results
74
+ time = Time.now.strftime('%Y-%m-%d-%H:%M:%S')
75
+ @results_file_path = file_path.gsub('.csv', "_results_#{time}.csv")
76
+ puts " Results saved to #{results_file_path}"
77
+ CSV.open(results_file_path, 'wb') do |csv|
78
+ results.each { |r| csv << r }
79
+ end
80
+ results_file_path
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module UrlChecker
4
+ VERSION = '1.0.1'
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: url-checker
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McCormack
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-19 00:00:00.000000000 Z
11
+ date: 2017-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -24,15 +24,19 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.8'
27
- description: A Ruby CLI for checking a list of URLs from a CSV file
27
+ description: A Ruby CLI for checking a list of URLs from a CSV file.
28
28
  email: HarlemSquirrel@gmail.com
29
29
  executables:
30
30
  - checkurls
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
+ - README.md
34
35
  - bin/checkurls
36
+ - config/environment.rb
35
37
  - lib/url_checker.rb
38
+ - lib/url_checker/url_checker.rb
39
+ - lib/url_checker/version.rb
36
40
  homepage: https://github.com/HarlemSquirrel/url-checker
37
41
  licenses:
38
42
  - MIT
@@ -56,5 +60,5 @@ rubyforge_project:
56
60
  rubygems_version: 2.6.10
57
61
  signing_key:
58
62
  specification_version: 4
59
- summary: A Ruby CLI for checking a list of URLs from a CSV file
63
+ summary: Check URLs from a CSV
60
64
  test_files: []