Methods
Public Class methods
[ show source ]
# 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
[ show source ]
# File railties/lib/commands/plugin.rb, line 746 746: def extract_repository_uri(uri) 747: uri.match(/(svn|https?):.*\/plugins\//i)[0] 748: end
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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