awesome_bot 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +43 -27
- data/lib/awesome_bot/check.rb +11 -2
- data/lib/awesome_bot/cli.rb +21 -7
- data/lib/awesome_bot/result.rb +9 -6
- data/lib/awesome_bot/statuses.rb +5 -2
- data/lib/awesome_bot/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b80a642954635c67e93c87aafb2524e0a89316d
|
4
|
+
data.tar.gz: 6afbd8b1d0e1b219aea4345f0be7aec0df309a6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 074d3347f394c15e8c4d21e533bf66a2da153f97187e2ca1b10ca0fc63cb96d634444c3ddc3938ab4a2669415f1b0be55b67620f35ccfd26151f4c7214961675
|
7
|
+
data.tar.gz: be54ae943b07eb0be805e8530b9b969bc244bf0a375338f1e8da29f22318ddaca6ef354d9d3b130428988740e8725f30fea89688e130096d770803a2c15a12f8
|
data/CHANGELOG.md
CHANGED
@@ -31,6 +31,12 @@
|
|
31
31
|
|
32
32
|
- correct logic for displaying white list status
|
33
33
|
|
34
|
+
# 1.3.0
|
35
|
+
|
36
|
+
- add `--allow-redirect` option
|
37
|
+
- output `→` as redirect status indicator
|
38
|
+
- update error logic in statuses
|
39
|
+
|
34
40
|
## Contact
|
35
41
|
|
36
42
|
- [github.com/dkhamsing](https://github.com/dkhamsing)
|
data/README.md
CHANGED
@@ -32,39 +32,47 @@ irb(main):001:0> require 'awesome_bot'
|
|
32
32
|
=> true
|
33
33
|
irb(main):002:0> c = File.read 'README.md'
|
34
34
|
=> "..."
|
35
|
-
irb(main):003:0> AwesomeBot.check c
|
35
|
+
irb(main):003:0> r = AwesomeBot.check c
|
36
36
|
=> #<AwesomeBot::Result:0x007fdde39f4408 @links=...>
|
37
37
|
# AwesomeBot Result with success, statuses_issues, dupes and more
|
38
|
+
irb(main):004:0> puts r.success ? 'No errors' : ':-('
|
39
|
+
:-(
|
38
40
|
```
|
39
41
|
|
40
42
|
More information at [rubydoc](http://www.rubydoc.info/gems/awesome_bot).
|
41
43
|
|
42
44
|
### Command Line
|
43
45
|
|
44
|
-
awesome_bot <file> [--allow-dupe] [--white-list item1,item2,..]
|
45
|
-
|
46
|
+
awesome_bot <file> [--allow-dupe] [--allow-redirect] [--white-list item1,item2,..]
|
46
47
|
|
47
48
|
```shell
|
48
49
|
$ awesome_bot README.md
|
49
|
-
Checking links in
|
50
|
-
Links found:
|
50
|
+
> Checking links in README.md
|
51
|
+
Links found: 46, 14 unique
|
51
52
|
1. https://github.com/sindresorhus/awesome
|
52
53
|
2. http://i.giphy.com/12qq4Em3MVuwJW.gif
|
53
54
|
3. https://travis-ci.org/dkhamsing/awesome_bot.svg
|
54
55
|
4. https://travis-ci.org/dkhamsing/awesome_bot
|
55
|
-
5. https://
|
56
|
-
6.
|
57
|
-
7.
|
58
|
-
8. https://
|
59
|
-
9.
|
60
|
-
10. https://github.com/dkhamsing
|
61
|
-
11. https://
|
62
|
-
|
56
|
+
5. https://badge.fury.io/rb/awesome_bot.svg
|
57
|
+
6. https://badge.fury.io/rb/awesome_bot
|
58
|
+
7. http://www.rubydoc.info/gems/awesome_bot
|
59
|
+
8. https://travis-ci.org/
|
60
|
+
9. http://gph.is/1gU5itl
|
61
|
+
10. https://github.com/dkhamsing
|
62
|
+
11. https://twitter.com/dkhamsing
|
63
|
+
12. https://github.com/dkhamsing/open-source-ios-apps/pull/159
|
64
|
+
13. https://github.com/dkhamsing/open-source-ios-apps/blob/master/.travis.yml
|
65
|
+
14. https://codeload.github.com/dkhamsing/awesome_bot/tar.gz/wip
|
66
|
+
Checking URLs: ✓→→x→→✓✓✓✓x✓✓✓
|
63
67
|
|
64
68
|
Issues :-(
|
65
69
|
> Links
|
66
|
-
|
67
|
-
|
70
|
+
1. 302 https://badge.fury.io/rb/awesome_bot.svg
|
71
|
+
2. 302 https://badge.fury.io/rb/awesome_bot
|
72
|
+
3. 202 http://www.rubydoc.info/gems/awesome_bot
|
73
|
+
4. 301 http://gph.is/1gU5itl
|
74
|
+
5. 301 https://travis-ci.org/dkhamsing/awesome_bot.svg
|
75
|
+
6. 404 https://codeload.github.com/dkhamsing/awesome_bot/tar.gz/wip
|
68
76
|
> Dupes
|
69
77
|
1. https://github.com/sindresorhus/awesome
|
70
78
|
2. http://i.giphy.com/12qq4Em3MVuwJW.gif
|
@@ -80,21 +88,29 @@ Issues :-(
|
|
80
88
|
```
|
81
89
|
|
82
90
|
```shell
|
83
|
-
$ awesome_bot README.md --allow-dupe --white-list gph.is,
|
91
|
+
$ awesome_bot README.md --allow-dupe --white-list fury,gph.is,rubydoc,travis,codeload
|
84
92
|
> Checking links in README.md
|
85
|
-
> Will
|
86
|
-
> White list: gph.is,
|
87
|
-
Links found:
|
93
|
+
> Will allow duplicate links
|
94
|
+
> White list: fury, gph.is, rubydoc, travis, codeload
|
95
|
+
Links found: 20, 33 white listed
|
88
96
|
1. https://github.com/sindresorhus/awesome
|
89
97
|
2. http://i.giphy.com/12qq4Em3MVuwJW.gif
|
90
|
-
3. https://
|
91
|
-
4. https://
|
92
|
-
5. https://github.com/dkhamsing
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
+
3. https://github.com/dkhamsing
|
99
|
+
4. https://twitter.com/dkhamsing
|
100
|
+
5. https://github.com/dkhamsing/open-source-ios-apps/pull/159
|
101
|
+
Checking URLs: ✓✓✓✓✓
|
102
|
+
Checking white listed URLs: →x→→✓→✓x✓
|
103
|
+
|
104
|
+
> White listed:
|
105
|
+
1. 301: http://gph.is/1gU5itl
|
106
|
+
2. 202: http://www.rubydoc.info/gems/awesome_bot
|
107
|
+
3. 302: https://badge.fury.io/rb/awesome_bot
|
108
|
+
4. 302: https://badge.fury.io/rb/awesome_bot.svg
|
109
|
+
5. 200: https://travis-ci.org/dkhamsing/awesome_bot
|
110
|
+
6. 301: https://travis-ci.org/dkhamsing/awesome_bot.svg
|
111
|
+
7. 200: https://travis-ci.org/
|
112
|
+
8. 404: https://codeload.github.com/dkhamsing/awesome_bot/tar.gz/wip
|
113
|
+
9. 200: https://github.com/dkhamsing/open-source-ios-apps/blob/master/.travis.yml
|
98
114
|
No issues :-)
|
99
115
|
```
|
100
116
|
|
data/lib/awesome_bot/check.rb
CHANGED
@@ -9,6 +9,7 @@ module AwesomeBot
|
|
9
9
|
|
10
10
|
STATUS_OK = '✓'
|
11
11
|
STATUS_OTHER = 'x'
|
12
|
+
STATUS_REDIRECT = '→'
|
12
13
|
|
13
14
|
class << self
|
14
15
|
def check(content, white_listed = nil, skip_dupe = false, log = Log.new)
|
@@ -34,7 +35,11 @@ module AwesomeBot
|
|
34
35
|
log.addp 'Checking URLs: ' if r.links.count > 0
|
35
36
|
r.status =
|
36
37
|
statuses(r.links.uniq, NUMBER_OF_THREADS) do |s|
|
37
|
-
|
38
|
+
if (s > 299) && (s < 400)
|
39
|
+
log.addp STATUS_REDIRECT
|
40
|
+
else
|
41
|
+
log.addp(s == 200 ? STATUS_OK : STATUS_OTHER)
|
42
|
+
end
|
38
43
|
end
|
39
44
|
log.add ''
|
40
45
|
|
@@ -43,7 +48,11 @@ module AwesomeBot
|
|
43
48
|
log.addp 'Checking white listed URLs: '
|
44
49
|
r.white_listed =
|
45
50
|
statuses(r.rejected.uniq, NUMBER_OF_THREADS, true) do |s|
|
46
|
-
|
51
|
+
if (s > 299) && (s < 400)
|
52
|
+
log.addp STATUS_REDIRECT
|
53
|
+
else
|
54
|
+
log.addp(s == 200 ? STATUS_OK : STATUS_OTHER)
|
55
|
+
end
|
47
56
|
end
|
48
57
|
log.add ''
|
49
58
|
|
data/lib/awesome_bot/cli.rb
CHANGED
@@ -6,6 +6,7 @@ require 'awesome_bot/version'
|
|
6
6
|
# Command line interface
|
7
7
|
module AwesomeBot
|
8
8
|
OPTION_DUPE = 'allow-dupe'
|
9
|
+
OPTION_REDIRECT = 'allow-redirect'
|
9
10
|
OPTION_WHITE_LIST = 'white-list'
|
10
11
|
|
11
12
|
USAGE = "\t"
|
@@ -13,14 +14,16 @@ module AwesomeBot
|
|
13
14
|
class << self
|
14
15
|
def cli
|
15
16
|
option_d = "--#{OPTION_DUPE}"
|
17
|
+
option_r = "--#{OPTION_REDIRECT}"
|
16
18
|
option_w = "--#{OPTION_WHITE_LIST}"
|
17
19
|
|
18
20
|
if ARGV.count == 0
|
19
|
-
puts "Usage: #{PROJECT} <file> [#{option_d}] "\
|
21
|
+
puts "Usage: #{PROJECT} <file> [#{option_d}] [#{option_r}] "\
|
20
22
|
"[#{option_w} item1,item2,..]\n"\
|
21
23
|
"#{USAGE} file \t\t Path to file \n"\
|
22
|
-
"#{USAGE} #{option_d} \t
|
23
|
-
"#{USAGE} #{
|
24
|
+
"#{USAGE} #{option_d} \t Duplicates URLs are allowed URLs \n"\
|
25
|
+
"#{USAGE} #{option_r} Redirected URLs are allowed \n"\
|
26
|
+
"#{USAGE} #{option_w} \t Comma separated URLs to white list \n"\
|
24
27
|
"\nVersion #{VERSION}, see #{PROJECT_URL} for more information"
|
25
28
|
exit
|
26
29
|
end
|
@@ -33,10 +36,15 @@ module AwesomeBot
|
|
33
36
|
|
34
37
|
skip_dupe = options.include? option_d
|
35
38
|
|
39
|
+
allow_redirects = options.include? option_r
|
40
|
+
puts '> Will allow redirects' if allow_redirects == true
|
41
|
+
|
36
42
|
if options.include? option_w
|
37
43
|
i = options.find_index(option_w) + 1
|
38
44
|
white_listed = options[i].split ','
|
39
45
|
end
|
46
|
+
else
|
47
|
+
allow_redirects = false
|
40
48
|
end
|
41
49
|
|
42
50
|
begin
|
@@ -46,6 +54,7 @@ module AwesomeBot
|
|
46
54
|
exit 1
|
47
55
|
end
|
48
56
|
|
57
|
+
|
49
58
|
log = Log.new(true)
|
50
59
|
r = check(content, white_listed, skip_dupe, log)
|
51
60
|
|
@@ -56,18 +65,23 @@ module AwesomeBot
|
|
56
65
|
end
|
57
66
|
end
|
58
67
|
|
59
|
-
if r.success == true
|
68
|
+
if r.success(allow_redirects) == true
|
60
69
|
puts 'No issues :-)'
|
61
70
|
# exit ?
|
62
71
|
else
|
63
72
|
puts "\nIssues :-("
|
64
73
|
|
65
74
|
print "> Links \n"
|
66
|
-
if r.success_links
|
75
|
+
if r.success_links(allow_redirects)
|
67
76
|
puts " All OK #{STATUS_OK}"
|
68
77
|
else
|
69
|
-
r.statuses_issues.each_with_index do |x, k|
|
70
|
-
|
78
|
+
r.statuses_issues(allow_redirects).each_with_index do |x, k|
|
79
|
+
s = x['status']
|
80
|
+
print "#{k + 1}. "
|
81
|
+
print "#{s} " unless s == STATUS_ERROR
|
82
|
+
print "#{x['url']}"
|
83
|
+
print x['error'] if s == STATUS_ERROR
|
84
|
+
puts ''
|
71
85
|
end
|
72
86
|
end
|
73
87
|
|
data/lib/awesome_bot/result.rb
CHANGED
@@ -20,12 +20,15 @@ module AwesomeBot
|
|
20
20
|
@rejected, @links = links.partition { |u| AwesomeBot.white_list @w, u }
|
21
21
|
end
|
22
22
|
|
23
|
-
def statuses_issues
|
24
|
-
status.select { |x| x['status'] != 200 }
|
23
|
+
def statuses_issues(allow_redirects = false)
|
24
|
+
s = status.select { |x| x['status'] != 200 }
|
25
|
+
return s if allow_redirects == false
|
26
|
+
|
27
|
+
s.reject { |x| (x['status'] > 299) && (x['status'] < 400) }
|
25
28
|
end
|
26
29
|
|
27
|
-
def success
|
28
|
-
success_dupe && success_links
|
30
|
+
def success(allow_redirects = false)
|
31
|
+
success_dupe && success_links(allow_redirects)
|
29
32
|
end
|
30
33
|
|
31
34
|
def success_dupe
|
@@ -33,8 +36,8 @@ module AwesomeBot
|
|
33
36
|
links.uniq.count == links.count
|
34
37
|
end
|
35
38
|
|
36
|
-
def success_links
|
37
|
-
statuses_issues.count == 0
|
39
|
+
def success_links(allow_redirects = false)
|
40
|
+
statuses_issues(allow_redirects).count == 0
|
38
41
|
end
|
39
42
|
|
40
43
|
def white_listing
|
data/lib/awesome_bot/statuses.rb
CHANGED
@@ -3,6 +3,8 @@ module AwesomeBot
|
|
3
3
|
require 'faraday'
|
4
4
|
require 'parallel'
|
5
5
|
|
6
|
+
STATUS_ERROR = -1
|
7
|
+
|
6
8
|
class << self
|
7
9
|
def net_head_status(url)
|
8
10
|
Faraday.head(url).status
|
@@ -22,11 +24,12 @@ module AwesomeBot
|
|
22
24
|
begin
|
23
25
|
status = net_status u, head
|
24
26
|
rescue => e
|
25
|
-
status =
|
27
|
+
status = STATUS_ERROR
|
28
|
+
error = e
|
26
29
|
end
|
27
30
|
|
28
31
|
yield status, u
|
29
|
-
statuses.push('url' => u, 'status' => status)
|
32
|
+
statuses.push('url' => u, 'status' => status, 'error' => error)
|
30
33
|
end # Parallel
|
31
34
|
|
32
35
|
statuses
|
data/lib/awesome_bot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awesome_bot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Khamsing
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|