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 678
678:     def initialize(base_command)
679:       @base_command = base_command
680:       @list = false
681:       @prompt = true
682:     end

Public Instance methods

[Source]

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

[Source]

     # File vendor/rails/railties/lib/commands/plugin.rb, line 684
684:     def options
685:       OptionParser.new do |o|
686:         o.set_summary_indent('  ')
687:         o.banner =    "Usage: #{@base_command.script_name} discover URI [URI [URI]...]"
688:         o.define_head "Discover repositories referenced on a page."
689:         o.separator   ""        
690:         o.separator   "Options:"
691:         o.separator   ""
692:         o.on(         "-l", "--list", 
693:                       "List but don't prompt or add discovered repositories.") { |list| @list, @prompt = list, !@list }
694:         o.on(         "-n", "--no-prompt", 
695:                       "Add all new repositories without prompting.") { |v| @prompt = !v }
696:       end
697:     end

[Source]

     # File vendor/rails/railties/lib/commands/plugin.rb, line 699
699:     def parse!(args)
700:       options.parse!(args)
701:       args = ['http://wiki.rubyonrails.org/rails/pages/Plugins'] if args.empty?
702:       args.each do |uri|
703:         scrape(uri) do |repo_uri|
704:           catch(:next_uri) do
705:             if @prompt
706:               begin
707:                 $stdout.print "Add #{repo_uri}? [Y/n] "
708:                 throw :next_uri if $stdin.gets !~ /^y?$/i
709:               rescue Interrupt
710:                 $stdout.puts
711:                 exit 1
712:               end
713:             elsif @list
714:               puts repo_uri
715:               throw :next_uri
716:             end
717:             Repositories.instance.add(repo_uri)
718:             puts "discovered: #{repo_uri}" if $verbose or !@prompt
719:           end
720:         end
721:       end
722:       Repositories.instance.save
723:     end

[Source]

     # File vendor/rails/railties/lib/commands/plugin.rb, line 725
725:     def scrape(uri)
726:       require 'open-uri'
727:       puts "Scraping #{uri}" if $verbose
728:       dupes = []
729:       content = open(uri).each do |line|
730:         begin
731:           if line =~ /<a[^>]*href=['"]([^'"]*)['"]/ || line =~ /(svn:\/\/[^<|\n]*)/
732:             uri = $1
733:             if uri =~ /^\w+:\/\// && uri =~ /\/plugins\// && uri !~ /\/browser\// && uri !~ /^http:\/\/wiki\.rubyonrails/ && uri !~ /http:\/\/instiki/
734:               uri = extract_repository_uri(uri)
735:               yield uri unless dupes.include?(uri) || Repositories.instance.exist?(uri)
736:               dupes << uri
737:             end
738:           end
739:         rescue
740:           puts "Problems scraping '#{uri}': #{$!.to_s}"
741:         end
742:       end
743:     end

[Validate]