gemcutter 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/commands/abstract_command.rb +37 -8
- data/lib/commands/migrate.rb +25 -30
- data/lib/commands/push.rb +5 -17
- data/test/{unit/commands → commands}/abstract_command_test.rb +1 -1
- data/test/{unit/commands → commands}/migrate_command_test.rb +2 -1
- data/test/{unit/commands → commands}/push_command_test.rb +1 -1
- data/test/{unit/commands → commands}/tumble_command_test.rb +4 -4
- metadata +16 -6
@@ -1,4 +1,8 @@
|
|
1
|
+
require 'rubygems/local_remote_options'
|
2
|
+
|
1
3
|
class Gem::AbstractCommand < Gem::Command
|
4
|
+
include Gem::LocalRemoteOptions
|
5
|
+
|
2
6
|
def api_key
|
3
7
|
Gem.configuration[:gemcutter_key]
|
4
8
|
end
|
@@ -22,14 +26,9 @@ class Gem::AbstractCommand < Gem::Command
|
|
22
26
|
email = ask("Email: ")
|
23
27
|
password = ask_for_password("Password: ")
|
24
28
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
29
|
-
http.use_ssl = (url.scheme == 'https')
|
30
|
-
request = Net::HTTP::Get.new(url.path)
|
31
|
-
request.basic_auth email, password
|
32
|
-
response = http.request(request)
|
29
|
+
response = make_request(:get, "api_key") do |request|
|
30
|
+
request.basic_auth email, password
|
31
|
+
end
|
33
32
|
|
34
33
|
case response
|
35
34
|
when Net::HTTPSuccess
|
@@ -42,6 +41,36 @@ class Gem::AbstractCommand < Gem::Command
|
|
42
41
|
end
|
43
42
|
end
|
44
43
|
|
44
|
+
def make_request(method, path)
|
45
|
+
require 'net/http'
|
46
|
+
require 'net/https'
|
47
|
+
|
48
|
+
url = URI.parse("#{gemcutter_url}/#{path}")
|
49
|
+
|
50
|
+
http = proxy_class.new(url.host, url.port)
|
51
|
+
|
52
|
+
if url.scheme == 'https'
|
53
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
54
|
+
http.use_ssl = true
|
55
|
+
end
|
56
|
+
|
57
|
+
request_method =
|
58
|
+
case method
|
59
|
+
when :get
|
60
|
+
proxy_class::Get
|
61
|
+
when :post
|
62
|
+
proxy_class::Post
|
63
|
+
when :put
|
64
|
+
proxy_class::Put
|
65
|
+
else
|
66
|
+
raise ArgumentError
|
67
|
+
end
|
68
|
+
|
69
|
+
request = request_method.new(url.path)
|
70
|
+
yield request if block_given?
|
71
|
+
http.request(request)
|
72
|
+
end
|
73
|
+
|
45
74
|
def use_proxy!
|
46
75
|
proxy_uri = http_proxy
|
47
76
|
@proxy_class = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password)
|
data/lib/commands/migrate.rb
CHANGED
@@ -1,8 +1,3 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
require 'net/scp'
|
3
|
-
require 'json'
|
4
|
-
require 'tempfile'
|
5
|
-
|
6
1
|
class Gem::Commands::MigrateCommand < Gem::AbstractCommand
|
7
2
|
attr_reader :rubygem
|
8
3
|
|
@@ -27,30 +22,31 @@ class Gem::Commands::MigrateCommand < Gem::AbstractCommand
|
|
27
22
|
end
|
28
23
|
|
29
24
|
def find(name)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
25
|
+
require 'json'
|
26
|
+
|
27
|
+
response = make_request(:get, "gems/#{name}.json")
|
28
|
+
|
29
|
+
case response
|
30
|
+
when Net::HTTPSuccess
|
31
|
+
begin
|
32
|
+
@rubygem = JSON.parse(response.body)
|
33
|
+
rescue JSON::ParserError => json_error
|
34
|
+
say "There was a problem parsing the data: #{json_error}"
|
35
|
+
terminate_interaction
|
36
|
+
end
|
37
|
+
else
|
34
38
|
say "This gem is currently not hosted on Gemcutter."
|
35
39
|
terminate_interaction
|
36
|
-
rescue JSON::ParserError => json_error
|
37
|
-
say "There was a problem parsing the data: #{json_error}"
|
38
|
-
terminate_interaction
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
42
43
|
def get_token
|
43
44
|
say "Starting migration of #{rubygem["name"]} from RubyForge..."
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
http.use_ssl = (url.scheme == 'https')
|
50
|
-
request = proxy_class::Post.new(url.path)
|
51
|
-
request.add_field("Content-Length", 0)
|
52
|
-
request.add_field("Authorization", api_key)
|
53
|
-
response = http.request(request)
|
46
|
+
response = make_request(:post, "gems/#{rubygem["slug"]}/migrate") do |request|
|
47
|
+
request.add_field("Content-Length", 0)
|
48
|
+
request.add_field("Authorization", api_key)
|
49
|
+
end
|
54
50
|
|
55
51
|
case response
|
56
52
|
when Net::HTTPSuccess
|
@@ -63,6 +59,9 @@ class Gem::Commands::MigrateCommand < Gem::AbstractCommand
|
|
63
59
|
end
|
64
60
|
|
65
61
|
def upload_token(token)
|
62
|
+
require 'tempfile'
|
63
|
+
require 'net/scp'
|
64
|
+
|
66
65
|
url = "#{self.rubygem['rubyforge_project']}.rubyforge.org"
|
67
66
|
say "Uploading the migration token to #{url}. Please enter your RubyForge login:"
|
68
67
|
login = ask("Login: ")
|
@@ -84,15 +83,11 @@ class Gem::Commands::MigrateCommand < Gem::AbstractCommand
|
|
84
83
|
|
85
84
|
def check_for_approved
|
86
85
|
say "Asking Gemcutter to verify the upload..."
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
request = proxy_class::Put.new(url.path)
|
93
|
-
request.add_field("Content-Length", 0)
|
94
|
-
request.add_field("Authorization", api_key)
|
95
|
-
response = http.request(request)
|
86
|
+
|
87
|
+
response = make_request(:put, "gems/#{rubygem["slug"]}/migrate") do |request|
|
88
|
+
request.add_field("Content-Length", 0)
|
89
|
+
request.add_field("Authorization", api_key)
|
90
|
+
end
|
96
91
|
|
97
92
|
say response.body
|
98
93
|
end
|
data/lib/commands/push.rb
CHANGED
@@ -1,11 +1,5 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'net/https'
|
3
|
-
require 'rubygems/local_remote_options'
|
4
|
-
|
5
1
|
class Gem::Commands::PushCommand < Gem::AbstractCommand
|
6
2
|
|
7
|
-
include Gem::LocalRemoteOptions
|
8
|
-
|
9
3
|
def description
|
10
4
|
'Push a gem up to Gemcutter'
|
11
5
|
end
|
@@ -32,17 +26,11 @@ class Gem::Commands::PushCommand < Gem::AbstractCommand
|
|
32
26
|
say "Pushing gem to Gemcutter..."
|
33
27
|
|
34
28
|
name = get_one_gem_name
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
request = proxy_class::Post.new(url.path)
|
41
|
-
request.body = File.open(name).read
|
42
|
-
request.add_field("Content-Length", request.body.size)
|
43
|
-
request.add_field("Authorization", api_key)
|
44
|
-
|
45
|
-
response = http.request(request)
|
29
|
+
response = make_request(:post, "gems") do |request|
|
30
|
+
request.body = File.open(name).read
|
31
|
+
request.add_field("Content-Length", request.body.size)
|
32
|
+
request.add_field("Authorization", api_key)
|
33
|
+
end
|
46
34
|
|
47
35
|
say response.body
|
48
36
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/../command_helper'
|
2
2
|
|
3
3
|
class TumbleCommandTest < CommandTest
|
4
4
|
context "with a tumbler and some sources" do
|
@@ -9,9 +9,9 @@ class TumbleCommandTest < CommandTest
|
|
9
9
|
end
|
10
10
|
|
11
11
|
should "show sources" do
|
12
|
-
mock(@command).
|
13
|
-
mock(@command).
|
14
|
-
mock(@command).
|
12
|
+
mock(@command).say("Your gem sources are now:")
|
13
|
+
mock(@command).say("- #{@sources.first}")
|
14
|
+
mock(@command).say("- #{URL}")
|
15
15
|
@command.show_sources
|
16
16
|
end
|
17
17
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemcutter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Quaranto
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-11 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "0"
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: net-scp
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
25
35
|
description:
|
26
36
|
email: nick@quaran.to
|
27
37
|
executables: []
|
@@ -77,7 +87,7 @@ specification_version: 3
|
|
77
87
|
summary: Awesome gem hosting
|
78
88
|
test_files:
|
79
89
|
- test/command_helper.rb
|
80
|
-
- test/
|
81
|
-
- test/
|
82
|
-
- test/
|
83
|
-
- test/
|
90
|
+
- test/commands/migrate_command_test.rb
|
91
|
+
- test/commands/tumble_command_test.rb
|
92
|
+
- test/commands/push_command_test.rb
|
93
|
+
- test/commands/abstract_command_test.rb
|