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