Class Commands::Discover
In: vendor/rails/railties/lib/commands/plugin.rb
Parent: Object

Methods

Public Class methods

[Source]

     # File vendor/rails/railties/lib/commands/plugin.rb, line 637
637:     def initialize(base_command)
638:       @base_command = base_command
639:       @list = false
640:       @prompt = true
641:     end

Public Instance methods

[Source]

     # File vendor/rails/railties/lib/commands/plugin.rb, line 704
704:     def extract_repository_uri(uri)
705:       uri.match(/(svn|https?):.*\/plugins\//i)[0]
706:     end

[Source]

     # File vendor/rails/railties/lib/commands/plugin.rb, line 643
643:     def options
644:       OptionParser.new do |o|
645:         o.set_summary_indent('  ')
646:         o.banner =    "Usage: #{@base_command.script_name} discover URI [URI [URI]...]"
647:         o.define_head "Discover repositories referenced on a page."
648:         o.separator   ""        
649:         o.separator   "Options:"
650:         o.separator   ""
651:         o.on(         "-l", "--list", 
652:                       "List but don't prompt or add discovered repositories.") { |@list| @prompt = !@list }
653:         o.on(         "-n", "--no-prompt", 
654:                       "Add all new repositories without prompting.") { |v| @prompt = !v }
655:       end
656:     end

[Source]

     # File vendor/rails/railties/lib/commands/plugin.rb, line 658
658:     def parse!(args)
659:       options.parse!(args)
660:       args = ['http://wiki.rubyonrails.org/rails/pages/Plugins'] if args.empty?
661:       args.each do |uri|
662:         scrape(uri) do |repo_uri|
663:           catch(:next_uri) do
664:             if @prompt
665:               begin
666:                 $stdout.print "Add #{repo_uri}? [Y/n] "
667:                 throw :next_uri if $stdin.gets !~ /^y?$/i
668:               rescue Interrupt
669:                 $stdout.puts
670:                 exit 1
671:               end
672:             elsif @list
673:               puts repo_uri
674:               throw :next_uri
675:             end
676:             Repositories.instance.add(repo_uri)
677:             puts "discovered: #{repo_uri}" if $verbose or !@prompt
678:           end
679:         end
680:       end
681:       Repositories.instance.save
682:     end

[Source]

     # File vendor/rails/railties/lib/commands/plugin.rb, line 684
684:     def scrape(uri)
685:       require 'open-uri'
686:       puts "Scraping #{uri}" if $verbose
687:       dupes = []
688:       content = open(uri).each do |line|
689:         begin
690:           if line =~ /<a[^>]*href=['"]([^'"]*)['"]/ || line =~ /(svn:\/\/[^<|\n]*)/
691:             uri = $1
692:             if uri =~ /^\w+:\/\// && uri =~ /\/plugins\// && uri !~ /\/browser\// && uri !~ /^http:\/\/wiki\.rubyonrails/ && uri !~ /http:\/\/instiki/
693:               uri = extract_repository_uri(uri)
694:               yield uri unless dupes.include?(uri) || Repositories.instance.exist?(uri)
695:               dupes << uri
696:             end
697:           end
698:         rescue
699:           puts "Problems scraping '#{uri}': #{$!.to_s}"
700:         end
701:       end
702:     end

[Validate]