Class | Commands::Discover |
In: |
vendor/rails/railties/lib/commands/plugin.rb
|
Parent: | Object |
# 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
# 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
# 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
# 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
# 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