| Class | Commands::Discover |
| In: |
vendor/rails/railties/lib/commands/plugin.rb
|
| Parent: | Object |
# File vendor/rails/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
# File vendor/rails/railties/lib/commands/plugin.rb, line 746
746: def extract_repository_uri(uri)
747: uri.match(/(svn|https?):.*\/plugins\//i)[0]
748: end
# File vendor/rails/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
# File vendor/rails/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
# File vendor/rails/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