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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c08200401ef702a5a776f23dc0d3027c9b3d29f1
4
- data.tar.gz: 4f775d12f5803fa6649f7170d4a94f038563f197
3
+ metadata.gz: 3b80a642954635c67e93c87aafb2524e0a89316d
4
+ data.tar.gz: 6afbd8b1d0e1b219aea4345f0be7aec0df309a6a
5
5
  SHA512:
6
- metadata.gz: 934cc16ad7cc48a663a2c8ea4360958bd9359901d3ce22c79240f775fca3ff8cfa5d8df97de5276b0dcb81f2601ae2d3c9c3ed0ccd13cf3ef9eb84a25550c2e4
7
- data.tar.gz: 8cdfd7a4235d947f0248255ef9ce8bf49c9a72f89a4649a1479b768ca2462008230df68d14a02d39dd06960cf338d3b918aa423cff485b9ad70494fa1b337a4d
6
+ metadata.gz: 074d3347f394c15e8c4d21e533bf66a2da153f97187e2ca1b10ca0fc63cb96d634444c3ddc3938ab4a2669415f1b0be55b67620f35ccfd26151f4c7214961675
7
+ data.tar.gz: be54ae943b07eb0be805e8530b9b969bc244bf0a375338f1e8da29f22318ddaca6ef354d9d3b130428988740e8725f30fea89688e130096d770803a2c15a12f8
@@ -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 ../README.md
50
- Links found: 35, 11 unique
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://travis-ci.org/
56
- 6. http://gph.is/1gU5itl
57
- 7. https://github.com/dkhamsing
58
- 8. https://twitter.com/dkhamsing
59
- 9. https://github.com/dkhamsing/open-source-ios-apps/pull/159
60
- 10. https://github.com/dkhamsing/open-source-ios-apps/blob/master/.travis.yml
61
- 11. https://codeload.github.com/dkhamsing/awesome_bot/tar.gz/wip
62
- Checking URLs: x✓✓✓x✓✓✓✓✓✓
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
- 1. 301 http://gph.is/1gU5itl
67
- 2. 301 https://travis-ci.org/dkhamsing/awesome_bot.svg
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,bot.svg
91
+ $ awesome_bot README.md --allow-dupe --white-list fury,gph.is,rubydoc,travis,codeload
84
92
  > Checking links in README.md
85
- > Will not check for duplicate links
86
- > White list: gph.is, bot.svg
87
- Links found: 27, 8 white listed, 9 unique
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://travis-ci.org/dkhamsing/awesome_bot
91
- 4. https://travis-ci.org/
92
- 5. https://github.com/dkhamsing
93
- 6. https://twitter.com/dkhamsing
94
- 7. https://github.com/dkhamsing/open-source-ios-apps/pull/159
95
- 8. https://github.com/dkhamsing/open-source-ios-apps/blob/master/.travis.yml
96
- 9. https://codeload.github.com/dkhamsing/awesome_bot/tar.gz/wip
97
- Checking URLs: ✓✓✓✓✓✓✓✓✓
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
 
@@ -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
- log.addp(s == 200 ? STATUS_OK : STATUS_OTHER)
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
- log.addp(s == 200 ? STATUS_OK : STATUS_OTHER)
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
 
@@ -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 Skip checking for duplicate URLs \n"\
23
- "#{USAGE} #{option_w} \t Comma separated URLs to white list \n"\
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
- puts " #{k + 1}. #{x['status']}: #{x['url']} "
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
 
@@ -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
@@ -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 = e
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
@@ -5,5 +5,5 @@ module AwesomeBot
5
5
  'Great for "awesome" projects.'
6
6
  PROJECT_URL = 'https://github.com/dkhamsing/awesome_bot'
7
7
 
8
- VERSION = '1.2.1'
8
+ VERSION = '1.3.0'
9
9
  end
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.2.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 00:00:00.000000000 Z
11
+ date: 2015-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday