awesome_bot 1.1.0 → 1.2.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 +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +7 -0
- data/README.md +3 -4
- data/lib/awesome_bot/check.rb +28 -55
- data/lib/awesome_bot/cli.rb +38 -2
- data/lib/awesome_bot/log.rb +17 -0
- data/lib/awesome_bot/result.rb +44 -0
- data/lib/awesome_bot/version.rb +1 -1
- metadata +4 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 4c6768985f4950e9e02cd32463e1f160b9dc0900
         | 
| 4 | 
            +
              data.tar.gz: b32f892d1dcbb164b14a91a860000c39dd23cd44
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 758801b59a894c8f59f6b11238b7b73e302202a32991b924d9c20bc884a0355197c5a969454e731e8c5559df2b109837cb66f5dcd319e6e1706add98ee1c6355
         | 
| 7 | 
            +
              data.tar.gz: 1d5ba3c19898eae9e252bdcc2344798f5af89400d0f7c79f528b86eed88f16e9fe4b573830dbe5ad95b296d3dbc819a41f79635a1b453c7019f36416fbbce779
         | 
    
        data/.travis.yml
    CHANGED
    
    | @@ -8,4 +8,4 @@ script: | |
| 8 8 | 
             
              - awesome_bot bin/assets/test-no-issues
         | 
| 9 9 | 
             
              - awesome_bot bin/assets/test-no-links
         | 
| 10 10 | 
             
              - awesome_bot bin/assets/test-dupe --allow-dupe
         | 
| 11 | 
            -
              - awesome_bot README.md --allow-dupe --white-list gph.is,bot.svg,codeload,badge
         | 
| 11 | 
            +
              - awesome_bot README.md --allow-dupe --white-list gph.is,bot.svg,codeload,badge,rubydoc
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -20,6 +20,13 @@ | |
| 20 20 | 
             
            - add head option when getting statuses
         | 
| 21 21 | 
             
            - [cli] improve output for `--allow-dupe`
         | 
| 22 22 |  | 
| 23 | 
            +
            # 1.2.0
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            - move some logic from check to cli
         | 
| 26 | 
            +
            - output status for white listed links
         | 
| 27 | 
            +
            - use `result`
         | 
| 28 | 
            +
            - use `logger`
         | 
| 29 | 
            +
             | 
| 23 30 | 
             
            ## Contact
         | 
| 24 31 |  | 
| 25 32 | 
             
            - [github.com/dkhamsing](https://github.com/dkhamsing)
         | 
    
        data/README.md
    CHANGED
    
    | @@ -33,12 +33,11 @@ irb(main):001:0> require 'awesome_bot' | |
| 33 33 | 
             
            irb(main):002:0> c = File.read 'README.md'
         | 
| 34 34 | 
             
            => "..."
         | 
| 35 35 | 
             
            irb(main):003:0> AwesomeBot.check c
         | 
| 36 | 
            -
            =>  | 
| 37 | 
            -
            #  | 
| 38 | 
            -
            # otherwise returning true
         | 
| 36 | 
            +
            => #<AwesomeBot::Result:0x007fdde39f4408 @links=...>
         | 
| 37 | 
            +
            # AwesomeBot Result with success, statuses_issues, dupes and more
         | 
| 39 38 | 
             
            ```
         | 
| 40 39 |  | 
| 41 | 
            -
            More information at [rubydoc](http://www.rubydoc.info/gems/awesome_bot | 
| 40 | 
            +
            More information at [rubydoc](http://www.rubydoc.info/gems/awesome_bot).
         | 
| 42 41 |  | 
| 43 42 | 
             
            ### Command Line
         | 
| 44 43 |  | 
    
        data/lib/awesome_bot/check.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            require 'awesome_bot/links'
         | 
| 2 | 
            +
            require 'awesome_bot/log'
         | 
| 3 | 
            +
            require 'awesome_bot/result'
         | 
| 2 4 | 
             
            require 'awesome_bot/statuses'
         | 
| 3 | 
            -
            require 'awesome_bot/white_list'
         | 
| 4 5 |  | 
| 5 6 | 
             
            # Check links
         | 
| 6 7 | 
             
            module AwesomeBot
         | 
| @@ -10,71 +11,43 @@ module AwesomeBot | |
| 10 11 | 
             
              STATUS_OTHER = 'x'
         | 
| 11 12 |  | 
| 12 13 | 
             
              class << self
         | 
| 13 | 
            -
                def check(content, white_listed = nil, skip_dupe = false,  | 
| 14 | 
            -
                   | 
| 14 | 
            +
                def check(content, white_listed = nil, skip_dupe = false, log = Log.new)
         | 
| 15 | 
            +
                  log.add '> Will allow duplicate links' if skip_dupe
         | 
| 15 16 |  | 
| 16 | 
            -
                   | 
| 17 | 
            +
                  temp = links_filter(links_find(content))
         | 
| 17 18 |  | 
| 18 | 
            -
                   | 
| 19 | 
            -
                   | 
| 19 | 
            +
                  r = Result.new(temp, white_listed)
         | 
| 20 | 
            +
                  r.skip_dupe = skip_dupe
         | 
| 20 21 |  | 
| 21 | 
            -
                   | 
| 22 | 
            +
                  log.add "> White list: #{white_listed.join ', '}" if r.white_listing
         | 
| 22 23 |  | 
| 23 | 
            -
                   | 
| 24 | 
            -
                    rejected, links = links.partition { |u| white_list white_listed, u }
         | 
| 25 | 
            -
                  end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                  if verbose
         | 
| 28 | 
            -
                    print "Links found: #{links.count}"
         | 
| 29 | 
            -
                    print ", #{rejected.count} white listed" if white_listing
         | 
| 30 | 
            -
                    print ", #{links.uniq.count} unique" if links.count != links.uniq.count
         | 
| 31 | 
            -
                    puts ''
         | 
| 32 | 
            -
                    links.uniq.each_with_index { |u, j| puts "  #{j + 1}. #{u}" }
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  print 'Checking URLs: ' if verbose && (links.count > 0)
         | 
| 36 | 
            -
                  statuses =
         | 
| 37 | 
            -
                    statuses(links.uniq, NUMBER_OF_THREADS) do |s|
         | 
| 38 | 
            -
                      print(s == 200 ? STATUS_OK : STATUS_OTHER) if verbose
         | 
| 39 | 
            -
                    end
         | 
| 40 | 
            -
                  puts '' if verbose
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                  statuses_issues = statuses.select { |x| x['status'] != 200 }
         | 
| 43 | 
            -
                  links_success = statuses_issues.count == 0
         | 
| 24 | 
            +
                  r.dupes = r.links.select { |e| r.links.count(e) > 1 } unless skip_dupe
         | 
| 44 25 |  | 
| 26 | 
            +
                  log.addp "Links found: #{r.links.count}"
         | 
| 27 | 
            +
                  log.addp ", #{r.rejected.count} white listed" if r.white_listing
         | 
| 45 28 | 
             
                  unless skip_dupe
         | 
| 46 | 
            -
                     | 
| 47 | 
            -
                    dupes = links.select { |e| links.count(e) > 1 }
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                  if links_success && dupe_success
         | 
| 51 | 
            -
                    puts 'No issues :-)' if verbose
         | 
| 52 | 
            -
                    return true
         | 
| 29 | 
            +
                    log.addp ", #{r.links.uniq.count} unique" if r.dupes.count > 0
         | 
| 53 30 | 
             
                  end
         | 
| 31 | 
            +
                  log.add ''
         | 
| 32 | 
            +
                  r.links.uniq.each_with_index { |u, j| log.add "  #{j + 1}. #{u}" }
         | 
| 54 33 |  | 
| 55 | 
            -
                  if  | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
                    if links_success
         | 
| 60 | 
            -
                      puts "  All OK #{STATUS_OK}"
         | 
| 61 | 
            -
                    else
         | 
| 62 | 
            -
                      statuses_issues.each_with_index do |x, k|
         | 
| 63 | 
            -
                        puts "  #{k + 1}. #{x['status']}: #{x['url']} "
         | 
| 64 | 
            -
                      end
         | 
| 34 | 
            +
                  log.addp 'Checking URLs: ' if r.links.count > 0
         | 
| 35 | 
            +
                  r.status =
         | 
| 36 | 
            +
                    statuses(r.links.uniq, NUMBER_OF_THREADS) do |s|
         | 
| 37 | 
            +
                      log.addp(s == 200 ? STATUS_OK : STATUS_OTHER)
         | 
| 65 38 | 
             
                    end
         | 
| 39 | 
            +
                  log.add ''
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  return r if !r.white_listing || (r.rejected.count > 0)
         | 
| 66 42 |  | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
                      else
         | 
| 72 | 
            -
                        dupes.uniq.each_with_index { |d, m| puts "  #{m + 1}. #{d}" }
         | 
| 73 | 
            -
                      end
         | 
| 43 | 
            +
                  log.addp 'Checking white listed URLs: '
         | 
| 44 | 
            +
                  r.white_listed =
         | 
| 45 | 
            +
                    statuses(r.rejected.uniq, NUMBER_OF_THREADS, true) do |s|
         | 
| 46 | 
            +
                      log.addp(s == 200 ? STATUS_OK : STATUS_OTHER)
         | 
| 74 47 | 
             
                    end
         | 
| 75 | 
            -
                   | 
| 48 | 
            +
                  log.add ''
         | 
| 76 49 |  | 
| 77 | 
            -
                   | 
| 78 | 
            -
                end #  | 
| 50 | 
            +
                  r
         | 
| 51 | 
            +
                end # check
         | 
| 79 52 | 
             
              end # class
         | 
| 80 53 | 
             
            end
         | 
    
        data/lib/awesome_bot/cli.rb
    CHANGED
    
    | @@ -1,3 +1,6 @@ | |
| 1 | 
            +
            require 'awesome_bot/check'
         | 
| 2 | 
            +
            require 'awesome_bot/log'
         | 
| 3 | 
            +
            require 'awesome_bot/result'
         | 
| 1 4 | 
             
            require 'awesome_bot/version'
         | 
| 2 5 |  | 
| 3 6 | 
             
            # Command line interface
         | 
| @@ -43,9 +46,42 @@ module AwesomeBot | |
| 43 46 | 
             
                    exit 1
         | 
| 44 47 | 
             
                  end
         | 
| 45 48 |  | 
| 46 | 
            -
                   | 
| 49 | 
            +
                  log = Log.new(true)
         | 
| 50 | 
            +
                  r = check(content, white_listed, skip_dupe, log)
         | 
| 47 51 |  | 
| 48 | 
            -
                   | 
| 52 | 
            +
                  unless r.white_listed.nil?
         | 
| 53 | 
            +
                    puts "\n> White listed:"
         | 
| 54 | 
            +
                    r.white_listed.each_with_index do |x, k|
         | 
| 55 | 
            +
                      puts "  #{k + 1}. #{x['status']}: #{x['url']} "
         | 
| 56 | 
            +
                    end
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  if r.success == true
         | 
| 60 | 
            +
                    puts 'No issues :-)'
         | 
| 61 | 
            +
                    # exit ?
         | 
| 62 | 
            +
                  else
         | 
| 63 | 
            +
                    puts "\nIssues :-("
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    print "> Links \n"
         | 
| 66 | 
            +
                    if r.success_links
         | 
| 67 | 
            +
                      puts "  All OK #{STATUS_OK}"
         | 
| 68 | 
            +
                    else
         | 
| 69 | 
            +
                      r.statuses_issues.each_with_index do |x, k|
         | 
| 70 | 
            +
                        puts "  #{k + 1}. #{x['status']}: #{x['url']} "
         | 
| 71 | 
            +
                      end
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                    unless skip_dupe
         | 
| 75 | 
            +
                      print "> Dupes \n"
         | 
| 76 | 
            +
                      if r.success_dupe
         | 
| 77 | 
            +
                        puts "  None #{STATUS_OK}"
         | 
| 78 | 
            +
                      else
         | 
| 79 | 
            +
                        r.dupes.uniq.each_with_index { |d, m| puts "  #{m + 1}. #{d}" }
         | 
| 80 | 
            +
                      end
         | 
| 81 | 
            +
                    end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                    exit 1
         | 
| 84 | 
            +
                  end
         | 
| 49 85 | 
             
                end
         | 
| 50 86 | 
             
              end # class
         | 
| 51 87 | 
             
            end
         | 
| @@ -0,0 +1,44 @@ | |
| 1 | 
            +
            require 'awesome_bot/white_list'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Result
         | 
| 4 | 
            +
            module AwesomeBot
         | 
| 5 | 
            +
              # Result
         | 
| 6 | 
            +
              class Result
         | 
| 7 | 
            +
                attr_accessor :dupes
         | 
| 8 | 
            +
                attr_accessor :skip_dupe
         | 
| 9 | 
            +
                attr_accessor :status
         | 
| 10 | 
            +
                attr_accessor :white_listed
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                attr_reader :rejected
         | 
| 13 | 
            +
                attr_reader :links
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def initialize(links, white_list_from_cli)
         | 
| 16 | 
            +
                  @links = links
         | 
| 17 | 
            +
                  @w = white_list_from_cli
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  return if @w.nil?
         | 
| 20 | 
            +
                  @rejected, @links = links.partition { |u| AwesomeBot.white_list @w, u }
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def statuses_issues
         | 
| 24 | 
            +
                  status.select { |x| x['status'] != 200 }
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def success
         | 
| 28 | 
            +
                  success_dupe && success_links
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def success_dupe
         | 
| 32 | 
            +
                  return true if skip_dupe
         | 
| 33 | 
            +
                  links.uniq.count == links.count
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def success_links
         | 
| 37 | 
            +
                  statuses_issues.count == 0
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def white_listing
         | 
| 41 | 
            +
                  !@w.nil?
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
              end # class
         | 
| 44 | 
            +
            end
         | 
    
        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.2.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-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: faraday
         | 
| @@ -95,6 +95,8 @@ files: | |
| 95 95 | 
             
            - lib/awesome_bot/check.rb
         | 
| 96 96 | 
             
            - lib/awesome_bot/cli.rb
         | 
| 97 97 | 
             
            - lib/awesome_bot/links.rb
         | 
| 98 | 
            +
            - lib/awesome_bot/log.rb
         | 
| 99 | 
            +
            - lib/awesome_bot/result.rb
         | 
| 98 100 | 
             
            - lib/awesome_bot/statuses.rb
         | 
| 99 101 | 
             
            - lib/awesome_bot/version.rb
         | 
| 100 102 | 
             
            - lib/awesome_bot/white_list.rb
         |