Methods
Public Class methods
new(base_command)
     # File railties/lib/commands/plugin.rb, line 679
679:     def initialize(base_command)
680:       @base_command = base_command
681:       @list = false
682:       @prompt = true
683:     end
Public Instance methods
extract_repository_uri(uri)
     # File railties/lib/commands/plugin.rb, line 746
746:     def extract_repository_uri(uri)
747:       uri.match(/(svn|https?):.*\/plugins\//i)[0]
748:     end
options()
     # File railties/lib/commands/plugin.rb, line 685
685:     def options
686:       OptionParser.new do |o|
687:         o.set_summary_indent('  ')
688:         o.banner =    "Usage: #{@base_command.script_name} discover URI [URI [URI]...]"
689:         o.define_head "Discover repositories referenced on a page."
690:         o.separator   ""        
691:         o.separator   "Options:"
692:         o.separator   ""
693:         o.on(         "-l", "--list", 
694:                       "List but don't prompt or add discovered repositories.") { |list| @list, @prompt = list, !@list }
695:         o.on(         "-n", "--no-prompt", 
696:                       "Add all new repositories without prompting.") { |v| @prompt = !v }
697:       end
698:     end
parse!(args)
     # File railties/lib/commands/plugin.rb, line 700
700:     def parse!(args)
701:       options.parse!(args)
702:       args = ['http://wiki.rubyonrails.org/rails/pages/Plugins'] if args.empty?
703:       args.each do |uri|
704:         scrape(uri) do |repo_uri|
705:           catch(:next_uri) do
706:             if @prompt
707:               begin
708:                 $stdout.print "Add #{repo_uri}? [Y/n] "
709:                 throw :next_uri if $stdin.gets !~ /^y?$/i
710:               rescue Interrupt
711:                 $stdout.puts
712:                 exit 1
713:               end
714:             elsif @list
715:               puts repo_uri
716:               throw :next_uri
717:             end
718:             Repositories.instance.add(repo_uri)
719:             puts "discovered: #{repo_uri}" if $verbose or !@prompt
720:           end
721:         end
722:       end
723:       Repositories.instance.save
724:     end
scrape(uri) {|uri unless dupes.include?(uri) || Repositories.instance.exist?(uri)| ...}
     # File railties/lib/commands/plugin.rb, line 726
726:     def scrape(uri)
727:       require 'open-uri'
728:       puts "Scraping #{uri}" if $verbose
729:       dupes = []
730:       content = open(uri).each do |line|
731:         begin
732:           if line =~ /<a[^>]*href=['"]([^'"]*)['"]/ || line =~ /(svn:\/\/[^<|\n]*)/
733:             uri = $1
734:             if uri =~ /^\w+:\/\// && uri =~ /\/plugins\// && uri !~ /\/browser\// && uri !~ /^http:\/\/wiki\.rubyonrails/ && uri !~ /http:\/\/instiki/
735:               uri = extract_repository_uri(uri)
736:               yield uri unless dupes.include?(uri) || Repositories.instance.exist?(uri)
737:               dupes << uri
738:             end
739:           end
740:         rescue
741:           puts "Problems scraping '#{uri}': #{$!.to_s}"
742:         end
743:       end
744:     end