From 28822b581aa5645d7dd6247bd5e49c72c389635f Mon Sep 17 00:00:00 2001 From: Gordon Thiesfeld Date: Sun, 5 Dec 2010 09:38:10 -0600 Subject: [PATCH] added gem server --launch option to launch a browser pointing at gem server --- lib/rubygems/commands/server_command.rb | 4 ++++ lib/rubygems/server.rb | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/rubygems/commands/server_command.rb b/lib/rubygems/commands/server_command.rb index 1760700e2736..5c39a0fc013f 100644 --- a/lib/rubygems/commands/server_command.rb +++ b/lib/rubygems/commands/server_command.rb @@ -43,6 +43,10 @@ def initialize options[:addresses] ||= [] options[:addresses].push(*address) end + + add_option '--launch', 'launch a browser window' do |launch, options| + options[:launch] = launch + end end def defaults_str # :nodoc: diff --git a/lib/rubygems/server.rb b/lib/rubygems/server.rb index 3b966f269bcb..ea7cf40f636b 100644 --- a/lib/rubygems/server.rb +++ b/lib/rubygems/server.rb @@ -429,18 +429,19 @@ class Gem::Server def self.run(options) new(options[:gemdir], options[:port], options[:daemon], - options[:addresses]).run + options[:launch],options[:addresses]).run end ## # Only the first directory in gem_dirs is used for serving gems - def initialize(gem_dirs, port, daemon, addresses = nil) + def initialize(gem_dirs, port, daemon, launch, addresses = nil) Socket.do_not_reverse_lookup = true @gem_dirs = Array gem_dirs @port = port @daemon = daemon + @launch = launch @addresses = addresses logger = WEBrick::Log.new nil, WEBrick::BasicLog::FATAL @server = WEBrick::HTTPServer.new :DoNotListen => true, :Logger => logger @@ -802,6 +803,8 @@ def run trap("INT") { @server.shutdown; exit! } trap("TERM") { @server.shutdown; exit! } + + launch if @launch @server.start end @@ -854,6 +857,15 @@ def yaml(req, res) res.body << index end + + def launch + listeners = @server.listeners.map{|l| l.addr[2] } + + host = listeners.any?{|l| l == '0.0.0.0'} ? 'localhost' : listeners.first + cmd = Gem.win_platform? ? 'start' : 'open' + + system("#{cmd} http://#{host}:#{@port}") + end end