Class | Commands::Discover |
In: |
vendor/rails/railties/lib/commands/plugin.rb
|
Parent: | Object |
# File vendor/rails/railties/lib/commands/plugin.rb, line 661 661: def initialize(base_command) 662: @base_command = base_command 663: @list = false 664: @prompt = true 665: end
# File vendor/rails/railties/lib/commands/plugin.rb, line 728 728: def extract_repository_uri(uri) 729: uri.match(/(svn|https?):.*\/plugins\//i)[0] 730: end
# File vendor/rails/railties/lib/commands/plugin.rb, line 667 667: def options 668: OptionParser.new do |o| 669: o.set_summary_indent(' ') 670: o.banner = "Usage: #{@base_command.script_name} discover URI [URI [URI]...]" 671: o.define_head "Discover repositories referenced on a page." 672: o.separator "" 673: o.separator "Options:" 674: o.separator "" 675: o.on( "-l", "--list", 676: "List but don't prompt or add discovered repositories.") { |@list| @prompt = !@list } 677: o.on( "-n", "--no-prompt", 678: "Add all new repositories without prompting.") { |v| @prompt = !v } 679: end 680: end
# File vendor/rails/railties/lib/commands/plugin.rb, line 682 682: def parse!(args) 683: options.parse!(args) 684: args = ['http://wiki.rubyonrails.org/rails/pages/Plugins'] if args.empty? 685: args.each do |uri| 686: scrape(uri) do |repo_uri| 687: catch(:next_uri) do 688: if @prompt 689: begin 690: $stdout.print "Add #{repo_uri}? [Y/n] " 691: throw :next_uri if $stdin.gets !~ /^y?$/i 692: rescue Interrupt 693: $stdout.puts 694: exit 1 695: end 696: elsif @list 697: puts repo_uri 698: throw :next_uri 699: end 700: Repositories.instance.add(repo_uri) 701: puts "discovered: #{repo_uri}" if $verbose or !@prompt 702: end 703: end 704: end 705: Repositories.instance.save 706: end
# File vendor/rails/railties/lib/commands/plugin.rb, line 708 708: def scrape(uri) 709: require 'open-uri' 710: puts "Scraping #{uri}" if $verbose 711: dupes = [] 712: content = open(uri).each do |line| 713: begin 714: if line =~ /<a[^>]*href=['"]([^'"]*)['"]/ || line =~ /(svn:\/\/[^<|\n]*)/ 715: uri = $1 716: if uri =~ /^\w+:\/\// && uri =~ /\/plugins\// && uri !~ /\/browser\// && uri !~ /^http:\/\/wiki\.rubyonrails/ && uri !~ /http:\/\/instiki/ 717: uri = extract_repository_uri(uri) 718: yield uri unless dupes.include?(uri) || Repositories.instance.exist?(uri) 719: dupes << uri 720: end 721: end 722: rescue 723: puts "Problems scraping '#{uri}': #{$!.to_s}" 724: end 725: end 726: end