awesome_bot 1.2.1 → 1.3.0

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: 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