lib/commands/upgrade.rb in gemcutter-0.0.1 vs lib/commands/upgrade.rb in gemcutter-0.0.2
- old
+ new
@@ -1,20 +1,57 @@
-class Gem::Commands::UpgradeCommand < Gem::Command
- DESCRIPTION = 'Upgrade your gem source to Gemcutter'
+class Gem::StreamUI
+ def ask_for_password(message)
+ system "stty -echo"
+ password = ask(message)
+ system "stty echo"
+ password
+ end
+end
+class Gem::Commands::UpgradeCommand < Gem::Command
def description
- DESCRIPTION
+ 'Upgrade your gem source to Gemcutter'
end
+ def ask_for_password(message)
+ ui.ask_for_password(message)
+ end
+
def initialize
- super 'upgrade', DESCRIPTION
+ super 'upgrade', description
end
def execute
- say "Upgrading your primary gem source to gems.gemcutter.org"
- Gem.sources.delete "http://gems.rubyforge.org"
- Gem.sources << "http://gemcutter.org"
+ add_source
+ sign_in
+ end
+
+ def add_source
+ if Gem.sources.include?(URL)
+ say "Gemcutter is already your primary gem source. Please use `gem downgrade` if you wish to no longer use Gemcutter."
+ else
+ say "Upgrading your primary gem source to gemcutter.org"
+ Gem.sources.unshift URL
+ Gem.configuration.write
+ end
+ end
+
+ def sign_in
+ say "Enter your Gemcutter credentials. Don't have an account yet? Create one at #{URL}/sign_up"
+
+ email = ask("Email: ")
+ password = ask_for_password("Password: ")
+
+ site = ENV['TEST'] ? "local" : "org"
+ url = URI.parse("http://gemcutter.#{site}/api_key")
+
+ request = Net::HTTP::Get.new(url.path)
+ request.basic_auth email, password
+ response = Net::HTTP.new(url.host, url.port).start { |http| http.request(request) }
+
+ Gem.configuration[:gemcutter_key] = response.body
Gem.configuration.write
end
+
end
Gem::CommandManager.instance.register_command :upgrade